SentRev ( Sen Tence Tr Ansformers EV Aluator) adalah paket Python yang bertujuan menjalankan tes evaluasi sederhana untuk membantu Anda memilih model embedding terbaik untuk pengambilan generasi augmented (RAG) dengan dokumen PDF Anda.
SentRev bekerja dengan:
SentenceTransformer dalam paket Python sentence_transformers Anda dapat menginstal paket menggunakan pip ( lebih mudah tetapi tidak ada kustomisasi ):
python3 -m pip install sentrevAtau Anda dapat membangunnya dari kode sumber ( lebih sulit tetapi dapat disesuaikan ):
# 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 menerapkan alur kerja evaluasi yang sangat sederhana:
Lihat gambar di bawah ini untuk visualisasi alur kerja
Metrik yang digunakan untuk mengevaluasi kinerja adalah:
Tingkat keberhasilan : didefinisikan sebagai operasi pengambilan angka di mana konteks yang benar diambil peringkat teratas di antara semua konteks yang diambil, dari total operasi pengambilan:
Rata -rata peringkat resiprokal (MRR) : MRR mendefinisikan seberapa tinggi peringkat konteks yang benar ditempatkan di antara hasil yang diambil. MRR@10 digunakan, artinya untuk setiap operasi pengambilan 10 item dikembalikan dan evaluasi dilakukan untuk peringkat konteks yang benar, yang kemudian dinormalisasi antara 0 dan 1 (sudah diimplementasikan dalam SentRev). MRR dari 1 berarti bahwa konteks yang benar diberi peringkat pertama, sedangkan MRR dari 0 berarti tidak diambil. MRR dihitung dengan persamaan umum berikut:
Ketika konteks yang benar tidak diambil, MRR secara otomatis diatur ke 0. MRR dihitung untuk setiap operasi pengambilan, maka rata -rata dan standar deviasi dihitung dan dilaporkan.
Kinerja Waktu : Untuk setiap operasi pengambilan, kinerja waktu dalam detik dihitung: rata -rata dan standar deviasi kemudian dilaporkan.
Emisi karbon : Emisi karbon dihitung dalam GCO2EQ (gram yang setara CO2) melalui codecarbon Perpustakaan Python dan dievaluasi untuk wilayah Austria. Mereka dilaporkan untuk beban komputasi global dari semua operasi pengambilan.
Anda dapat dengan mudah menjalankan Qdrant secara lokal dengan Docker:
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest Sekarang database vektor Anda mendengarkan di http://localhost:6333
Katakanlah kami memiliki tiga PDF ( ~/pdfs/instructions.pdf , ~/pdfs/history.pdf , ~/pdfs/info.pdf ) dan kami ingin menguji pengambilan dengan tiga sentence-transformers/all-MiniLM-L6-v2 sentence-transformers/sentence-t5-base sentence-transformers/all-mpnet-base-v2 .
Kita bisa melakukannya dengan kode yang sangat sederhana ini:
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 ) Anda dapat bermain -main dengan chunking PDF Anda dengan mengatur argumen chunking_size atau dengan persentase teks yang digunakan untuk menguji pengambilan dengan mengatur text_percentage atau dengan metrik jarak yang digunakan untuk pengambilan dengan mengatur argumen distance atau dengan pengaturan mrr dengan menyetel jumlah item yang diambil kembali (dalam kasus ini 10); Anda juga dapat melewati plot=True jika Anda ingin plot untuk evaluasi: plot akan disimpan di bawah folder yang sama dari file CSV; Jika Anda ingin mengaktifkan pelacakan emisi karbon, Anda dapat menggunakan opsi carbon_tracking diikuti oleh kode ISO tiga kali lipat dari negara bagian tempat Anda berada.
Anda juga dapat mengeksploitasi solusi database qdrant on-cloud (lebih lanjut tentang itu di sini). Anda hanya membutuhkan URL klaster Qdrant Anda dan kunci API untuk mengaksesnya:
from qdrant_client import QdrantClient
client = QdrantClient ( url = "YOUR-QDRANT-URL" , api_key = "YOUR-API-KEY" )Ini adalah satu -satunya perubahan yang harus Anda lakukan pada kode yang disediakan dalam contoh sebelumnya.
Anda dapat menggunakan SentRev juga untuk memotong, vektor dan mengunggah PDF Anda ke database Qdrant.
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 ) Adapun sebelumnya, Anda juga dapat bermain -main dengan argumen chunking_size (default adalah 1000) dan dengan argumen distance (default adalah cosinus).
Anda juga dapat mencari koleksi yang sudah ada dalam database QDrant dengan SentRev:
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 )Hasilnya akan dikembalikan sebagai daftar muatan (metadata yang Anda unggah ke koleksi Qdrant bersama dengan poin vektor).
Jika Anda menggunakan fungsi SentRev upload_pdfs , Anda harus dapat mengakses hasilnya dengan cara ini:
text = res [ 0 ][ "text" ]
source = res [ 0 ][ "source" ]
page = res [ 0 ][ "page" ]Anda dapat merujuk pada kasus uji yang dilaporkan di sini
Temukan referensi untuk semua fungsi dan kelas di sini
Kontribusi selalu diterima!
Temukan Pedoman Kontribusi di Kontribusi.MD
Proyek ini open-source dan disediakan di bawah lisensi MIT.
Jika Anda menggunakan SenTrEv untuk mengevaluasi model pengambilan Anda, harap pertimbangkan mengutipnya:
Bertelli, AC (2024). Evaluasi kinerja tiga kalimat Transformers Teks Embedders - Studi kasus untuk SentRev (v0.1.0). Zenodo. https://doi.org/10.5281/zenodo.14503887
Jika Anda merasa berguna, silakan pertimbangkan mendanai.