🔹 خیلی وقتها وقتی یک سیستم RAG (Retrieval-Augmented Generation) میسازیم، متوجه میشویم که مدل گاهی پاسخهای نامربوط میدهد؛ مقصر اصلی معمولاً جستجوی برداری اولیه (Vector Search / Bi-Encoder) است که فقط شباهت معنایی سطحی را پیدا میکند.
🔹 برای حل این مشکل، از سیستمهای Reranker (Cross-Encoder) استفاده میشود.
🔹تفاوت اصلی:
Bi-Encoder (جستجوی اولیه):
متن سوال و تک تک اسناد را جداگانه تبدیل به وکتور میکند و شباهتشان را سریع میسنجد (سریع اما با دقت متوسط).
Cross-Encoder (Reranker):
سوال و سند را همزمان به مدل میدهد تا تعامل کلمه به کلمه آنها را تحلیل کند (کندتر اما با دقت بسیار بالا).
🔹 پیادهسازی ساده با sentence-transformers:
from sentence_transformers import CrossEncoder
# بارگذاری مدل ریرنکر قدرتمند
model = CrossEncoder("BAAI/bge-reranker-large")
query = "چطور حافظه رم را در پایتون بهینهسازی کنیم؟"
documents = [
"پایتون زبان سطح بالایی است که مدیریت حافظه خودکار دارد.",
"استفاده از __slots__ در کلاسهای پایتون باعث کاهش شدید مصرف حافظه میشود.",
"هوش مصنوعی و یادگیری ماشین نیاز به پردازنده گرافیکی دارند.",
]
# امتیازدهی دقیق به جفتهای (سوال، سند)
pairs = [[query, doc] for doc in documents]
scores = model.predict(pairs)
# مرتبسازی اسناد بر اساس امتیاز واقعی مدل
ranked_docs = [
doc for _, doc in sorted(zip(scores, documents), reverse=True)
]
print("بهترین سند انتخاب شده توسط Reranker:")
print(ranked_docs[0])
🦾 @ai_inf