چیتشیت
RAG چندحالته و بر پایهی تصویر
Multimodal and Vision-Native RAG
تولید امبدینگ تصاویر صفحات، امتیازدهی با MaxSim، ادغام مودالیتهها، استناد به نواحی شواهد. پایتون و تایپاسکریپت از درسها.
فهرست مطالب
پایپلاین پرسشوپاسخ اسناد با اولویت تصویر
معماریوظایف در کد
کار و کد| وظیفه | کد |
|---|---|
| امتیازدهی به یک صفحه | maxsim(query_tokens, patches) |
| رتبهبندی صفحات آزمایشی | retrieve(query, pages, k=3) |
| هرس کردن پچها | doc_prune(patches, keep_fraction=0.5) |
| ایندکس با هرس کردن | build_index(prune=True) |
| ادغام سه مودالیته | fuse([t, i, a], [0.3, 0.4, 0.3]) |
| تلاش مجدد در صورت اطمینان پایین | agentic_loop(query, confidence_floor=0.8) |
| بررسی یک مانیفست | validate_manifest(manifest, root) |
| جستجوی نواحی متنی | search(assets, query, limit=20) |
اجرای درسها و پروژه
دستورها| دستور | عملکرد |
|---|---|
python main.py | اسکلت MaxSim پروژهی پایانی به همراه ابطالسنجی هرس کردن |
npm start | تأیید خودآزمایی نمایشگر با --demo. خروج با کد 0 |
npm run serve | نمایشگر HTTP روی 127.0.0.1. پورت آزاد در صورت خالی بودن PORT |
npm test | آزمونهای fixture، گریز کاراکترهای HTML و مسیرها |
python3 scripts/project_test.py visual-evidence-library --init my-visual-evidence-library | فضای کاری ناقص را میسازد |
python3 scripts/project_test.py visual-evidence-library --stage 1 --path my-visual-evidence-library | نمرهدهی به مرحلهی 1 |
python3 main.py --manifest ./fixtures/manifest.json --query "return dry seeds" --out ./visual-output | فایلهای index.html و evidence.json را مینویسد |
python3 demo.py | جستجو را روی fixtureهای اصلی اجرا میکند |
تعامل متأخر با MaxSim
کدpython
def max_sim_score(query_tokens, doc_patches):
total = 0.0
for q in query_tokens: # یک بردار به ازای هر توکن پرسوجو
best = -1e9
for p in doc_patches: # تمام پچهای روی صفحه
s = dot(q, p)
if s > best:
best = s
total += best # مجموع بهترین تطابق به ازای هر توکن
return total
idx = build_index(prune=True) # DocPruner حدود 50% از پچها را نگه میدارد
hits = idx.retrieve(q, k=3) # فهرستی از (Page, score)
ادغام امتیاز و تلاش مجدد ایجنتی
گامبهگام- تجزیه«quiet» به صدا، «vegan brunch» به متن و «natural light» به تصویر میرود.
- text_retrieveتعداد کلیدواژهها در متن دیدگاه، تقسیم بر تعداد کلیدواژهها.
- image_retrieveسرنخهای پرسوجو به تگهایی مثل
natural_lightوairyنگاشت میشوند. - audio_retrieveمقدار «quiet» برابر با
1.0 - r.ambient_db / 80.0است؛ در غیر این صورت 0.5. - fuseمجموع وزندار با وزنهای 0.3، 0.4 و 0.3. پارامتر
top_kتعداد 3 مورد را نگه میدارد. - بررسیامتیاز بالا زیر
confidence_floorعبارت « bright windows low noise» را اضافه میکند. - دور 2ادغام دوباره با وزنهای 0.3، 0.5 و 0.2.
- grounded_generateهر نتیجه به دیدگاه، تگهای تصویر و دسیبل محیط استناد میکند.
مقایسهی گزینهها کنار هم
مقایسه| فاکتور | ColPali | VisRAG | Text-RAG |
|---|---|---|---|
| بردارهای صفحه | $N_p$ بردار پچ | یک بردار ادغامشده (pooled) | یک بردار به ازای هر تکه (chunk) |
| امتیازدهی | MaxSim | بایانکودر | کسینوسی روی تکهها |
| مرحلهی OCR | ندارد | ندارد | OCR / pdftotext |
| فضای ذخیرهسازی | ~15 برابر text-RAG بعد از PQ | کوچکتر | ~150 کیلوبایت به ازای هر 50 تکه |
| بازخوانی | قوی | ضعیفتر | نمودارها و جدولها را از دست میدهد |
| کاربرد برای | کیفیت | مقیاس | اسناد صرفاً متنی |
چه زمانی استفاده کنیم؟
نکتهها- از ColPali یا ColQwen2 برای گزارشهای مالی، مقالات، قراردادها و پروندههای پزشکی استفاده کنید.
- از VisRAG زمانی استفاده کنید که سرعت ایندکس و حجم ذخیرهسازی مهمتر از بازخوانی است.
- از text-RAG برای مقالات ویکی، لاگهای چت و آرشیوهای چندمیلیونصفحهای استفاده کنید.
- از text-RAG زمانی استفاده کنید که الزامات قانونی نیازمند متن OCR استخراجپذیر باشد.
- از CLIP یا SigLIP 2 برای متن و تصویر و از CLAP برای متن و صدا استفاده کنید.
- ابتدا از ادغام امتیاز استفاده کنید؛ وقتی A/B برتری واضحی نشان داد به ادغام MoE ارتقا دهید.
فرمولها و اعداد
مفهومها- MaxSim
- مجموع $\sum_i \max_j \cos(q_i, p_j)$ روی توکنهای پرسوجو و پچهای صفحه.
- فضای ذخیرهسازی ColPali
- 50 * 729 * 128 * 4 بایت = ~18 مگابایت خام، ~2.3 مگابایت بعد از 8x PQ.
- فضای ذخیرهسازی Text-RAG
- 50 تکه * ابعاد 768 * 4 بایت = ~150 کیلوبایت.
- PQ
- فشردهسازی ذخیرهسازی تا ~8 برابر با حفظ شباهت برداری.
- ViDoRe
- شاخص nDCG@5 برای ColPali-v1 حدود 80%، برای Text-RAG حدود 50-60%.
- صفحهی ColQwen
- حدود 2048 امبدینگ پچ با بعد 128.
- DocPruner
- 50% فشردهسازی با کمتر از 0.5% افت دقت.
- اهداف پروژهی پایانی
- 10 هزار صفحه، ارسال 5 صفحهی برتر به VLM، پاسخ زیر 2 ثانیه.
پیشفرضها
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
EMB_DIM | 16 | بردارهای پچ ساختگی در پروژهی پایانی |
keep_fraction | 0.5 | doc_prune حداقل 1 پچ را نگه میدارد |
Retrieve k | 5 | صفحات برتر با MaxSim |
confidence_floor | 0.8 | main مقدار 0.7 را رد میکند |
`search` limit | 20 | باید بین 1 و 100 باشد |
--query | seed return | CLI کتابخانهی شواهد |
--model | local-vision-model | همراه با --vision-image استفاده میشود |
--out | visual-output | حاوی index.html و evidence.json است |
خطاهای مانیفست و پیشنهادها
عیبیابیشناسههای دارایی (Asset) باید غیرخالی و یکتا باشند
- علت
idخالی یا تکراری- راهحل
- به هر دارایی یک شناسه یکتا اختصاص دهید
ابعاد تصویر باید اعداد صحیح مثبت و حداکثر 20000 باشند
- علت
widthیاheightنامعتبر- راهحل
- اندازهی پیکسلها را به صورت عدد صحیح تعریف کنید
دارایی باید تصویری داخل پوشهی مانیفست باشد
- علت
- مسیر خارج از ریشه است یا پسوند نادرست دارد
- راهحل
- از پسوندهای .svg، .png، .jpg یا .jpeg در ریشه استفاده کنید
حجم دارایی از 5 مگابایت بیشتر است
- علت
- فایل بزرگ است
- راهحل
- تصویر را فشرده یا کوچک کنید
کادر محدودکننده بیرون از ابعاد تعریفشدهی تصویر است
- علت
- مقدار x + w یا y + h خیلی بزرگ است
- راهحل
bboxرا اصلاح کنید
متن پیشنهادی مدل پیش از ایندکس نیازمند بازبینی صریح است
- علت
- مقدار
reviewedبرابر با true نیست - راهحل
- تصویر را بررسی کرده، سپس reviewed=true قرار دهید
استخراج تصویر نیازمند پرچمهای --provider-url، --width و --height است
- علت
- پرچمهای ناموجود
- راهحل
- هر سه پرچم را ارسال کنید
بایتهای تصویر با پسوند فایل همخوانی ندارد
- علت
- بایتهای جادویی (magic bytes) مربوط به PNG یا JPEG متفاوت است
- راهحل
- از پسوند صحیح استفاده کنید
کوتهنوشتها
اصطلاحها- MaxSim
- بیشینهی شباهت به ازای هر توکن پرسوجو، جمعشده در کل پرسوجو.
- ViDoRe
- ارزیابی بازیابی اسناد تصویری (Visual Document Retrieval Evaluation) با معیار nDCG@5.
- PQ / OPQ
- کوانتیزهسازی ضربی (product quantization). بردار پچها را فشرده میکند.
- VisRAG
- هر صفحه را با یک VLM در یک بردار واحد ادغام (pool) میکند.
- M3DocRAG
- صفحات را در میان اسناد مختلف برای استدلال چندصفحهای بازیابی میکند.
- ادغام MoE
- یک شبکهی دروازهبانی (gating network) درخواست را به متخصصان هر مودالیته هدایت میکند.
- MuRAG
- مقالهی سال 2022 که آغازگر RAG چندحالته بود.
- نواحی شواهد
- یک کادر محدودکننده روی صفحهی منبع برای بخش پاسخ.
پرسشها
پرسش و پاسخ- چرا MaxSim و نه شباهت میانگین؟
- پچهای نامرتبط میانگین را بیاثر و رقیق میکنند.
- چگونه به منابع ترکیبی استناد کنیم؟
- متن
[1]، تصویر[img 3]، صدا[audio 2 at 0:34]. - چگونه RAG بینمودالیتی را ارزیابی کنیم؟
- با Recall@k برای هر مودالیته و دقت top-k ادغامشده.
- آیا کتابخانهی شواهد OCR انجام میدهد؟
- خیر. مستطیلهای متنی دادهشده را ایندکس میکند.
- پوشش پرسوجو (Query coverage) چیست؟
- عبارتهای مطابقتیافته تقسیم بر کل عبارتهای پرسوجو. این معیار اطمینان نیست.