Retrieval-Augmented Generation (RAG)

افزایش دقت RAG: قدرت جستجوی ترکیبی

در چشم‌انداز به‌سرعت در حال تحول Retrieval-Augmented Generation (RAG)، دقت امری حیاتی است. اگرچه جستجوی برداری به استاندارد بازیابی معنایی تبدیل شده است، اما تکیه صرف بر امبدینگ‌ها اغلب به دسته خاصی از خطاها منجر می‌شود: از دست دادن تطبیق‌های دقیق کلمات کلیدی. اینجاست که جستجوی ترکیبی به عنوان یک تکنیک بهینه‌سازی حیاتی برای ساخت برنامه‌های LLM پایدار و آماده تولید ظهور می‌کند.

چرا جستجوی برداری کافی نیست

پایگاه‌های داده برداری در درک معنایی عالی عمل می‌کنند. آن‌ها می‌توانند اسنادی را که از نظر مفهومی شبیه به یک پرس‌وجو هستند، بازیابی کنند، حتی اگر کلمات با هم مطابقت نداشته باشند. برای مثال، یک پرس‌وجو درباره «سکته‌های قلبی» می‌تواند اسنادی را که درباره «ایسکمی میوکارد» (سکته قلبی) بحث می‌کنند، با موفقیت بازیابی کند. با این حال، جستجوی برداری در موارد زیر با مشکل مواجه می‌شود:
  • دقت: اغلب اطلاعاتی را که از نظر معنایی مرتبط اما از نظر واقعی نادرست هستند، برمی‌گرداند.
  • تطبیق دقیق: در بازیابی شناسه‌های خاص، مانند شناسه‌های محصول، کدهای خطا یا تاریخ‌های دقیق، ضعیف عمل می‌کند.
  • ارتباط واژگانی: ممکن است اسنادی را که حاوی کلمات کلیدی دقیق هستند اما از نظر زمینه‌ای دور از هم قرار دارند، از دست بدهد.
با نادیده گرفتن کلمات کلیدی واژگانی، جستجوی برداری خالص نویز را به لوله بازیابی شما وارد می‌کند که مستقیماً بر کیفیت پاسخ تولید شده تأثیر منفی می‌گذارد.

راه‌حل جستجوی ترکیبی

جستجوی ترکیبی دو مکانیسم بازیابی متمایز را ترکیب می‌کند: 1. جستجوی داخلی (BM25/کلمات کلیدی): از روش‌های آماری برای یافتن تطبیق‌های دقیق کلمات کلیدی استفاده می‌کند. این روش برای دقت و مدیریت اصطلاحات خاص عالی است. 2. جستجوی برداری (چگال): از امبدینگ‌ها برای یافتن شباهت معنایی استفاده می‌کند. این روش برای مدیریت variations، مترادف‌ها و ارتباط مفهومی عالی است. با ادغام این نتایج، شما بهترین ویژگی‌های هر دو را به دست می‌آورید: دقت تطبیق کلمات کلیدی و فراخوانی (recall) درک معنایی.

استراتژی پیاده‌سازی

پیاده‌سازی جستجوی ترکیبی معمولاً شامل اجرای هر دو پرس‌وجو به صورت موازی و سپس رتبه‌بندی مجدد نتایج ترکیبی است. بیشتر پایگاه‌های داده برداری مدرن این قابلیت را به صورت بومی پشتیبانی می‌کنند، یا می‌توانید آن را با استفاده از یک فرآیند بازیابی دو مرحله‌ای پیاده‌سازی کنید. در اینجا یک مثال مفهومی با استفاده از پایتون و ساختار کلی یک کلاینت برداری آورده شده است. این مثال نحوه اجرای هر دو جستجو و نرمال‌سازی امتیازات قبل از ترکیب آن‌ها را نشان می‌دهد.
def hybrid_search(query, vector_db, keyword_db, k=10):
    # 1. اجرای جستجوی برداری
    vector_results = vector_db.search(
        query_embedding=embed(query), 
        top_k=k
    )
    
    # 2. اجرای جستجوی کلمات کلیدی
    keyword_results = keyword_db.search(
        query_text=query, 
        operator="OR"
    )
    
    # 3. ترکیب و نرمال‌سازی امتیازات
    # نکته: در محیط تولید، از ادغام رتبه متقابل (RRF) یا امتیازدهی وزنی استفاده کنید
    combined_docs = []
    for doc in vector_results:
        doc['vector_score'] = normalize(doc.score)
        combined_docs.append(doc)
        
    for doc in keyword_results:
        doc['keyword_score'] = normalize(doc.score)
        # بررسی وجود قبلی سند برای جلوگیری از تکرار
        existing = next((d for d in combined_docs if d.id == doc.id), None)
        if existing:
            existing['keyword_score'] = normalize(doc.score)
        else:
            doc['keyword_score'] = 0
            combined_docs.append(doc)
            
    # 4. رتبه‌بندی بر اساس امتیاز ترکیبی
    final_results = sorted(combined_docs, 
                           key=lambda x: x.get('vector_score', 0) + x.get('keyword_score', 0), 
                           reverse=True)[:k]
                           
    return final_results

ملاحظات عملی

هنگام پذیرش جستجوی ترکیبی، نکات برتر زیر را در نظر بگیرید:
  • نرمال‌سازی: امتیازات برداری و امتیازات کلمات کلیدی در مقیاس‌های متفاوتی عمل می‌کنند. همیشه قبل از ترکیب آن‌ها را نرمال کنید (برای مثال، با استفاده از مقیاس‌بندی مینیمم-ماکزیمم یا نرمال‌سازی نمره Z).
  • وزن‌دهی: وزن داده شده به جستجوی برداری در مقابل جستجوی کلمات کلیدی را بر اساس حوزه کاری خود تنظیم کنید. برای مستندات فنی با کدهای خطای خاص، وزن جستجوی کلمات کلیدی را افزایش دهید. برای خلاصه‌سازی خلاقانه، وزن جستجوی برداری را افزایش دهید.
  • RRF (ادغام رتبه متقابل): یک روش محبوب برای ترکیب نتایج بدون نیاز به نرمال‌سازی صریح امتیازات. این روش به رتبه سند در هر لیست تکیه می‌کند نه به امتیاز خام، که می‌تواند مقاوم‌تر باشد.

نتیجه‌گیری

جستجوی ترکیبی تنها یک بهینه‌سازی نیست، بلکه ضرورتی برای سیستم‌های RAG با کیفیت بالا است. با بهره‌گیری از عمق معنایی و دقت واژگانی، توسعه‌دهندگان می‌توانند توهم‌ها (hallucinations) را به طور قابل توجهی کاهش داده و ارتباط زمینه بازیابی شده را بهبود بخشند. با حرکت برنامه‌های LLM از نمونه‌های اولیه به استقرارهای در مقیاس سازمانی، تسلط بر تکنیک‌های بازیابی ترکیبی، راه‌حل‌های پایدار را از آن‌هایی که شکننده هستند، متمایز می‌کند. از امروز شروع به ادغام جستجوی ترکیبی در لوله داده‌های خود کنید تا مطمئن شوید پاسخ‌های هوش مصنوعی شما نه تنها مرتبط، بلکه دقیق هستند.
Share: