Sentrev ( Sense Tr .
Sentrev funktioniert mit:
SentenceTransformer im Python -Paket sentence_transformers geladen wurden Sie können das Paket mit pip installieren ( einfacher, aber keine Anpassung ):
python3 -m pip install sentrevOder Sie können es aus dem Quellcode erstellen ( schwieriger, aber anpassbar ):
# clone the repo
git clone https://github.com/AstraBert/SenTrEv.git
# access the repo
cd SenTrEv
# build the package
python3 -m build
# install the package locally with editability settings
python3 -m pip install -e .Sentrev wendet einen sehr einfachen Bewertungs -Workflow an:
In der folgenden Abbildung finden Sie eine Visualisierung des Workflows
Die Metriken, die zur Bewertung der Leistung verwendet wurden, waren:
Erfolgsrate : definiert als die Zahl der Zahlenabnahme, bei der der korrekte Kontext von allen abgerufenen Kontexten aus den gesamten Abrufoperationen abgerufen wurde:
Durchschnittliches wechselseitiges Ranking (MRR) : MRR definiert, wie hoch in der Rangfolge des richtigen Kontextes unter den abgerufenen Ergebnissen platziert wird. MRR@10 wurde verwendet, was bedeutet, dass für jede Abrufoperation 10 Elemente zurückgegeben wurden und eine Bewertung für die Rangliste des richtigen Kontextes durchgeführt wurde, der dann zwischen 0 und 1 normalisiert wurde (bereits in Sentrev implementiert). Ein MRR von 1 bedeutet, dass der richtige Kontext zuerst eingestuft wurde, während ein MRR von 0 bedeutet, dass er nicht abgerufen wurde. MRR wird mit der folgenden allgemeinen Gleichung berechnet:
Wenn der korrekte Kontext nicht abgerufen wird, wird MRR automatisch auf 0 gesetzt. MRR wird für jeden Abrufbetrieb berechnet, dann werden die Durchschnitts- und Standardabweichung berechnet und gemeldet.
Zeitleistung : Für jeden Abrufbetrieb wird die Zeitleistung in Sekunden berechnet: Anschließend werden die Durchschnitts- und Standardabweichung gemeldet.
Kohlenstoffemissionen : Die Kohlenstoffemissionen werden in GCO2EQ (Gramm CO2 -Äquivalent) über die Python Library codecarbon berechnet und für die österreichische Region bewertet. Sie werden für die globale Rechenlast aller Abrufvorgänge gemeldet.
Sie können QDrant problemlos mit Docker ausführen:
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest Jetzt hört Ihre Vektor -Datenbank unter http://localhost:6333
Nehmen wir an, wir haben drei PDFs ( ~/pdfs/instructions.pdf , ~/pdfs/history.pdf , ~/pdfs/info.pdf ) und wir möchten das Abrufen mit drei verschiedenen Codierern sentence-transformers/all-MiniLM-L6-v2 , sentence-transformers/sentence-t5-base sentence-transformers/all-mpnet-base-v2 testen.
Wir können es mit diesem sehr einfachen Code tun:
from sentrev . evaluator import evaluate_rag
from sentence_transformers import SentenceTransformer
from qdrant_client import QdrantClient
# load all the embedding moedels
encoder1 = SentenceTransformer ( 'sentence-transformers/all-MiniLM-L6-v2' )
encoder2 = SentenceTransformer ( 'sentence-transformers/sentence-t5-base' )
encoder3 = SentenceTransformer ( 'sentence-transformers/all-mpnet-base-v1' )
# create a list of the embedders and a dictionary that map each one with its name for the stats report which will be output by SenTrEv
encoders = [ encoder1 , encoder2 , encoder3 ]
encoder_to_names = { encoder1 : 'all-MiniLM-L6-v2' , encoder2 : 'sentence-t5-base' , encoder3 : 'all-mpnet-base-v1' }
# set up a Qdrant client
client = QdrantClient ( "http://localhost:6333" )
# create a list of your PDF paths
pdfs = [ '~/pdfs/instructions.pdf' , '~/pdfs/history.pdf' , '~/pdfs/info.pdf' ]
# Choose a path for the CSV where the evaluation stats will be saved
csv_path = '~/eval/stats.csv'
# evaluate retrieval
evaluate_rag ( pdfs = pdfs , encoders = encoders , encoder_to_name = encoder_to_names , client = client , csv_path = csv_path , distance = 'euclid' , chunking_size = 400 , mrr = 10 , carbon_tracking = "USA" , plot = True ) Sie können mit dem Chunking Ihres PDF herumspielen, indem Sie das Argument der chunking_size oder mit dem Prozentsatz des Textes einstellen, das zum Testen von Abrufen verwendet wird, indem text_percentage oder mit der zum Abrufen verwendeten Entfernungsmetrik verwendet wird, indem Sie das distance oder mit den mrr -Einstellungen einstellen, indem Sie die Anzahl der abgerufenen Elemente einstellen (in diesem Fall 10). Sie können auch plot=True übergeben, wenn Sie für die Bewertung Grundstücke wünschen: Die Diagramme werden im selben Ordner der CSV -Datei gespeichert. Wenn Sie die Verfolgung der Carbonemissionen einschalten möchten, können Sie die Option carbon_tracking verwenden, gefolgt von dem Drei-Buchstaben-ISO-Code des Staates, in dem Sie sich befinden.
Sie können auch QDRant-On-Cloud-Datenbanklösungen ausnutzen (mehr dazu hier). Sie benötigen nur Ihre QDrant -Cluster -URL und den API -Schlüssel, um darauf zuzugreifen:
from qdrant_client import QdrantClient
client = QdrantClient ( url = "YOUR-QDRANT-URL" , api_key = "YOUR-API-KEY" )Dies ist die einzige Änderung, die Sie zu dem Code im vorherigen Beispiel vornehmen müssen.
Sie können Sentrev auch verwenden, um Ihre PDFs in eine QDRant -Datenbank zu unterteilen, zu vectorisieren und hochzuladen.
from sentrev . evaluator import upload_pdfs
encoder = SentenceTransformer ( 'sentence-transformers/all-MiniLM-L6-v2' )
pdfs = [ '~/pdfs/instructions.pdf' , '~/pdfs/history.pdf' , '~/pdfs/info.pdf' ]
client = QdrantClient ( "http://localhost:6333" )
upload_pdfs ( pdfs = pdfs , encoder = encoder , client = client ) Was zuvor betrifft, können Sie auch mit dem Argument chunking_size (Standard sind 1000) und mit dem distance (Standard ist Cosinus) herumspielen.
Sie können auch bereits vorhandene Sammlungen in einer QDrant-Datenbank mit Sentrev durchsuchen:
from sentrev . utils import NeuralSearcher
encoder = SentenceTransformer ( 'sentence-transformers/all-MiniLM-L6-v2' )
collection_name = 'customer_help'
client = QdrantClient ( "http://localhost:6333" )
searcher = NeuralSearcher ( client = client , model = encoder , collection_name = collection_name )
res = searcher . search ( "Is it possible to pay online with my credit card?" , limit = 5 )Die Ergebnisse werden als Liste der Nutzlasten zurückgegeben (die Metadaten, die Sie zusammen mit den Vektorpunkten in die QDRant -Sammlung hochgeladen wurden).
Wenn Sie SentRev upload_pdfs -Funktion verwendet haben, sollten Sie auf diese Weise auf die Ergebnisse zugreifen können:
text = res [ 0 ][ "text" ]
source = res [ 0 ][ "source" ]
page = res [ 0 ][ "page" ]Sie können sich auf den hier gemeldeten Testfall beziehen
Suchen Sie hier eine Referenz für alle Funktionen und Kurse
Beiträge sind immer willkommen!
Finden Sie Beitragsrichtlinien bei beitragen.md.md
Dieses Projekt ist Open-Source und wird im Rahmen einer MIT-Lizenz bereitgestellt.
Wenn Sie SenTrEv verwendet haben, um Ihre Abrufmodelle zu bewerten, erwägen Sie bitte:
Bertelli, AC (2024). Bewertung der Leistung von drei Satztransformatoren -Texteinbettungen - eine Fallstudie für Sentrev (V0.1.0). Zenodo. https://doi.org/10.5281/zenodo.14503887
Wenn Sie es nützlich empfanden, sollten Sie es in Betracht ziehen, es zu finanzieren.