سود:
- پیاده سازی جستجوی ترکیبی که ترکیبی از انتخاب top-k و جستجوی معنایی و کلیدواژه است
- افزایش دقت جستجوی اول با رتبه بندی مجدد
- جستجوی بیشتر سوالات دشوار با تکنیک هایی مانند تبدیل پرس و جو و HyDE
شما اسناد را به خوبی خرد کردید و آنها را در پایگاه داده برداری قرار دادید. اکنون کار واقعی: واکشی قطعات مناسب زمانی که کاربر سوالی می پرسد. این بازیابی نامیده می شود و ستون فقرات کیفیت RAG است. عبارت "کیفیت بازیابی = کیفیت RAG" را به خاطر بسپارید. این واحد دقیقاً هنر بهبود آن کیفیت است. ما تکنیک های عملی را از انتخاب top-k تا جستجوی ترکیبی، از رتبه بندی مجدد تا تبدیل پرس و جو پوشش خواهیم داد.
Top-k: چند قطعه خواهیم آورد؟
ابتدایی ترین تنظیم: چند قطعه (k) برای بازگشت از جستجو. اگر کمتر بیاورید (k=1) احتمال گم شدن قطعه صحیح زیاد است. اگر بیش از حد اضافه کنید (k=20)، نویز به مدل اضافه می شود و هزینه توکن افزایش می یابد.
بین دو مفهوم تمایز قائل شوید. به یاد بیاورید: نرخی که قطعه صحیح در بین موارد بازیابی شده قرار می گیرد. دقت: سرعتی که آنچه بازیابی میشود مرتبط است. افزایش k یادآوری را افزایش می دهد اما دقت را کاهش می دهد. هدف ایجاد تعادل بین این دو است.
top-k
تاثیر
موقعیت مناسب
1-3
دقت بالا، خطر از دست دادن
سوالات ساده و تک جوابی
4-8
تعادل؛ اکثر سناریوها
RAG شرکت عمومی
10-20
یادآوری بیشتر، نویز افزایش می یابد
با رتبه بندی مجدد (زیر)
نکته: الگوی رایج و قدرتمند: واکشی عریض (k=20)، سپس با رتبهبندی مجدد باریک کنید (4 برتر). به این ترتیب چیزی را از دست نمی دهید و زمینه تمیزی را به مدل می دهید.
جستجوی ترکیبی: قدرت دو جستجو
جستجوی معنایی (بردار) معنی را دریافت می کند اما چیزهایی را از دست می دهد: کد کامل محصول ("XR-4471")، مخفف نادر، نام مناسب، شماره نسخه. برای این وظایف دقیق، جستجوی کلمات کلیدی قدیمی - به خصوص الگوریتم کلاسیک به نام BM25 - بسیار خوب است.
جستجوی ترکیبی این دو را ترکیب می کند: جستجوی معنایی و کلیدواژه هر دو کار می کنند و نتایج را با هم ترکیب می کنند. بنابراین، در سؤالی مانند "دوره گارانتی از
ادغام معمولاً با RRF (Reciprocal Rank Fusion) انجام می شود: آهنگی که در هر دو لیست بالاتر است جلو می آید.
# بازیابی ترکیبی (مفهومی)sem = vector_search(question, k=20) # meaningkey = bm25_search(question, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # ادغام این دو، 8 برتر
رتبه بندی مجدد: پاس دوم و هوشمندتر
اولین تماس می تواند سریع اما بی ادبانه باشد. رتبهبندی مجدد داوطلبانی را که در جستجوی اول بازگرداندهاند، یک به یک با مدل قویتر (معمولاً رمزگذار متقاطع - مدلی که سؤال و متن را با هم میخواند و ارتباط را نمره میدهد) امتیاز میدهد و مرتبطترین آنها را به بالا منتقل میکند.
منطق این است: اولین جستجو تعداد زیادی از نامزدها را برای فراخوان اختصاص می دهد (20 نامزد)، رتبه بندی مجدد بهترین 4 را برای دقت انتخاب می کند. این رویکرد دو مرحله ای بسیار دقیق تر از جستجوی تک مرحله ای است. مقداری تاخیر و پردازش اضافی هزینه دارد. سود افزایش قابل توجهی در کیفیت است.
# کاندیدای بازیابی دو مرحله ای (مفهومی) = جستجوی ترکیبی (سوال، k=20) # گسترده، امتیاز سریع = reranker.score (سوال، نامزدها) # امتیاز مربوط به هر زمینه نامزد = rated.rank()[:4] # 4 برتر
تبدیل پرس و جو
گاهی مشکل در جستجو نیست، بلکه در خود سوال است. اگر کاربر بپرسد "کارگران از راه دور چطور؟" این را نمی توان به تنهایی جستجو کرد (مشخص نیست که برای کارگران از راه دور چیست). در اینجا تکنیک های تبدیل پرس و جو آمده است:
- بازنویسی: از تاریخچه مکالمه استفاده کنید تا سؤال را مستقل کنید: "کارگران از راه دور چه چیزی حق مرخصی سالانه دارند؟"
- چند پرس و جو: 3 عبارت مختلف از یک سوال را ایجاد کنید، با همه آنها جستجو کنید، نتایج را ترکیب کنید. کلمات مختلف تکه های متفاوتی پیدا می کنند.
- HyDE (Hypothetic Document Embeddings): ابتدا یک «پاسخ احتمالی» را برای مدل چاپ کنید، سپس آن پاسخ خیالی را جاسازی کرده و جستجو کنید. پاسخ خیالی گاهی بهتر یافت می شود زیرا در کلمات به سند واقعی نزدیکتر است.
# متغیرهای چند پرس و جو (مفهومی) = model.uret("این سوال را به 3 روش مختلف بیان کنید: " + سوال)tum_sonuc = []برای v در انواع: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]
بازیابی ضعیف / بازیابی قوی
ضعیف (تک مرحله، فقط معناشناسی، ثابت k=3):
result = vector_search(question, k=3)# مشکل: کد محصول از قلم افتاده است، نمی توان قسمت 3 را درست در سوالات دشوار وارد کرد.
قدرتمند (هیبرید + گسترده + رتبه بندی مجدد + چند پرس و جو در صورت لزوم):
نامزدها = hybrid_search(بازنویسی(سوال، گذشته)، k=20) زمینه = reranker.score(سوال، نامزدها).first(4)# هم تطابق دقیق و هم معنی گرفته می شود. به بهترین 4 مدل میرسه.
سه کیف کوچک
مورد 1 - کد محصول فرار کرد. جستجوی معنایی خالص در یک تیم پشتیبانی نتوانست کلمه "RTX-9080" را در سوال "خطای راننده RTX-9080" پیدا کند. او محصولات دیگری با نام های مشابه می آورد. هنگامی که جستجوی ترکیبی اضافه شد، تطابق کد دقیق رخ داد و نرخ بازگشت مقالات صحیح از 58٪ به 92٪ افزایش یافت.
مورد 2 - تفاوت رتبه بندی مجدد. یک مشاور حقوقی با k=5 کار می کرد اما مورد صحیح اکثر اوقات 7-10 است. او در صف می ماند. هنگامی که رتبه بندی مجدد k=20 + معرفی شد، میزان قرار گرفتن مقاله صحیح در 3 مقاله برتر از 61% به 94% افزایش یافت. تأخیر تنها 300 میلیثانیه افزایش یافت - یک سازش قابل قبول.
مورد 3 - سوال بعدی بدون زمینه. در دستیار منابع انسانی، کاربر می پرسد "در مورد کارمندان پاره وقت چطور؟" وقتی پرسیدم سیستم قطعات بی ربط آورد. با بازنویسی پرس و جو (با برداشتن زمینه «مرخصی سالانه» از گذشته و اضافه کردن «کارمندان پاره وقت حق مرخصی سالانه دارند»)، میزان پاسخ صحیح از 40 درصد به 86 درصد افزایش یافت.
اشتباهات رایج
- صرفاً با تکیه بر جستجوی معنایی: کد محصول، مخفف، نام مناسب از قلم افتاده است. ترکیبی را اضافه کنید.
- کوچک نگه داشتن k: قطعه صحیح نمی تواند وارد لیست شود. آن را گسترده و با رتبه مجدد آن را باریک کنید.
- هرگز به رتبه بندی مجدد فکر نمی کنید: جستجوی اول بی ادبانه است. پاس هوشمند دوم به طور قابل توجهی کیفیت را بهبود می بخشد.
- جستوجوی سؤالات بعدی بهصورتی که هست: سؤالی بدون زمینه، بیمعنا را جستجو میکند. بازنویسی
- افزایش کورکورانه k (بدون رتبه مجدد): مدل پر از نویز می شود، پاسخ تحریف می شود و هزینه افزایش می یابد.
مراقب باشید: هر تکنیک هزینه و تاخیر را اضافه می کند. چند پرس و جو به معنای جستجوی 3 برابری است، رتبه بندی مجدد به معنای تماس مدل اضافی است. ابتدا با ترکیبی ساده + k منطقی شروع کنید. اندازه گیری و اضافه کردن تکنیک های سنگین در جایی که واقعا نیاز است. اضافه کردن بدون اندازه گیری
به طور خلاصه
- Top-k تعادل بین یادآوری و دقت است. به طور کلی 4-8 شروع خوبی است.
- جستجوی ترکیبی جستجوی معنایی را با جستجوی کلمه کلیدی (BM25) ترکیب می کند. تطابق دقیق را بازیابی می کند.
- رتبه بندی مجدد کاندیداها را از جستجوی اولیه گسترده با یک مدل قوی دوباره امتیاز می دهد و بهترین ها را انتخاب می کند.
- تبدیل پرس و جو (بازنویسی، چند پرس و جو، HyDE) سوالات دشوار و بدون زمینه را قابل جستجو می کند.
- الگوی قوی: واکشی گسترده → ادغام با هیبرید → باریک با رتبه مجدد. اما هر تکنیک را با اندازه گیری آن اضافه کنید.
وظیفه کاربردی
6 سؤال دشوار را با دادههای واحدهای قبلی آماده کنید: حداقل 2 سؤال به تطابق دقیق (کد محصول، مخفف، تاریخ)، 2 سؤال معنایی (همان موضوع با کلمات مختلف)، 2 سؤال بعدی بدون زمینه. (1) ابتدا هر سوال را به عنوان یک جستجوی معنایی خالص در نظر بگیرید و به صورت دستی مشخص کنید که کدام قسمت ها ظاهر می شوند. (2) همان سؤالات را با اضافه شدن ترکیبی و رتبهبندی مجدد دوباره ارزیابی کنید. (3) سؤالات بعدی را بدون زمینه بازنویسی کنید. به شکل جدولی توجه کنید که کدام تکنیک در کدام نوع سوال تفاوت ایجاد می کند.
چک لیست
- [ ] من می دانم top-k یک تعادل فراخوانی-دقت و یک محدوده شروع معقول است.
- [ ] می توانم توضیح دهم که چرا جستجوی ترکیبی مطابقت های دقیق را بازیابی می کند.
- [ ] من می توانم منطق دو مرحله ای رتبه بندی مجدد را اعمال کنم (گسترده → باریک هوشمند).
- [ ] من نیاز به بازنویسی سؤالات بعدی را بدون زمینه تشخیص می دهم.
- [ ] تأیید می کنم که تکنیک های سنگین را با اندازه گیری اضافه کردم، نه با اندازه گیری.