محک ها¶
از نسخه 0.3.0 مخزن یک محک کوچک بازیابی فارسی در پوشه benchmarks/ دارد:
data/corpus.jsonl: ۳۴ سند کوتاه درباره ادبیات، تاریخ، جغرافیا، فرهنگ و موضوع های روزمره. چند سند عمدا واژه های مشترک با سندهای دیگر دارند تا بازیابی را دشوارتر کنند.data/qa.jsonl: ۴۲ پرسش همراه شناسه سندهای مرتبط. دوازده پرسش برچسبspellingدارند و املای دیگری از واژه های پیکره را به کار می برند (اطاق به جای اتاق، طهران به جای تهران، هیات به جای هیئت، باطری به جای باتری، بلیط به جای بلیت، مساله به جای مسئله، آئین به جای آیین، پائیز به جای پاییز و رییس به جای رئیس).run_benchmark.py: ایندکس را می سازد و همه پیکربندی ها را می سنجد.
python benchmarks/run_benchmark.py
python benchmarks/run_benchmark.py --json results.json
python benchmarks/run_benchmark.py --embedder sentence-transformers --model intfloat/multilingual-e5-small
پیکره و پرسش ها در Hugging Face Hub هم با نام sadrmanesh/persian-rag-bench منتشر شده اند و نسخه نمایشی زنده روی همین پیکره جست و جو می کند:
from datasets import load_dataset
corpus = load_dataset("sadrmanesh/persian-rag-bench", "corpus", split="test")
qa = load_dataset("sadrmanesh/persian-rag-bench", "qa", split="test")
نتیجه ها¶
نسخه 0.3.0، پایتون 3.12، بردارساز درهم سازی (۵۱۲ بعد، n-gram های ۲ تا ۴ نویسه ای)، تکه های ۴۰۰ نویسه ای و k=10. معیار Hit@k سهم پرسش هایی است که سند مرتبط در k نتیجه نخست آنها هست. MRR و nDCG بر پایه سند حساب می شوند. تاخیر زمان یک فراخوانی retrieve روی یک ماشین لینوکس ۸ هسته ای است (میانه و صدک ۹۵ در پنج دور).
| پیکربندی | Hit@1 | Hit@5 | MRR@10 | nDCG@10 | Hit@1 (املایی) | p50 ms | p95 ms |
|---|---|---|---|---|---|---|---|
| sparse | 0.881 | 0.881 | 0.881 | 0.879 | 0.583 | 0.05 | 0.07 |
| dense | 0.952 | 0.976 | 0.957 | 0.962 | 0.917 | 0.64 | 0.73 |
| hybrid | 0.952 | 0.976 | 0.964 | 0.967 | 0.833 | 0.68 | 0.75 |
| sparse + rewrite | 0.952 | 0.976 | 0.964 | 0.967 | 0.833 | 0.21 | 0.46 |
| dense + rewrite | 0.952 | 0.976 | 0.957 | 0.962 | 0.917 | 1.49 | 2.91 |
| hybrid + rewrite | 0.952 | 0.976 | 0.964 | 0.967 | 0.833 | 1.55 | 3.10 |
تفسیر¶
- BM25 به تنهایی پنج پرسش از دوازده پرسش املایی را از دست می دهد، چون املای دیگر یک واژه برای آن واژه ای دیگر است. بازنویس پرسش بیشتر آنها را بازمی گرداند: Hit@1 روش واژگانی روی پرسش های املایی از 0.583 به 0.833 و در کل از 0.881 به 0.952 می رسد.
- بردارساز درهم سازی n-gram های نویسه ای را مقایسه می کند و به طور طبیعی تفاوت یک حرفی را تحمل می کند. به همین دلیل بازیابی برداری حتی بدون بازنویسی روی پرسش های املایی خوب است. مدل های معنایی رفتار دیگری دارند. اسکریپت را با مدل خودتان اجرا کنید.
- بازنویسی تعداد فراخوانی های بازیابی را به اندازه تعداد گونه ها بیشتر می کند و این در ستون های تاخیر دیده می شود، ولی برای ایندکس های حافظه ای در حد چند میلی ثانیه می ماند.
- مجموعه کوچک است و امتیازها عمدا بالا هستند. این محک برای کنترل رفتار ویژه فارسی در برابر پسرفت است، نه جدول رده بندی. برای تصمیم های مهم پرسش هایی از حوزه خودتان به
qa.jsonlاضافه کنید.
این محک در هر تغییر همراه آزمون ها اجرا می شود تا اسکریپت و داده ها معتبر بمانند.