Retrieval-Augmented Generation (RAG)

پیاده‌سازی جستجوی ترکیبی: تعادل بین وزن‌های کلمه کلیدی و برداری برای دقت RAG سازمانی

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

محدودیت‌های جستجوی صرفاً برداری

برای درک اهمیت جستجوی ترکیبی، باید ابتدا محدودیت‌های رویکردهای صرفاً مبتنی بر بردار را بپذیریم. جاسازی‌های برداری متن را به یک فضای با ابعاد بالا نگاشت می‌کنند که در آن معانی مشابه در کنار هم خوشه‌بندی می‌شوند. با این حال، این روش نقاط کور دارد. برای مثال، اگر کاربری به دنبال "درآمد فصل سوم 2023" باشد، پایگاه داده برداری ممکن است نتایجی درباره "عملکرد مالی در اواخر سال 2023" بازگرداند، حتی اگر فصل خاص ذکر نشده باشد. در مقابل، اگر کاربری به دنبال یک کد داخلی خاص مانند "SKU-8842-X" باشد، جستجوی برداری ممکن است کاملاً شکست بخورد، زیرا معنای معنایی آن رشته در مقایسه با کارایی آن به عنوان یک شناسنده ناچیز است.

داده‌های سازمانی اغلب ترکیبی از متن روایی غیرساختاریافته و متادیتای ساختاریافته و دقیق هستند. یک سیستم RAG قوی باید با هر دو نوع داده کار کند. با ادغام جستجوی کلمه کلیدی پراکنده (BM25) با جستجوی برداری متراکم، ما یک خط لوله بازیابی ایجاد می‌کنیم که هم "قصد" و هم "تطبیق دقیق" را ثبت می‌کند.

استراتژی‌های برای تعادل وزن‌ها

چالش اصلی در جستجوی ترکیبی، تعیین وزن بهینه بین امتیاز برداری و امتیاز کلمه کلیدی است. هیچ نسبت یکسان برای همه وجود ندارد؛ این موضوع به شدت به حوزه داده‌های شما بستگی دارد. یک پایگاه داده حقوقی ممکن است بر اصطلاحات دقیق (وزن کلمه کلیدی بالاتر) تأکید کند، در حالی که یک دستیار نوشتن خلاق ممکن است بر ارتباط موضوعی (وزن برداری بالاتر) تمرکز کند.

استراتژی‌های رایج شامل موارد زیر است:

  1. تلفیق رتبه متقابل (RRF): این روش تجمیع، رتبه‌بندی‌های حاصل از موتورهای جستجوی مختلف را بدون نیاز به نرمال‌سازی صریح ترکیب می‌کند. این روش مقاوم است و به طور گسترده استفاده می‌شود.
  2. ترکیب خطی: نرمال‌سازی هر دو امتیاز به محدوده 0-1 و اعمال مجموع وزنی: S_final = α * S_vector + (1-α) * S_keyword.
  3. گرادیان نزولی انفجاری: یک تکنیک پیشرفته که وزن‌ها را به صورت پویا بر اساس پیچیدگی پرس‌وجو تنظیم می‌کند.

پیاده‌سازی عملی با پایتون

بیایید یک مثال عملی با استفاده از Elasticsearch را بررسی کنیم، که یک استاندارد برای جستجوی ترکیبی در محیط‌های سازمانی است. در زیر یک قطعه کد پایتون نشان داده شده است که نحوه اجرای یک پرس‌وجوی ترکیبی را که BM25 و جستجوی برداری را متعادل می‌کند، نشان می‌دهد.

from elasticsearch import Elasticsearch

es = Elasticsearch(["http://localhost:9200"])

def hybrid_search(es_client, index_name, query_text, k=10):
    """
    یک جستجوی ترکیبی را که پرس‌وجوهای پراکنده (BM25) و متراکم (برداری) را ترکیب می‌کند، انجام می‌دهد.
    """
    # ساختار پرس‌وجوی ترکیبی را تعریف کنید
    hybrid_query = {
        "query": {
            "hybrid": {
                "queries": [
                    {
                        "sparse": {
                            "query_string": query_text,  # تطبیق کلمه کلیدی را مدیریت می‌کند
                            "field": "content_vector"    # بر اساس نگاشت خود تنظیم کنید
                        }
                    },
                    {
                        "dense_vector": {
                            "query_vector": generate_embedding(query_text), # تابع جاسازی شما
                            "k": 100,
                            "num_candidates": 100,
                            "field": "embedding"
                        }
                    }
                ],
                # مقدار آلفا دو سیگنال را متعادل می‌کند.
                # 0.5 یک نقطه شروع رایج است.
                "alpha": 0.5 
            }
        },
        "size": k
    }

    response = es_client.search(index=index_name, body=hybrid_query)
    return response["hits"]["hits"]

# استفاده
results = hybrid_search(es, "enterprise_docs", "تفاوت‌های گزارش مالی فصل سوم")

در این مثال، پارامتر alpha حیاتی است. اگر کاربران شما اغلب به دنبال شناسه‌های محصول خاص هستند، وزن پرس‌وجوی پراکنده را افزایش دهید. اگر آن‌ها به دنبال توضیحات مفهومی هستند، به سمت پرس‌وجوی برداری متراکم متمایل شوید.

بهینه‌سازی و تنظیم

پیاده‌سازی جستجوی ترکیبی یک وظیفه "تنظیم و فراموش کردن" نیست. ارزیابی مداوم مورد نیاز است. از یک مجموعه آزمون جدا شده از پرس‌وجوها که با اسناد مرتبط برچسب‌گذاری شده‌اند استفاده کنید. معیارهایی مانند MRR (میانگین رتبه متقابل) و NDCG (سود تجمعی تنزیل‌شده نرمال‌شده) را برای ارزیابی کیفیت رتبه‌بندی اندازه‌گیری کنید. اگر دقت کاهش یابد، وزن alpha را تنظیم کنید یا از تقویت برای فیلدهای متادیتای خاص استفاده کنید (مثلاً تقویت تطبیق‌ها در عنوان سند بیشتر از تطبیق‌ها در متن بدنه).

نتیجه‌گیری

برای کاربردهای RAG در سطح سازمانی، جستجوی ترکیبی دیگر اختیاری نیست—ضروری است. با تعادل دقت کلمه کلیدی با درک معنایی، توسعه‌دهندگان می‌توانند سیستم‌هایی بسازند که هم دقیق و هم مقاوم باشند. با یک رویکرد متعادل شروع کنید، خط لوله بازیابی خود را به شدت آزمایش کنید و وزن‌ها را به صورت تکراری برای تطبیق با ویژگی‌های خاص داده‌های خود تنظیم کنید. نتیجه یک سیستم هوش مصنوعی است که واقعاً هم آنچه کاربران می‌خواهند و هم دقیقاً آنچه می‌پرسند را درک می‌کند.

Share: