چیت‌شیت

RAG چندحالته و بر پایه‌ی تصویر

Multimodal and Vision-Native RAG

تولید امبدینگ تصاویر صفحات، امتیازدهی با MaxSim، ادغام مودالیته‌ها، استناد به نواحی شواهد. پایتون و تایپ‌اسکریپت از درس‌ها.

  • ۱۲ بخش
  • ۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. پایپ‌لاین پرسش‌وپاسخ اسناد با اولویت تصویر
  2. وظایف در کد
  3. اجرای درس‌ها و پروژه
  4. تعامل متأخر با MaxSim
  5. ادغام امتیاز و تلاش مجدد ایجنتی
  6. مقایسه‌ی گزینه‌ها کنار هم
  7. چه زمانی استفاده کنیم؟
  8. فرمول‌ها و اعداد
  9. پیش‌فرض‌ها
  10. خطاهای مانیفست و پیشنهادها
  11. کوته‌نوشت‌ها
  12. پرسش‌ها

پایپ‌لاین پرسش‌وپاسخ اسناد با اولویت تصویر

معماری
تصاویر صفحهپچ‌هاMaxSimtop-k صفحهصفحات و نواحی استنادشدهفایل‌های PDFرندرکننده‌ی صفحه، 180 DPIColQwen2.5-v0.2~2048 پچ به ازای هر صفحهDocPruner50% فشرده‌سازیایندکس چندبرداریVespa یا Qdrantپرس‌وجوامبدینگ‌های توکنبازیابی top-kMaxSimپاسخ‌دهنده‌ی VLMپرس‌وجو + تصاویر صفحهنمایشگرکادرها روی صفحه‌ی منبع

وظایف در کد

کار و کد
وظیفهکد
امتیازدهی به یک صفحه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)

ادغام امتیاز و تلاش مجدد ایجنتی

گام‌به‌گام
  1. تجزیه«quiet» به صدا، «vegan brunch» به متن و «natural light» به تصویر می‌رود.
  2. text_retrieveتعداد کلیدواژه‌ها در متن دیدگاه، تقسیم بر تعداد کلیدواژه‌ها.
  3. image_retrieveسرنخ‌های پرس‌وجو به تگ‌هایی مثل natural_light و airy نگاشت می‌شوند.
  4. audio_retrieveمقدار «quiet» برابر با 1.0 - r.ambient_db / 80.0 است؛ در غیر این صورت 0.5.
  5. fuseمجموع وزن‌دار با وزن‌های 0.3، 0.4 و 0.3. پارامتر top_k تعداد 3 مورد را نگه می‌دارد.
  6. بررسیامتیاز بالا زیر confidence_floor عبارت « bright windows low noise» را اضافه می‌کند.
  7. دور 2ادغام دوباره با وزن‌های 0.3، 0.5 و 0.2.
  8. grounded_generateهر نتیجه به دیدگاه، تگ‌های تصویر و دسی‌بل محیط استناد می‌کند.

مقایسه‌ی گزینه‌ها کنار هم

مقایسه
فاکتورColPaliVisRAGText-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_DIM16بردارهای پچ ساختگی در پروژه‌ی پایانی
keep_fraction0.5doc_prune حداقل 1 پچ را نگه می‌دارد
Retrieve k5صفحات برتر با MaxSim
confidence_floor0.8main مقدار 0.7 را رد می‌کند
`search` limit20باید بین 1 و 100 باشد
--queryseed returnCLI کتابخانه‌ی شواهد
--modellocal-vision-modelهمراه با --vision-image استفاده می‌شود
--outvisual-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) چیست؟
عبارت‌های مطابقت‌یافته تقسیم بر کل عبارت‌های پرس‌وجو. این معیار اطمینان نیست.