Vector Databases

کشف دقت: نگاهی عمیق به قابلیت‌های جستجوی ترکیبی Weaviate

در چشم‌انداز سریعاً در حال تحول هوش مصنوعی و بازیابی داده، تکیه صرف بر امبدینگ‌های برداری به یک گلوگاه برای بسیاری از توسعه‌دهندگان تبدیل شده است. اگرچه جستجوی معنایی در به دام انداختن معنای پشت یک پرس‌وجو عالی عمل می‌کند، اما اغلب در کلیدواژه‌های خاص، نام‌های تجاری یا اصطلاحات فنی با مشکل مواجه می‌شود. اینجاست که Weaviate درخشش خود را نشان می‌دهد و از طریق قابلیت جستجوی ترکیبی خود، یک راه‌حل قدرتمند ارائه می‌کند. با ادغام بهترین ویژگی‌های هر دو دنیا—شباهت برداری و تطبیق کلیدواژه—توسعه‌دهندگان می‌توانند به دقت بازیابی بسیار بالاتری دست یابند.

چرا جستجوی ترکیبی اهمیت دارد

برای درک ارزش پیشنهادی، باید ابتدا محدودیت‌های جستجوی صرفاً برداری را بشناسیم. پایگاه‌های داده برداری سنتی متن را به آرایه‌های با ابعاد بالا تبدیل می‌کنند. اگر کاربری عبارت «iPhone 15 Pro Max» را جستجو کند، یک سیستم مبتنی بر بردار ممکن است در صورتی که این توالی دقیق را در حین آموزش ندیده باشد، با مشکل مواجه شود و در نتیجه نتایج کلی درباره گوشی‌های هوشمند را به جای دستگاه خاص بازگرداند. در مقابل، جستجوی مبتنی بر کلیدواژه (مانند BM25) تطبیق‌های دقیق را به خوبی مدیریت می‌کند، اما در درک مترادف‌ها یا قصد کاربر ناتوان است.

جستجوی ترکیبی Weaviate این موضوع را با ترکیب دو مکانیسم امتیازدهی حل می‌کند:

  1. جستجوی معنایی: از امبدینگ‌های برداری برای یافتن مواردی که از نظر مفهومی مشابه هستند، استفاده می‌کند.
  2. جستجوی کلیدواژه: از الگوریتم‌های ایندکس معکوس (مشابه Elasticsearch) برای یافتن تطبیق‌های دقیق اصطلاحات استفاده می‌کند.

سپس این امتیازها نرمال‌سازی شده و با استفاده از میانگین وزنی ترکیب می‌شوند که به شما امکان می‌دهد تعادل بین درک معنایی و دقت کلیدواژه‌ای دقیق را تنظیم کنید.

پیاده‌سازی جستجوی ترکیبی در Weaviate

پیاده‌سازی جستجوی ترکیبی به لطف کلاینت‌های پایتون و جاوااسکریپت Weaviate ساده است. در زیر یک مثال عملی با استفاده از پایتون آورده شده است. نکته کلیدی، پارامتر hybrid در داخل متدهای with_near_text یا روش‌های مستقیم جستجوی ترکیبی است.

import weaviate

# اتصال به نمونه Weaviate شما
client = weaviate.Client(url="http://localhost:8080")

# تعریف کلاس (اطمینان حاصل کنید که ویژگی 'content' برای جستجوی متن پیکربندی شده است)
class_name = "Article"

# پرس‌وجوی جستجوی ترکیبی
query = "Weaviate vector database hybrid search features"

# اجرای جستجوی ترکیبی با وزن 0.5 برای معنایی و 0.5 برای کلیدواژه
result = (
    client.query
    .get(class_name, ["title", "content", "score"])
    .with_hybrid(
        query=query,
        vector=[0.1, 0.2, 0.3], # اختیاری: بردار خاص در صورت استفاده از cross-encoder
        alpha=0.5,              # وزن برای ترکیبی (0 = فقط کلیدواژه، 1 = فقط برداری)
        limit=10
    )
    .do()
)

# بررسی نتایج
print(result)

در قطعه کد بالا، پارامتر alpha حیاتی است. تنظیم alpha=0.5 وزن مساوی را به هر دو امتیاز برداری معنایی و امتیاز کلیدواژه BM25 می‌دهد. می‌توانید این مقدار را بر اساس مورد استفاده خاص خود تنظیم کنید. به عنوان مثال، در یک سیستم بازیابی اسناد حقوقی، ممکن است ترجیح دهید alpha بالاتری را برای اولویت دادن به اصطلاحات حقوقی دقیق انتخاب کنید، در حالی که یک دستیار نوشتاری خلاقانه ممکن است alpha پایین‌تری را برای به دام انداختن مضامین مفهومی گسترده‌تر ترجیح دهد.

موارد استفاده عملی و مزایا

انعطاف‌پذیری جستجوی ترکیبی امکانات متعددی را برای توسعه‌دهندگان برنامه‌ها باز می‌کند. در اینجا دو سناریوی رایج آورده شده است که رویکرد Weaviate ارزش متمایزی ایجاد می‌کند:

1. جستجوی محصول در تجارت الکترونیک

فرض کنید کاربری به دنبال «Nike Air Max 90» می‌گردد. یک جستجوی صرفاً معنایی ممکن است سایر کفش‌های اسپرت قرمز را بازگرداند اگر امبدینگ به سمت رنگ سوگیری داشته باشد. با این حال، یک جستجوی ترکیبی تضمین می‌کند که «Nike»، «Air Max» و «90» به عنوان کلیدواژه‌های حیاتی در نظر گرفته شوند، در حالی که همچنان اجازه می‌دهد تغییرات معنایی مانند «کفش‌های دویدن کلاسیک» نیز در صورت کمی انحراف کلیدواژه‌ها یافت شوند.

2. مستندات فنی

هنگام جستجو در مستندات API، نام‌های خاص تابع مانند get_user_data() از نظر معنایی غنی نیستند اما از نظر واژگانی دقیق هستند. جستجوی ترکیبی تضمین می‌کند که این شناسه‌های فنی بلافاصله بازیابی شوند، در حالی که همچنان اجازه می‌دهد پرس‌وجوهای زبان طبیعی مانند «نحوه دریافت اطلاعات کاربر» مستندات مرتبط را پیدا کنند.

نتیجه‌گیری

جستجوی ترکیبی Weaviate تنها یک ویژگی نیست؛ بلکه یک تغییر بنیادین در نحوه رویکرد ما به بازیابی داده در عصر LLMها و درک معنایی است. با اجازه دادن به توسعه‌دهندگان برای تنظیم دقیق تعادل بین معنا و دقت، Weaviate به برنامه‌ها امکان می‌دهد تجربه‌های جستجویی را ارائه دهند که هم هوشمند و هم دقیق هستند. برای توسعه‌دهندگان متوسط و پیشرفته‌ای که به دنبال ساخت برنامه‌های هوش مصنوعی در سطح تولید هستند، تسلط بر این قابلیت برای ایجاد موتورهای جستجوی قوی و کاربرپسند ضروری است.

Share: