برنامه نویسی

جستجوی بردار Demystified: راهنمای PGVECTOR ، IVFFLAT و HNSW

مقدمه: چرا پایگاه داده های بردار در حال حاضر داغ هستند

آیا تا به حال متوجه شده اید که چگونه Google می تواند قبل از اتمام تایپ کردن ، آنچه را که می خواهید پیشنهاد دهید؟ یا به نظر می رسد Spotify چگونه طعم شما را در موسیقی بهتر از شما می داند؟ این به دلیل نوع خاصی از جستجوی است – مواردی که چیزهایی را پیدا می کند که به جای مسابقات دقیق فقط مشابه هستند.

این جایی است که پایگاه داده های بردار وارد می شوند. به جای ذخیره داده ها در جداول و ردیف هایی مانند پایگاه داده های سنتی (مانند PostgreSQL یا MySQL) ، پایگاه داده های بردار “اثر انگشت” داده ها را مانند یک روش منحصر به فرد برای توصیف کلمات ، تصاویر یا فیلم ها با استفاده از شماره ها ذخیره می کنند. بشر این تعبیه های بردار به هوش مصنوعی کمک می کند تا به سرعت چیزهایی را پیدا کنند که احساس ارتباط دارند ، حتی اگر دقیقاً مطابقت نداشته باشند.

این برای برنامه های دارای هوش مصنوعی مانند چت بابات ، موتورهای توصیه و ابزارهای جستجوی تصویر بسیار مهم است. همچنین به مدل های بزرگ زبان (LLM) مانند ChatGPT با یادآوری آنچه که مکالمات مشابه قبلاً به نظر می رسند ، بهتر است.

اما در اینجا قسمت جالب وجود دارد: برای انجام جستجوی بردار به یک پایگاه داده کاملاً جدید نیازی ندارید! اگر در حال حاضر از PostgreSQL استفاده می کنید ، می توانید PGVECTOR را اضافه کنید ، یک پسوند قدرتمند که جستجوی بردار را به Postgres می رساند.

در این پست ، ما PGVECTOR را تجزیه می کنیم ، نحوه عملکرد آن را توضیح می دهیم و به شما کمک می کند تا بین دو روش نمایه سازی آن – IVFFLAT و HNSW – انتخاب کنید ، بنابراین می توانید تصمیم بگیرید که کدام یک برای نیازهای شما بهتر است. بیایید شیرجه بزنیم!

تعبیه ها چیست و چرا آنها اهمیت دارند؟

در هسته اصلی آن ، تعبیه راهی برای نشان دادن داده ها – خواه متن ، تصاویر یا حتی صوتی – به عنوان لیستی از اعداد (یک بردار) است. این اعداد روابط و معانی پشت داده ها را ضبط می کنند و این امکان را فراهم می آورد که به جای تکیه بر مسابقات دقیق ، شباهت را مقایسه کند.

به عنوان مثال:

  • کلمات “گربه” و “بچه گربه” تعبیه شده ای دارند که از نظر عددی نزدیک هستند ، در حالی که “هواپیما” بسیار دورتر خواهد بود.
  • جستجوی عکس ساحل می تواند سایر تصاویر بصری مشابه را برگرداند ، حتی اگر یکسان نباشند.
  • یک سیستم توصیه می تواند محصولات مرتبط را بر اساس آنچه کاربر جستجو کرده است پیشنهاد کند.

بانکهای اطلاعاتی سنتی در داده های ساخت یافته (مانند ردیف ها و ستون ها) برتری دارند ، اما آنها با شباهت معنایی مبارزه می کنند – به همین دلیل تعبیه بردار برای برنامه های هوش مصنوعی مدرن بسیار مهم است. با ذخیره و جستجوی بردارها ، می توانیم موتورهای جستجوگر هوشمندانه ، دستیاران هوش مصنوعی و سیستم های توصیه را تأمین کنیم.

اینجاست که PGVECTOR وارد می شود و قابلیت های جستجوی بردار را به PostgreSQL می رساند. در مرحله بعد ، بیایید بررسی کنیم که چگونه جستجو Ann (نزدیکترین همسایه) به ما کمک می کند تا تعبیهات مشابه را به طور کارآمد پیدا کنیم.

جستجوی تقریبی نزدیکترین همسایه (ANN) چیست؟

هنگام جستجوی تعبیه های مشابه ، باید نزدیکترین مسابقات را در یک مجموعه داده عظیم پیدا کنیم. اما اگر هر وکتور را یک به یک مقایسه کنیم ، جستجو خیلی کند می شود – به ویژه با میلیون ها تعبیه. این جایی است که جستجوی تقریبی نزدیکترین همسایه (آن) وارد می شود.

آن چگونه کار می کند؟

آن به جای اسکن همه چیز ، از میانبرهای هوشمند برای یافتن سریعترین مسابقات استفاده می کند. این یک نتیجه کامل را تضمین نمی کند ، اما بسیار سریعتر و معمولاً به اندازه کافی خوب برای برنامه های دنیای واقعی مانند جستجوی و توصیه های دارای هوش مصنوعی است.

