من یک Reranker به خط لوله RAG خود اضافه کردم — و همه چیز خراب شد

من یک reranker به خط لوله RAG خود اضافه کردم. این کار بلافاصله تست‌های من را با شکست مواجه کرد.

در نسخه ۲، از hybrid retrieval با استفاده از FAISS و BM25 استفاده کردم. این روش از تمام ۱۹ سوال تست من سربلند بیرون آمد. سپس، برای بهبود دقت (precision)، یک cross-encoder reranker اضافه کردم.

تئوری ساده است:

  • مرحله ۱: استفاده از بازیابی سریع برای به‌دست آوردن مجموعه‌ای گسترده از کاندیداها.
  • مرحله ۲: استفاده از یک reranker هوشمند برای انتخاب بهترین‌ها.

پیاده‌سازی آن ۲۰ دقیقه طول کشید. اما بلافاصله ۲ مورد از ۱۹ تست من با شکست مواجه شد.

علت شکست، فرمت داده‌ها بود. داده‌های من شامل تکه‌های (chunks) متراکم و جدولی مانند این است: "Company: Zentara Robotics | CEO: Iris Kallas | Employees: 287"

مدل cross-encoder بر روی پاراگراف‌های زبان طبیعی آموزش دیده بود. وقتی با یک ردیف جدولی مواجه می‌شد، امتیاز بسیار پایینی به آن می‌داد. مدل فکر می‌کرد آن chunk بی‌ارتباط است.

hybrid retrieval پاسخ را پیدا کرده بود، اما reranker آن را دور ریخت.

۷ روش مختلف را برای رفع این مشکل امتحان کردم:

  • استفاده از مجموعه کاندیدای بزرگ‌تر.
  • ترکیب امتیازات reranker و retriever.
  • استفاده از rank fusion.

هیچ‌کدام جواب نداد. امتیاز reranker آن‌قدر منفی بود که بر همه چیز غلبه می‌کرد. مدل فقط رتبه کمتری نمی‌داد، بلکه فعالانه فرمت جدولی را رد می‌کرد.

از تلاش برای اصلاح محاسبات ریاضی دست کشیدم و ساختار را تغییر دادم.

به جای اینکه اجازه دهم reranker همه چیز را تصمیم بگیرد، از بهترین نتایج خود محافظت کردم. از استراتژی «جایگاه تضمین‌شده» (guaranteed slot) استفاده کردم:

  • اگر ۳ نتیجه برتر را می‌خواهید، ۲ نتیجه برتر مرحله اول را حفظ کنید.
  • از reranker فقط برای انتخاب نتیجه سوم استفاده کنید.

این کار تضمین می‌کند که نتایج جستجوی ترکیبی (hybrid search) در لیست نهایی باقی بمانند. reranker فقط جایگاه‌های باقی‌مانده را بهبود می‌بخشد.

نتیجه: ۱۹ از ۱۹ تست با موفقیت انجام شد.

درس‌های آموخته شده:

  • rerankerها ارتقای آنی نیستند. آن‌ها می‌توانند عملکرد را روی داده‌های ساختاریافته یا جدولی مختل کنند.
  • مجموعه ارزیابی (evaluation set) شما، شبکه نجات شماست. بدون آن ۱۹ تست، من یک سیستم خراب را عرضه می‌کردم.
  • از آنچه کار می‌کند محافظت کنید. اگر بازیابی مرحله اول شما خوب است، اجازه ندهید یک reranker آن را نادیده بگیرد.

قبل از اینکه به سراغ reranker بروید، یک retriever قوی بسازید.

Source: https://dev.to/santanu_mohanta_29/i-added-a-reranker-to-my-rag-pipeline-it-broke-everything-then-i-fixed-it-1c9i

Optional learning community: https://t.me/GyaanSetuAi