Sentrev ( Sen tence tr ansformers ev aluator) เป็นแพ็คเกจ Python ที่มีวัตถุประสงค์เพื่อดำเนินการทดสอบการประเมินอย่างง่ายเพื่อช่วยให้คุณเลือกรูปแบบการฝังที่ดีที่สุดสำหรับการสร้าง Augmented Generation (RAG) ของคุณ
Sentrev ทำงานร่วมกับ:
SentenceTransformer ใน Python Package sentence_transformers คุณสามารถติดตั้งแพ็คเกจโดยใช้ pip ( ง่ายกว่า แต่ไม่มีการปรับแต่ง ):
python3 -m pip install sentrevหรือคุณสามารถสร้างจากซอร์สโค้ด ( ยากขึ้น แต่ปรับแต่งได้ ):
# 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 ใช้เวิร์กโฟลว์การประเมินที่ง่ายมาก:
ดูรูปด้านล่างสำหรับการสร้างภาพของเวิร์กโฟลว์
ตัวชี้วัดที่ใช้ในการประเมินประสิทธิภาพคือ:
อัตราความสำเร็จ : กำหนดเป็นการดำเนินการดึงตัวเลขซึ่งบริบทที่ถูกต้องได้รับการจัดอันดับสูงสุดในบริบทที่ดึงมาทั้งหมดจากการดำเนินการดึงข้อมูลทั้งหมด:
ค่าเฉลี่ยการจัดอันดับซึ่งกันและกัน (MRR) : MRR กำหนดว่าการจัดอันดับบริบทที่ถูกต้องจะสูงเพียงใดในผลลัพธ์ที่ได้รับ ใช้ MRR@10 ซึ่งหมายความว่าสำหรับการเรียกคืนแต่ละรายการ 10 รายการถูกส่งคืนและการประเมินผลได้ดำเนินการสำหรับการจัดอันดับบริบทที่ถูกต้องซึ่งจะถูกทำให้เป็นมาตรฐานระหว่าง 0 ถึง 1 (นำไปใช้ใน Sentrev) MRR ของ 1 หมายความว่าบริบทที่ถูกต้องได้รับการจัดอันดับก่อนในขณะที่ MRR ของ 0 หมายความว่ามันไม่ได้รับการเรียกคืน MRR คำนวณด้วยสมการทั่วไปต่อไปนี้:
เมื่อไม่ได้รับบริบทที่ถูกต้อง MRR จะถูกตั้งค่าเป็น 0 โดยอัตโนมัติ MRR จะถูกคำนวณสำหรับการดำเนินการดึงแต่ละครั้งจากนั้นค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานจะถูกคำนวณและรายงาน
ประสิทธิภาพเวลา : สำหรับการดำเนินการแต่ละครั้งจะมีการคำนวณประสิทธิภาพเวลาในวินาที: รายงานค่าเบี่ยงเบนเฉลี่ยและมาตรฐาน
การปล่อยคาร์บอน : การปล่อยคาร์บอนคำนวณใน GCO2EQ (กรัมของ CO2 เทียบเท่า) ผ่าน codecarbon ห้องสมุด Python และได้รับการประเมินสำหรับภูมิภาคออสเตรีย พวกเขาได้รับการรายงานสำหรับภาระการคำนวณทั่วโลกของการดำเนินการดึงทั้งหมด
คุณสามารถเรียกใช้ qdrant ในเครื่องด้วย Docker ได้อย่างง่ายดาย:
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest ตอนนี้ฐานข้อมูลเวกเตอร์ของคุณกำลังฟังอยู่ที่ http://localhost:6333
สมมติว่าเรามี pdfs สามตัว ( ~/pdfs/instructions.pdf , ~/pdfs/history.pdf , ~/pdfs/info.pdf ) และเราต้องการ sentence-transformers/sentence-t5-base การดึงข้อมูลที่แตกต่างกัน sentence-transformers/all-MiniLM-L6-v2 sentence-transformers/all-mpnet-base-v2
เราสามารถทำได้ด้วยรหัสที่ง่ายมากนี้:
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 ) คุณสามารถเล่นกับ chunking ของ PDF ของคุณโดยการตั้งค่า chunking_size อาร์กิวเมนต์หรือด้วยเปอร์เซ็นต์ของข้อความที่ใช้ในการทดสอบการดึงโดยการตั้ง text_percentage หรือด้วยตัวชี้วัดระยะทางที่ใช้สำหรับการดึงข้อมูลโดยการตั้งค่าการโต้แย้ง distance หรือการตั้งค่า mrr โดยการปรับจำนวนรายการที่ดึงมา (ในกรณีนี้ 10); นอกจากนี้คุณยังสามารถผ่าน plot=True หากคุณต้องการแปลงสำหรับการประเมินผล: พล็อตจะถูกบันทึกไว้ภายใต้โฟลเดอร์เดียวกันของไฟล์ CSV; หากคุณต้องการเปิดการติดตามการปล่อยก๊าซคาร์บอนคุณสามารถใช้ตัวเลือก carbon_tracking ตามด้วยรหัส ISO สามตัวอักษรของสถานะที่คุณอยู่
นอกจากนี้คุณยังสามารถใช้ประโยชน์จากโซลูชันฐานข้อมูล Qdrant on-Cloud (เพิ่มเติมเกี่ยวกับที่นี่) คุณเพียงแค่ต้องการ URL QDDRANT คลัสเตอร์และปุ่ม API เพื่อเข้าถึง:
from qdrant_client import QdrantClient
client = QdrantClient ( url = "YOUR-QDRANT-URL" , api_key = "YOUR-API-KEY" )นี่คือการเปลี่ยนแปลงเพียงอย่างเดียวที่คุณต้องทำกับรหัสที่ให้ไว้ในตัวอย่างก่อน
คุณสามารถใช้ SentRev เพื่อเป็นก้อนเวกเตอร์และอัปโหลด PDF ของคุณไปยังฐานข้อมูล 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 ) สำหรับก่อนหน้านี้คุณสามารถเล่นกับอาร์กิวเมนต์ chunking_size (ค่าเริ่มต้นคือ 1,000) และด้วยอาร์กิวเมนต์ distance (ค่าเริ่มต้นคือโคไซน์)
นอกจากนี้คุณยังสามารถค้นหาคอลเลกชันที่มีอยู่แล้วในฐานข้อมูล QDDRANT ด้วย 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 )ผลลัพธ์จะถูกส่งคืนเป็นรายการของ payloads (ข้อมูลเมตาที่คุณอัปโหลดไปยังคอลเล็กชัน Qdrant พร้อมกับคะแนนเวกเตอร์)
หากคุณใช้ฟังก์ชั่น SentRev upload_pdfs คุณควรจะสามารถเข้าถึงผลลัพธ์ด้วยวิธีนี้:
text = res [ 0 ][ "text" ]
source = res [ 0 ][ "source" ]
page = res [ 0 ][ "page" ]คุณสามารถอ้างถึงกรณีทดสอบที่รายงานได้ที่นี่
ค้นหาข้อมูลอ้างอิงสำหรับฟังก์ชั่นและคลาสทั้งหมดที่นี่
ยินดีต้อนรับการมีส่วนร่วมเสมอ!
ค้นหาแนวทางการบริจาคที่มีส่วนร่วม
โครงการนี้เป็นโอเพ่นซอร์สและมีให้ภายใต้ใบอนุญาต MIT
หากคุณใช้ SenTrEv เพื่อประเมินโมเดลการดึงข้อมูลของคุณโปรดพิจารณาอ้างถึง:
Bertelli, AC (2024) การประเมินผลการปฏิบัติงานของสามประโยค Transformers Text Embedders - กรณีศึกษาสำหรับ Sentrev (v0.1.0) Zenodo https://doi.org/10.5281/zenodo.14503887
หากคุณพบว่ามีประโยชน์โปรดพิจารณาเงินทุน