RAG با جستجوی برداری (Vector Search) در مقابل RAG با جستجوی کلیدواژهای (Keyword Search)
در RAG مبتنی بر جستجوی برداری، اسناد بر اساس شباهت معنایی Embedding بازیابی میشوند و میتوانند مفاهیم مشابه با کلمات متفاوت را پیدا کنند، در حالی که RAG مبتنی بر جستجوی کلیدواژهای (مثل BM25) اسناد را بر اساس تطابق دقیق کلمات کوئری با متن سند بازیابی میکند.
| ویژگی | RAG با جستجوی برداری (Vector Search) | RAG با جستجوی کلیدواژهای (Keyword Search) |
|---|---|---|
| مبنای بازیابی | شباهت معنایی | تطابق کلمه دقیق |
| قدرت در اصطلاحات فنی دقیق | ضعیفتر | قوی |
| قدرت در سؤالات با بیان متفاوت | قوی | ضعیفتر |
کِی از RAG با جستجوی برداری (Vector Search) استفاده کنیم؟
وقتی سؤالات کاربر ممکن است با کلمات متفاوتی نسبت به متن اصلی سند بیان شوند و درک معنایی اهمیت دارد.
کِی از RAG با جستجوی کلیدواژهای (Keyword Search) استفاده کنیم؟
وقتی جستجو باید روی اصطلاحات فنی دقیق، کدها یا نامهای خاص باشد که تطابق کلمه به کلمه اهمیت بیشتری از شباهت معنایی دارد.
مثال RAG با جستجوی برداری (Vector Search)
query_vec = embed("چطور رمز عبور را عوض کنم؟")
results = vector_db.search(query_vec, top_k=5)
مثال RAG با جستجوی کلیدواژهای (Keyword Search)
results = bm25_index.search("تغییر رمز عبور", top_k=5)
# فقط اسنادی با همین کلمات دقیق بازیابی میشوند
اشتباه رایج
اشتباه رایج استفاده از جستجوی برداری خالص برای پرسوجوهایی با کدهای دقیق یا شمارههای خاص است؛ مدلهای Embedding ممکن است تفاوت "کد ۱۲۳۴۵" و "کد ۱۲۳۴۶" را بهخوبی تشخیص ندهند، جایی که جستجوی کلیدواژهای دقیقتر است.
جمعبندی
برای درک معنایی و مفهومی سؤال از جستجوی برداری و برای تطابق دقیق اصطلاحات و کدها از جستجوی کلیدواژهای استفاده کنید؛ سیستمهای RAG پیشرفته معمولاً هر دو را ترکیب میکنند (Hybrid RAG).
