Sentrev ( Sen Tence tr ansformers ev aluator) هي حزمة بيثون تهدف إلى إجراء اختبارات تقييم بسيطة لمساعدتك في اختيار أفضل نموذج التضمين للتراجع المعزز (RAG) مع مستندات PDF.
يعمل Sentrev مع:
SentenceTransformer في حزمة Python 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 عناصر من عمليات الاسترجاع 10 وتم إجراء تقييم لترتيب السياق الصحيح ، والذي تم تطبيعه بعد ذلك بين 0 و 1 (تم تنفيذه بالفعل في Sentrev). يعني MRR من 1 أن السياق الصحيح تم تصنيفه أولاً ، في حين أن MRR من 0 يعني أنه لم يتم استرداده. يتم حساب MRR مع المعادلة العامة التالية:
عندما لا يتم استرداد السياق الصحيح ، يتم ضبط MRR تلقائيًا على 0. يتم حساب MRR لكل عملية استرجاع ، ثم يتم حساب المتوسط والانحراف المعياري والإبلاغ عنه.
أداء الوقت : لكل عملية استرجاع يتم حساب الأداء الزمني في الثواني: ثم يتم الإبلاغ عن الانحراف المعياري والمعيار.
انبعاثات الكربون : يتم حساب انبعاثات الكربون في GCO2EQ (غرام من مكافئ ثاني أكسيد الكربون) من خلال codecarbon في مكتبة بيثون وتم تقييمه للمنطقة النمساوية. تم الإبلاغ عن الحمل الحسابي العالمي لجميع عمليات الاسترجاع.
يمكنك بسهولة تشغيل 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/all-MiniLM-L6-v2 ، sentence-transformers/sentence-t5-base 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 ) يمكنك أن تلعب حولها مع تقطيع PDF الخاص بك عن طريق تعيين وسيطة chunking_size أو مع النسبة المئوية للنص المستخدمة لاختبار الاسترجاع عن طريق تعيين text_percentage أو مع مقياس المسافة المستخدم للاسترجاع عن طريق تعيين وسيطة distance أو مع إعدادات mrr عن طريق ضبط عدد العناصر المستردة (في هذه الحالة 10) ؛ يمكنك أيضًا تمرير plot=True إذا كنت تريد مخططات للتقييم: سيتم حفظ المؤامرات تحت نفس المجلد من ملف CSV ؛ إذا كنت ترغب في تشغيل تتبع انبعاثات الكربون ، فيمكنك استخدام خيار carbon_tracking متبوعًا برمز ISO من ثلاث رسائل من الحالة التي تكون فيها.
يمكنك أيضًا استغلال حلول قاعدة بيانات QDrant على السحابة (المزيد عنها هنا). تحتاج فقط
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 (الافتراضي هو 1000) ومع وسيطة distance (الافتراضي هو جيب التمام).
يمكنك أيضًا البحث عن مجموعات موجودة بالفعل في قاعدة بيانات QDrant مع 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 )سيتم إرجاع النتائج كقائمة من الحمولات الصافية (البيانات الوصفية التي قمت بتحميلها إلى مجموعة QDrant مع نقاط المتجه).
إذا استخدمت وظيفة SentRev upload_pdfs ، فيجب أن تكون قادرًا على الوصول إلى النتائج بهذه الطريقة:
text = res [ 0 ][ "text" ]
source = res [ 0 ][ "source" ]
page = res [ 0 ][ "page" ]يمكنك الرجوع إلى حالة الاختبار المبلغ عنها هنا
ابحث عن مرجع لجميع الوظائف والفئات هنا
المساهمات دائما موضع ترحيب!
العثور على إرشادات المساهمة في المساهمة. md
هذا المشروع مفتوح المصدر ويتم توفيره بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
إذا استخدمت SenTrEv لتقييم نماذج الاسترجاع الخاصة بك ، فيرجى التفكير في ذلك:
بيرتيلي ، AC (2024). تقييم أداء ثلاثة محولات من المحولات النصية - دراسة حالة لـ SentRev (v0.1.0). زنودو. https://doi.org/10.5281/zenodo.14503887
إذا وجدت أنها مفيدة ، يرجى التفكير في تمويله.