مثال: پیدا کردن یک آهنگ مشابه

تصور کنید که یک آهنگ را در یک کافه می شنوید و می خواهید چیزی مشابه پیدا کنید.

  • جستجوی دقیق (آهسته): شما به هر آهنگی که تا به حال ساخته شده است گوش می دهید تا زمانی که مسابقه پیدا کنید.
  • Ann Search (سریع): شما مستقیماً به آهنگ هایی با ملودی ها ، هنرمندان یا ژانرها مشابه می روید – به سرعت یک مسابقه خوب را پیدا می کنید.

چرا آن برای جستجوی بردار ضروری است

بانکهای اطلاعاتی سنتی به دنبال مقادیر دقیق هستند ، مانند یافتن “سگ” در یک جدول. اما آن به ما اجازه می دهد مواردی را پیدا کنیم که مشابه هستند ، و آن را برای:

  • AI Chatbots (درک زمینه)
  • جستجوی تصویر (یافتن عکس های مشابه)
  • توصیه ها (موسیقی ، خرید ، محتوا)

اکنون که آن را درک می کنیم ، بیایید ببینیم که چگونه PostgreSQL جستجوی بردار را با PGVECTOR و دو روش نمایه سازی ارائه می دهد: IVFFLAT و HNSW!

ملاقات با PGVECTOR: جستجوی بردار به PostgreSQL

اکنون که تعبیه بردار و جستجوی آن را درک می کنیم ، سوال بعدی این است:
چگونه ما در واقع بردارهای را در یک پایگاه داده ذخیره و جستجو می کنیم؟

اینجاست که PGVECTOR وارد می شود! PGVECTOR یک برنامه افزودنی برای PostgreSQL است که به شما امکان می دهد تعبیه های وکتور را به طور کارآمد ذخیره کنید و به طور موثر جستجو کنید.

چرا از pgveector استفاده می کنید؟

  • در داخل PostgreSQL کار می کند – نیازی به پایگاه داده بردار جداگانه نیست.
  • از روشهای مختلف جستجوی پشتیبانی می کند – جستجوی دقیق و جستجوی آن.
  • مقیاس خوب – کارآمد مجموعه داده های بزرگ را کنترل می کند.

با استفاده از PGVECTOR ، می توانید تعبیه ها را به عنوان یک ستون بردار ذخیره کرده و از اپراتورهای ویژه (مانند <->) استفاده کنید تا موارد مشابهی را بر اساس معیارهای از راه دور مانند شباهت کسین یا فاصله اقلیدسی پیدا کنید.

اما جستجو از طریق بردارها به طور مؤثر نیاز به نمایه سازی دارد و PostgreSQL دو روش اصلی فهرست بندی را در PGVECTOR ارائه می دهد: IVFFLAT و HNSW.

روشهای نمایه سازی: IVFFLAT در مقابل HNSW

شاخص ها مانند میانبرهایی هستند که جستجو را سرعت می بخشند. بدون آنها ، هر پرس و جو همه بردارها را اسکن می کند-انجام جستجوهای در مقیاس بزرگ به طرز دردناکی کند.

PGVECTOR از دو نوع اصلی شاخص پشتیبانی می کند:

  • ivfflat (پرونده معکوس مسطح) – سریع اما دقیق تر
  • HNSW (دنیای کوچک ناوبری سلسله مراتبی) – دقیق تر اما از حافظه بیشتری استفاده می کند

بیایید آنها را بشکنیم.

Ivfflat: سریع و کارآمد برای مجموعه داده های بزرگ

IVFFLAT با گروه بندی بردارها به خوشه ها (به نام “Centroids”) کار می کند و فقط به جای اسکن کردن همه چیز ، در جستجوی خوشه های مرتبط است.

جوانب مثبت:

times زمان جستجوی سریع (مخصوصاً برای مجموعه داده های بزرگ)
✔ استفاده از حافظه پایین تر از HNSW

منفی ها:

❌ دقت پایین (بستگی به چگونگی شکل گیری خوشه ها دارد)
❌ شاخص به آموزش نیاز دارد (شما باید تعداد مناسب خوشه ها را انتخاب کنید)

بهترین برای: مجموعه داده های عظیم که سرعت در آن مهمتر از دقت کامل است-مانند سیستم های توصیه یا جستجوهای زمان واقعی.

HNSW: دقت بالا با تجارت حافظه

HNSW از یک ساختار مبتنی بر نمودار استفاده می کند که در آن بردارها به نزدیکترین همسایگان خود وصل می شوند و جستجوها را بسیار دقیق می کند.

جوانب مثبت:

✔ نتایج بسیار دقیق (فراخوان بهتر از ivfflat)
✔ عالی برای مجموعه داده های کوچک به متوسط

منفی ها:

❌ استفاده از حافظه بالاتر (اتصالات اضافی زیادی را ذخیره می کند)
❌ نمایه سازی در مقایسه با ivfflat کندتر است

