خانه هوش مصنوعی با نحوه کار وکتور دیتابیس ها آشنا شوید هوش مصنوعی وکتور دیتابیس نوشته شده توسط: تیم فنی نیک آموز تاریخ انتشار: ۰۴ تیر ۱۴۰۳ آخرین بروزرسانی: 04 تیر 1403 زمان مطالعه: 12 دقیقه ۴.۵ (۴) در عصر هوش مصنوعی، شاهد ظهور نسل جدیدی از دیتایسها به نام «وکتور دیتابیس» هستیم. ایده اصلی این نوع دیتابیس، ذخیرهسازی اطلاعات بهصورت وکتورها (بُردار) مرتبط با آن دادهها است. پیشنهاد میکنیم برای آشنایی بیشتر با این نوع پایگاه داده، در ابتدا مقاله پایگاه داده برداری چیست را مطالعه کنید. یکی از کاربردهای وکتور دیتابیسها در سیستمهای پیشنهاددهنده (Recommender Systems) است در این سیستمها، برای کاربران و محصولاتی که میخواهیم به آنها پیشنهاد دهیم، وکتورهایی (بُردارهایی) تعیین میکنیم. این امر امکان جستجوی سریع آیتمهای مشابه را با استفاده از الگوریتم (Approximate Nearest Neighbor) فراهم میکند. مثلاً اگر کاربری به محصول A علاقه نشان داده باشد، سیستم میتواند با جستجوی نزدیکترین وکتورها، محصولات دیگری را پیشنهاد بدهد که ازنظر مفهومی، به محصول A نزدیک هستند. به لطف مدلهای بزرگ زبان (Large Language Models)، که بهتازگی پیشرفت قابل توجهی کرده است، اکنون میتوانیم بهراحتی از متن هم وکتور بهدست بیاوریم. این وکتورها معنای متن را در خودشان جای میدهند. پس با استفاده از وکتور دیتابیسها میتوانیم بهراحتی متنهای مشابه ازنظر معنایی را پیدا کنیم. معرفی انواع وکتور دیتابیس ها پیش از بررسی نحوه کار وکتور دیتابیسها ، در ابتدا با انواع مختلف آن آشنا میشویم که در ادامه، لیست کوتاهی از آنها را بررسی میکنیم: وکتور دیتابیس Pinecone یک دیتابیس وکتوری بوده که برای کاربردهای یادگیری ماشین طراحی شده است. این دیتابیس از الگوریتمهای یادگیری ماشین مختلفی پشتیبانی میکند و روی Faiss ساخته شده است. Faiss یک کتابخانه متنباز از Meta برای جستجوی شباهت وکتورهای متراکم است. وکتور دیتابیس Deep Lake یک پایگاه داده برای هوش مصنوعی است که از یک فرمت ذخیرهسازی خاص برای بهینهسازی در برنامههای یادگیری عمیق و مدلهای زبان بزرگ (LLM) استفاده میکند. Deep Lake ویژگیهای مختلفی دارد. ازجمله: امکان جستجوی وکتور مدیریت و کنترل نسخهبندی و اثر داده برای همه کارها فراهمکردن جریان داده حین آموزش مدلها در مقیاس بزرگ ادغام با ابزارهای محبوب مانند LangChain ، LlamaIndex ، Weights & Biases امکان ذخیرهسازی انواع داده (ازجمله وکتور، صدا، متن، ویدئو، تصویر، فایلهای PDF) همین ویژگیها در کنار بسیاری از موارد دیگر، استقرار محصولات مبتنیبر LLM در سطح سازمانی را برای این نوع وکتور دیتابیس سادهتر کرده است. وکتور دیتابیس Milvus یک وکتور دیتابیس متنباز بوده و برای جستجوی شباهت وکتور و برنامههای هوش مصنوعی ساخته شده است. Milvus جستجوی دادههای غیرساختاری را سادهتر میکند و صرف نظر از محیط استقرار، یک تجربه کاربری یکنواخت ارائه میدهد. وکتور دیتابیس Qdrant این سری از انواع وکتور دیتابیس، یک موتور جستجوی شبیه وکتور است. Qdrant یک سرویس آماده به کار بوده که یک API برای ذخیره، جستجو و مدیریت نقاط وکتورها ارائه میدهد و از قابلیت فیلترکردن پشتیبانی میکند. این امر باعث میشود Qdrant برای انواع مختلف مطابقت شبکه عصبی یا مبتنیبر معنا، جستجوی چندوجهی و سایر برنامهها مفید باشد. وکتور دیتابیس Weaviate یک وکتور دیتابیس متنباز بوده که قدرتمند، مقیاسپذیر، ابری و سریع است. با Weaviate میتوانید متن، تصاویر و موارد دیگر خود را با استفاده از مدلهای یادگیری ماشین پیشرفته به یک وکتور دیتابیس قابل جستجو تبدیل کنید. جستجو و فهرست بندی در فضای وکتور فهرستبندی (Indexing) یک وکتور دیتابیس با فهرستبندی اکثر دیتابیسهای دیگر متفاوت است. هدف جستجو در این دیتابیسها، پیداکردن نزدیکترین همسایه براساس شباهتشان است. زمان لازم برای پیداکردن نزدیکترین همسایهها با الگوریتم K-Nearest Neighbor) بهصورت O(ND) است که N تعداد وکتورها و D بُعد وکتور است. این زمان مقیاسپذیر نیست و با تعداد آیتمها بیشتر میشود. روش معمول برای حل این مشکل، استفاده از الگوریتمهای همسایه نزدیک بهطور تقریبی (ANN) است تا جستجو بهسرعت انجام شود. در اینجا به بررسی ۳ الگوریتم مختلف برای جستجوی وکتوری در بررسی نحوه کار وکتور دیتابیس میپردازیم: کوانتیزه کردن محصول (Product Quantization) این الگوریتم وکتورها را به چند بخش کوچکتر تقسیم میکند و هر بخش را بهصورت جداگانه کدگذاری میکند. این کار باعث کاهش ابعاد وکتور و افزایش سرعت جستجو میشود. هش حساس به مکان (Locality-sensitive hashing) این الگوریتم وکتورها را به کدهای دودویی کوتاه تبدیل میکند. کدهای وکتورهای مشابه، به یکدیگر نزدیک هستند. این امر جستجو را سریعتر و کارآمدتر میکند. الگوریتم Hierarchical Navigable Small World (به اختصار HNSW) این الگوریتم از یک ساختار سلسلهمراتبی برای سازماندهی وکتورها استفاده میکند و وکتورهای شبیه به هم را به یکدیگر نزدیک میکند. این ساختار به جستجوهای سریع و کارآمد در مجموعههای داده بزرگ کمک میکند. این الگوریتمها معمولاً بهصورت ترکیبی برای دستیابی به سرعت بهینه در اکثر وکتوردیتابیسها مورد استفاده قرار میگیرند. سازماندهی محصول در وکتور دیتابیس در بسیاری از موارد، هنگام جستجوی همسایگان نزدیک، دقت مطلق اهمیتی ندارد. کوانتیزهکردن محصول (PQ) روشی برای کمّی کردن فضای وکتور است و برای نمایش آنها با دقت کمتر به کار میرود. در این روش به جای فهرست کردن تکتک بردارها، مرکز کلاسترهای هر وکتور را فهرست میکنند. یعنی هنگام جستجوی همسایگان نزدیک برای یک کوئری وکتور، فقط کافیست وکتورهای نزدیکترین کلاستر را بررسی کنیم. این روش جستجو را سریعتر کرده و فضای حافظه موردنیاز برای فهرستبندی وکتورها را بهطور قابل توجهی کاهش میدهد. در هر پارتیشن، الگوریتم k-means را اجرا میکنیم: در این روش به جای فهرست کردن تکتک وکتورها، مرکز کلاسترهای هر وکتور را فهرست کردیم. با استفاده از دو کلاستر در هر قسمت، میتوان حجم دادهها را تا سه برابر فشرده کرد. قاعدتاً با افزایش تعداد وکتورها فشردهسازی به مراتب بیشتر میشود. اکنون هر وکتور را به مجموعهای از کلاسترها و مرکز آنها وصل میکنیم. برای یافتن همسایگان نزدیک یک کوئری وکتور، فاصله اقلیدسی مربعی بین هر کلاستر در هر پارتیشن را محاسبه میکنیم و وکتورهایی را برمیگردانیم که مجموع فواصل اقلیدسی مربعی آنها کمترین مقدار است. با این روش، به جای جستجوی تکتک وکتورها، فقط کافیست مرکز کلاسترها را جستجو کنیم. همچنین بین زمان جستجو و دقت تعادل برقرار میشود. هرچه تعداد کلاسترها بیشتر باشد، هش بهتر و همسایگان نزدیکتر با دقت بیشتری بازگردانده میشوند. البته زمان جستجو نیز بهدلیل افزایش جستجوی کلاسترها بیشتر میشود. این روش هنوز کمی ابتدایی (brute-force) است؛ زیرا با زیادشدن تعداد کلاسترها، کارایی الگوریتم نیز پایین میآید. به همین دلیل، میتوان آن را با الگوریتمهای دیگر ترکیب کرد. تبدیل LSH (مخفف Locality-sensitive hashing) هدف LSH این است که وکتورهای مشابه را باهم یک گروه کند. مثلاً فرض کنید فضای وکتور را به چند bucket تقسیم کنیم. حالا هر وکتوری که در یک bucket مشترک باشد، یک همسایه نزدیک (nearest neighbor) میتوان در نظر گرفت. تبدیل وکتور به هش (Hashing a vector) در عمل، این کار کمی پیچیدهتر است. یک راه مؤثر برای تقسیمبندی فضا، این بوده که وکتورها را روی فضایی ابعادی مشخص قرار دهیم و بعد هر مؤلفه را به مؤلفه دودویی (باینری) تبدیل کنیم. این کار با استفاده از یک ماتریس تصادفی M با ابعاد (C, R) انجام میشود. در اینجا C بُعد وکتور اولیه (V) و R بُعد فضایی است که میخواهیم وکتورها را در آن قرار دهیم. برای مثال، اگر C=2 و R=3 باشد، نتیجه زیر را خواهیم داشت: حالا با استفاده از نمودار صفحهای (hyperplane) که از مبدأ میگذرد، فضا را به دو ناحیه بالا و پایین تقسیم میکنیم. فرض کنید یک بردار A داریم که برابر با [۰.۵, -۱.۵, ۰.۳] است. تعیین میکنیم که برای هرکدام از مؤلفهها اگر مثبت باشد، مقدار ۱ و اگر منفی بود، مقدار ۰ را اختصاص دهد. با این فرآیند، بردار A به [۱, ۰, ۱] تبدیل (hash) میشود. هر برداری که همین هش را داشته باشد در فضای برداری به بردار A نزدیک است و آنها را میتوان بهعنوان «همسایه نزدیک» درنظر گرفت. فاصله زمانی برای تبدیل بردار V به هش برابر است با O(R x C + R) = O(R x C). با این کار همزمان پیدا کردن وکتورهای همهش انجام میشود. فاصله همینگ: فاصله بین هش های دو وکتور در فرآیند هشگذاری LSH در نحوه کار وکتور دیتابیس، هر وکتور به یک وکتور باینری تبدیل میشود. برای سنجش میزان تفاوت دو وکتور باینری، از فاصله همینگ استفاده میکنیم. فاصله همینگ تعداد دفعاتی را میشمارد که دو رشته کاراکترهای متفاوتی دارند. درمورد رشتههای اعداد باینری فاصله همینگ را میتوان با استفاده از عمل XOR و شمارش تعداد ۱های حاصل محاسبه کرد. الگوریتم HNSW (مخفف Hierarchical Navigable Small World) HNSW یکی از کارآمدترین روشهای ساخت شاخص برای وکتور دیتابیس است. ایده اصلی این روش، ساخت یک گراف یکسان و استفاده از آن گراف برای یافتن گرههایی است که به کوئری وکتور نزدیکتر هستند. شبکه NSW این شبکه روشی برای ساخت گرافهای کارآمد جستجو هستند. فرض کنید مجموعهای وکتور را میخواهیم فهرستبندی کنیم. با اضافهکردن وکتورها بهصورت یکی پس از دیگری و اتصال هر گره جدید به نزدیکترین همسایهاش، یک گراف میسازیم. در مثال بالا، هر گره جدید به دو همسایه مشابه خودش متصل شده است. باوجوداین، میتوانستیم از سایر همسایگان مشابه نیز استفاده کنیم. هنگام ساخت گراف، باید معیاری را برای شباهت انتخاب کنیم که جستجو برای یافتن موارد براساس معیار ما، یعنی شباهت، بهینه شود. در ابتدا، زمانی که گرهها اضافه میشوند، چگالی کم است و لبهها تمایل دارند گرههایی را که ازنظر شباهت از هم دور هستند، به هم متصل کنند. بهتدریج، چگالی افزایش مییابد و لبهها کوتاهتر میشوند؛ درنتیجه، گراف از لبههای بلند تشکیل شده است که به ما امکان میدهد فاصلههای طولانیتری را در گراف طی کنیم. لبههای کوتاه هم همسایگان نزدیکتر را به هم متصل میکنند. به دلیل این ساختار، میتوانیم بهسرعت از یک طرف گراف به طرف دیگر حرکت کنیم و دنبال گرههایی در مکان خاصی در فضای وکتور باشیم. برای مثال، در شکل زیر، یک کوئری وکتور داریم. اکنون میخواهیم نزدیکترین همسایههایش را پیدا کنیم. در این روش جستجویمان را از یک نقطه آغاز میکنیم (در مثال ما، نقطه A). سپس همسایگان آن نقطه (یعنی D، G و C) را بررسی میکنیم تا ببینیم کدام یک به کوئری ما نزدیکتر است. این فرآیند را تا زمانی که دیگر همسایهای به کوئری نزدیکتر نباشد، ادامه میدهیم. درنهایت، زمانی که دیگر حرکتی در این مسیر وجود نداشته باشد، به نزدیکترین همسایه عبارت جستجو رسیدیم. البته این جستجو تقریبی است و ممکن است به دلیل گیرکردن در «حداقلهای محلی» (Local Minima) به نزدیکترین همسایه واقعی نرسیم. گراف Hierarchical مشکل گراف NSW این بود که برای رسیدن به گره درست باید خیلی در گراف بگردیم و زمان بسیار صرف کنیم. ایده اصلی الگوریتم HNSW این است که چندین لایه گراف بسازیم؛ طوریکه هر لایه نسبت به لایه قبلی، کمتر متراکم باشد. هر لایه همان فضای وکتوری را دارد اما همه وکتورها به گراف اضافه نمیشوند. بهطور کلی، ما یک گره را با احتمال P(L) در لایه L به گراف اضافه میکنیم. همه گرهها در آخرین لایه قرار میگیرند (اگر N لایه داشته باشیم، P(N) = 1 است). هرچه به لایههای اول نزدیک میشویم، این احتمال کمتر میشود. به عبارت دیگر، احتمال اینکه یک گره در لایه بعدی قرار بگیرد، بیشتر است. یعنی P(L) < P(L + 1). لایه اول به ما این امکان را میدهد که در هر حرکت فواصل بیشتری را طی کنیم، درحالی که در لایه آخر، هر حرکت معمولاً فواصل کوتاهتری را پوشش میدهد. وقتی دنبال یک گره میگردیم، اول از لایه ۱ شروع میکنیم و اگر الگوریتم NSW نزدیکترین همسایه را در آن لایه پیدا کند، به لایه بعدی میریم. این کار به ما کمک میکند تا همسایههای تقریباً نزدیک را بهطور میانگین در دفعات کمتری پیدا کنیم. این الگوریتم را میتوان بهراحتی برای پیداکردن چند همسایه نزدیک به هم توسعه داد. بررسی معیار شباهت در وکتور دیتابیس ها وقتی دنبال آیتمهای مشابه در یک وکتور دیتابیس هستیم، باید مشخص کنیم منظورمان از وکتورهای مشابه چیست. معیارهای بسیاری برای تعیین شباهت وکتورها وجود دارد که در ادامه، به برخی از آنها اشاره میکنیم: ۱. فاصله اقلیدسی فرض کنید دو وکتور A = [a1, a2] و B = [b1, b2] داریم. فاصله اقلیدسی بین این دو وکتور بهسادگی با استفاده از فرمول زیر محاسبه میشود: فاصله اقلیدسی، معیاری برای سنجش نزدیکی دو نقطه در فضای وکتوری (برداری) است. درحالی که مدلها برای هر داده، یک نمایش وکتوری ایجاد میکنند، هرکدام از مؤلفههای این وکتور ممکن است اطلاعات متفاوتی درباره آن داده نشان دهند. با این حال، فاصله اقلیدسی معمولاً بهطور کامل این تفاوتها را نادیده میگیرد. ۲. ضرب داخلی فرض کنید دو وکتور A و B به ترتیب با مقادیر [a1, a2] و [b1, b2] نمایش داده شدند. در این حالت، ضرب داخلی (یا ضرب اسکالر) این دو وکتور عددی حقیقی را بهعنوان نتیجه برمیگرداند. دو روش برای محاسبه ضرب داخلی وجود دارد: روش اول روش دوم در اینجا: ||A|| هنجار (Norm) وکتور A است. ||B|| هنجار وکتور B است. 𝜃 زاویه بین وکتورهای A و B است. رابطه زاویه و ضرب داخلی: همانطور که از فرمول دوم پیداست، ضرب داخلی دو وکتور با کسینوس زاویه بین آنها نسبت مستقیم دارد. یعنی: اگر 𝜃 بین ۰ و ۹۰ درجه باشد، cos 𝜃 > 0 و ضرب داخلی دو وکتور مثبت خواهد بود. اگر 𝜃 بین ۹۰ و ۱۸۰ درجه باشد، cos 𝜃 < 0 و ضرب داخلی دو وکتور منفی خواهد بود. اگر 𝜃 = 0 درجه باشد، cos 𝜃 = 1 و ضرب داخلی دو وکتور برابر با حاصلضرب هنجارهای آنها خواهد بود. اگر 𝜃 = 180 درجه باشد، cos 𝜃 = -۱ و ضرب داخلی دو وکتور برابر با منفی حاصلضرب هنجارهای آنها است. نکته قابل توجه این است که دو وکتور میتوانند با وجود داشتن فواصل اقلیدسی (||A|| و ||B||) یکسان، ضرب داخلیهای متضاد داشته باشند. این موضوع به زاویه بین دو وکتور و نحوه قرارگیری آنها نسبت به مبدأ بستگی دارد. ۳. شباهت کسینوسی شباهت کسینوسی معیاری برای سنجش شباهت بین دو وکتور در فضای چندبعدی است. این معیار با محاسبه کسینوس زاویه بین وکتورها به دست میآید. کسینوس زاویه، عددی بین منفی ۱ تا مثبت ۱ بوده و نشاندهنده جهت و نزدیکی دو وکتور به یکدیگر است. فرمول آن برابر است با: از آنجاییکه: بنابراین: شباهت کسینوسی از طول وکتورها مستقل است و فقط به زاویه بین آنها بستگی دارد. به عبارت دیگر، دو وکتور میتوانند مقادیر متفاوتی داشته باشند، اما درصورتی که زاویه بین آنها یکسان باشد، شباهت کسینوسی آنها نیز برابر خواهد بود. وکتور دیتابیس ها فراتر از فهرست سازی وکتور دیتابیسها فراتر از الگوریتمهای ایندکس و جستجوی تقریبی نزدیکترین همسایه عمل میکنند. این نوع دیتابیسها بهطور خاص برای مدیریت «نمایشهای برداری» (vector embeddings) طراحی شدند و مزایای متعددی را ارائه میدهند: عملیات دیتابیس: مانند هرنوع دیتابیس دیگری، امکان انجام عملیات دیتابیس معمولی مانند درج، حذف و بهروزرسانی دادهها در وکتور دیتابیس نیز وجود دارد. متادیتا و فیلترکردن: وکتور دیتابیس امکان ذخیرهسازی متادیتای مرتبط با هر وکتور را فراهم میکند. با این قابلیت، انجام جستجوهای دقیقتر راحتتر است. طوریکه کاربران میتوانند نتایج را براساس متادیتای اضافی فیلتر کنند. قابلیت مقیاسپذیری: وکتور دیتابیس به گونهای طراحی شده که با افزایش حجم دادهها و پشتیبانی از پردازش توزیعشده و موازی، مقیاسپذیری خود را حفظ کند. چه رتبه ای میدهید؟ میانگین ۴.۵ / ۵. از مجموع ۴ اولین نفر باش معرفی نویسنده مقالات 401 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده تیم فنی نیک آموز مقالات مرتبط ۰۳ آبان هوش مصنوعی راهنمای کاربردی اصطلاحات هوش مصنوعی تیم فنی نیک آموز ۰۱ آبان هوش مصنوعی ساخت پایپ لاین RAG در یک قدم بسیار ساده + نمونه کد واقعی نگین فاتحی ۰۴ مهر هوش مصنوعی پارادایم های RAG در مدل های زبانی بزرگ تیم فنی نیک آموز ۲۰ شهریور هوش مصنوعی نحوه ساخت RAG های کارآمد با Query Routing نگین فاتحی دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