وکتور دیتابیسها با ظهور تکنیکهای RAG (Retrieval-Augmented Generation) محبوبیت دوچندانی پیدا کردهاند. ولی استفاده از آنها فقط به این زمینه محدود نمیشود. رشد بسیار زیاد هوش مصنوعی در سالهای اخیر منجر به تولید بردارهای بسیار مطلوب از روی دادههای مختلف مانند متن، تصویر و… شده که میتوان برای جستجو بین تصاویر مشابه یا متون مشابه از آنها استفاده کرد. برای ذخیرهی این بردارها و جستجو بین آنها، دیتابیسهای مختلفی توسعه داده شدند که در حال حاضر یکی از محبوبترینها، دیتابیس «کوادرانت» میباشد.
چرا به وکتورها نیاز داریم؟
اکثر دادههای دیجیتال قابل نمایش با یک بردار میباشند. وکتورها میتوانند معنادارتر از دادهی خام باشند. برای مثال، یک تصویر خام با تعداد زیادی عدد ذخیره میشود که هیچکدام از این اعداد نشاندهندهی معنا و مفهوم خاصی از تصویر، مانند حضور یا عدم حضور افراد در آن یا شاد یا غمگین بودن عکس، نیستند (در فرمتهایی که با ویوفرم کار میکنند، ضرایب ویوفرم هستند و در فرمتهایی که با پیکسلها کار میکنند، شدت رنگهای مختلف هستند). برای یافتن یک تصویر مشابه، نمیتوان مقدار عددی تکتک پیکسلها را یک به یک مقایسه کرد و بر اساس آن گفت که دو تصویر چقدر مشابهند. اما در صورتی که از هر تصویر یک بردار استخراج شود که هر عضو آن معنا و مفهومی از تصویر دارا باشد، میتوان مقایسهی بسیار دقیقی بر اساس بردارها انجام داد.
شبکههای عصبی میتوانند از روی دادههای مختلف بردارهایی استخراج کنند که در فضای آن بردارها، دادههای مشابه در نزدیکی یکدیگر قرار گیرند و دادههای متفاوت از هم فاصلهی بیشتری داشته باشند.
وکتور دیتابیسها چه میکنند؟
اصلیترین وظیفهی وکتور دیتابیسها، ذخیرهی بردارها و جستجوی نزدیکترین بردار با دریافت یک بردار میباشد.
این دیتابیسها میتوانند بردارهایی با ابعاد بسیار بزرگ را مدیریت کنند.
برخی از آنها علاوه بر این، قابلیتهایی مانند فشردهسازی بردارها و فراداده (metadata) همراه بردارها را نیز دارند.
وکتور دیتابیسها چگونه کار میکنند؟
این دیتابیسها برای جستجوی سریع بین بردارها و یافتن نزدیکترین بردار، از روشهای خاصی برای ایندکس کردن داده استفاده میکنند که از جملهی آنها میتوان به سه روش زیر اشاره کرد:
FAISS (Facebook AI Similarity Search): یک کتابخانهی توسعهدادهشده توسط فیسبوک برای جستجوی مبتنی بر شباهت.
Hierarchical Navigable Small World (HNSW): یک روش بر اساس ساخت گراف برای جستجوی ANN (Approximate Nearest Neighbor).
Product Quantization (PQ): یک روش برای کاهش تعداد بیتهایی که به ذخیرهسازی هر اندیس در بردارها اختصاص داده میشود. این روش سرعت را افزایش داده و حافظهی مصرفی را کاهش میدهد.
کوادرانت چیست؟
کوادرانت یک وکتور دیتابیس کارآمد و متنباز است.
ایندکسینگ در کوادرانت
در کوادرانت از روش Hierarchical Navigable Small World (HNSW) استفاده شده است. در این روش ایندکسینگ، از روی بردارها یک گراف ساخته میشود که چندین لایه دارد. در هر لایه، بردارهای نزدیک به یکدیگر متصل میشوند.
نحوهی ساخت گراف
هر برداری که به گراف اضافه میشود، ابتدا در پایینترین لایه قرار میگیرد و به بردارهایی که کمترین فاصله را با آن دارند، متصل میشود. سپس با احتمال کمتری، این بردار به لایههای بالاتر نیز اضافه میشود. این فرآیند تا لایهی آخر ادامه مییابد. در نهایت، یک گراف چندلایه ایجاد میشود که در آن در لایهی بالایی تعداد بسیار کمی بردار وجود دارد، در لایهی پایینی تمام بردارها حضور دارند، و در لایههای میانی تعداد بردارها از پایین به بالا کاهش مییابد.
نحوهی جستجو
برای یافتن نزدیکترین بردار به یک بردار دلخواه، جستجو از یک بردار در لایهی بالایی گراف شروع میشود. بین بردارهای متصل به آن، نزدیکترین بردار به بردار مورد جستجو انتخاب میشود. سپس به لایهی پایینتر رفته و جستجو بین همسایههای آن بردار ادامه مییابد. این فرآیند تا رسیدن به آخرین لایه تکرار میشود. وقتی به آخرین لایه رسیدیم و نزدیکترین همسایه انتخاب شد، با احتمال بسیار بالایی، این همسایه نزدیکترین بردار به بردار مورد جستجو در بین تمامی بردارها خواهد بود.
این روش باعث میشود جستجو بهطور کارآمد و با دقت بالا انجام شود.
اعمال فیلتر بر اساس فرادادهی بردار
در کوادرانت میتوان همراه هر بردار اطلاعات دیگری را نیز ذخیره کرد (برای مثال، در کنار بردار تصویر چهره میتوان کد ملی و مشخصات شخص را ذخیره کرد). کوادرانت قابلیت اعمال فیلتر بر اساس این مشخصات را دارد. برای مثال، میتوان برای جستجوی بردار یک چهره در دیتابیسی از تمامی چهرههای کشور، نتیجه را به بردارهای فقط یک شهر خاص محدود کرد.
برای اعمال این فیلتر، در هر مرحلهی جستجو، فقط همسایههایی که دارای آن ویژگی باشند انتخاب میشوند. یکی از بزرگترین چالشهای این کار، عدم وجود آن ویژگی در همسایگی برداری است که در جستجو به آن رسیدهایم. کوادرانت برای حل این مشکل، به صورت موقت اتصالات جدیدی در حین جستجو ایجاد میکند تا جستجو ادامه یابد.
سرعت کوادرانت
کوادرانت در بنچمارکهای مختلف اثبات کرده که قدرت بسیار بالاتری نسبت به رقبای خود در سرعت جستجو و مقیاسپذیری دارد.
مقیاسپذیری
کوادرانت تمامی بردارها را به دستههای کوچکی به نام شارد (shard) تقسیم میکند. هر شارد دارای تعدادی بردار میباشد. سپس این شاردها را روی نودهایی که در اختیار آن قرار داده شده توزیع میکند، به این صورت که هر نود تعدادی شارد روی خود خواهد داشت و در صورت نیاز هر شارد میتواند روی بیشتر از یک نود کپی شود.
کوادرانت هنگام جستجو، ابتدا شاردهایی که احتمال وجود پاسخ در آنها وجود دارد را تخمین میزند و سپس به نزدیکترین نودهای دارای آن شاردها درخواست جستجو میفرستد. سپس پاسخها را دریافت کرده و بهترین آنها را انتخاب میکند.
جمعبندی
میتوان از روی دادههای مختلف بردارهایی به دست آورد که برای دادههایی با معنای مشابه، این بردارها نزدیک به هم شوند.
دیتابیسهایی برای ذخیره و جستجو بر اساس شباهت بردارها توسعه یافتهاند که به آنها وکتور دیتابیس گفته میشود.
کوادرانت یک وکتور دیتابیس متنباز و بسیار کارآمد میباشد.
کوادرانت با ساخت یک گراف از روی بردارها میتواند هنگام جستجو، نزدیکترین بردار را با دقت و سرعت مناسب پیدا کند.
معماری کوادرانت مقیاسپذیر میباشد.