بهترین برای: از مواردی استفاده کنید که دقت بسیار مهم باشد ، مانند جستجوی معنایی ، چت های AI و بازیابی تصویر.

از کدام یک باید استفاده کنید؟

از ivfflat استفاده کنید اگر … شما یک مجموعه داده عظیم دارید و به سرعت جستجوی سریع نیاز دارید (حتی اگر برخی از نتایج کامل نباشند).
اگر به دقت بالایی نیاز دارید از HNSW استفاده کنید و می توانید از حافظه اضافی استفاده کنید.

ملاحظات عملکرد و تنظیم

انتخاب روش فهرست بندی مناسب در PGVECTOR بستگی به سرعت ، دقت و استفاده از حافظه دارد. در اینجا نحوه مقایسه IVFFLAT و HNSW در عملکرد دنیای واقعی آورده شده است.

زمان ساخت فهرست

  • Ivfflat قبل از استفاده از آن نیاز به آموزش دارد. تعداد خوشه ها (پارامتر لیست) بر سرعت نمایه سازی و عملکرد پرس و جو تأثیر می گذارد.
  • HNSW برای ساخت بیشتر طول می کشد زیرا نمودار نزدیکترین همسایگان را می سازد ، اما پس از ساخت ، جستجوها بسیار کارآمد هستند.

سرعت پرس و جو

  • Ivfflat سریع است زیرا فقط زیر مجموعه ای از بردارها را جستجو می کند ، اما سرعت آن بستگی به نحوه انتخاب سانتروئیدها دارد.
  • HNSW به طور کلی برای مجموعه داده های کوچکتر سریعتر است اما با رشد مجموعه داده به دلیل ساختار نمودار ، ممکن است کندتر شود.

استفاده از حافظه

  • Ivfflat از آنجا که روابط اضافی بین بردارها را ذخیره نمی کند ، کارآمد است.
  • HNSW به حافظه بیشتری نیاز دارد زیرا چندین لایه از اتصالات بین نقاط داده را حفظ می کند.

دقت در مقابل یادآوری

  • IVFFLAT با دقت سرعت معاملات را انجام می دهد – اگر خوشه بندی بهینه نباشد ، ممکن است موارد مشابه از دست برود.
  • HNSW به یادآوری بالاتر می رسد و هنگامی که دقت در اولویت باشد (به عنوان مثال ، دستیاران دارای هوش مصنوعی یا جستجوی معنایی) ترجیح داده می شود.

تنظیم برای بهترین عملکرد

  • برای IVFFLAT ، تنظیم پارامتر لیست ها مهم است. لیست های بیشتر به معنای نمایش داده های سریعتر اما درج کندتر است.
  • برای HNSW ، Tweaking ef_construction (کیفیت ساخت فهرست) و ef_search (دقت پرس و جو) به سرعت و دقت تعادل کمک می کند.

به طور کلی ، IVFFLAT برای مقیاس بندی به میلیون ها بردار ایده آل است ، در حالی که HNSW دقت بهتری را برای برنامه های AI محور در جایی که دقیق است ، فراهم می کند. بهترین انتخاب به اندازه مجموعه داده ها ، محدودیت های حافظه و نیازهای دقت جستجو بستگی دارد.

پایان

جستجوی وکتور در حال تبدیل شدن به یک فناوری ضروری برای برنامه های هوش مصنوعی است و به پایگاه داده ها امکان می دهد موارد مشابه را به جای مسابقات دقیقاً دقیق بازیابی کنند. با ظهور مدلهای بزرگ زبان (LLM) و هوش مصنوعی تولید ، امکان ذخیره و جستجوی تعبیه به طور مؤثر از همیشه مهمتر است.

PGVECTOR این قدرت را به PostgreSQL می آورد و کار با تعبیه های بردار را در یک پایگاه داده آشنا آسان می کند. انتخاب روش فهرست بندی مناسب به نیازهای شما بستگی دارد:

IVFFLAT برای مجموعه داده های بزرگی که سرعت از آن مهمتر از دقت کامل است ، بهترین است.
HNSW ایده آل است که دقت در اولویت باشد و شما می توانید از حافظه بالاتری استفاده کنید.

با تنظیم پارامترهای مانند lists (ivfflat) یا ef_search (HNSW) ، می توانید عملکرد را برای مورد استفاده خاص خود بهینه کنید. این که آیا شما در حال ساخت یک چت بابات با قدرت AI هستید ، یک سیستم توصیه یا یک موتور جستجوی تصویر ، پایگاه داده های بردار برای ماندن در اینجا هستند و PGVECTOR یک راه عالی برای شروع است!

منابع و خواندن بیشتر

مخزن PGVECTOR GITHUB – مستندات رسمی و دستورالعمل های تنظیم.

مستندات PostgreSQL – در مورد نمایه سازی و بهینه سازی پرس و جو بیشتر بدانید.

مقاله الگوریتم HNSW-نگاه عمیق به نمایه سازی HNSW.

برای شما یک پایگاه داده وکتور بنویسید – توضیح خوبی که الگوریتم کار می کند

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا