برنامه نویسی

با جستجوی بردار در Azure Cosmos DB شروع کنید

این راهنما برای افرادی است که به دنبال راهی برای سریع و آسان ویژگی جستجوی بردار در Azure Cosmos DB برای NOSQL هستند. این برنامه از یک مجموعه داده ساده فیلم برای یافتن فیلم های مشابه بر اساس معیارهای معین استفاده می کند. این به چهار زبان اجرا شده است – Python ، TypeScript ، .net و Java. دستورالعملهایی وجود دارد که شما را از طریق فرآیند تنظیم کارها ، بارگیری داده ها و سپس اجرای نمایش داده های جستجوی شباهت طی می کند.

یک بانک اطلاعاتی بردار برای ذخیره و مدیریت تعبیه های بردار طراحی شده است که بازنمایی ریاضی داده ها در یک فضای با ابعاد بالا است. در این فضا ، هر بعد با یک ویژگی از داده ها مطابقت دارد و ممکن است از ده ها هزار بعد برای نشان دادن داده ها استفاده شود. موقعیت یک بردار در این فضا مشخصات آن را نشان می دهد. کلمات ، عبارات یا کل اسناد و تصاویر ، صوتی و انواع دیگر داده ها همه می توانند بردار شوند. این تعبیه های بردار در جستجوی شباهت ، جستجوی چند معدنی ، موتورهای توصیه ها ، مدل های بزرگ زبان (LLM) و غیره استفاده می شود.

پیش نیازهای

شما نیاز خواهید داشت:

من فرض می کنم که شما زبان برنامه نویسی لازم را از قبل تنظیم کرده اید. برای اجرای مثال جاوا ، باید Maven را نصب کنید (به احتمال زیاد شما این کار را می کنید ، اما من می خواستم آن را صدا کنم).

پیکربندی پایگاه داده بردار یکپارچه در Azure Cosmos DB برای NOSQL

قبل از شروع بارگیری داده ها ، حتماً پایگاه داده بردار را در Azure Cosmos DB پیکربندی کنید.

ویژگی را فعال کنید

این یک عمل یک بار است – شما باید صریحاً ویژگی نمایه سازی و جستجو بردار را فعال کنید.

شرح تصویر

دیتابیس و ظرف ایجاد کنید

پس از انجام این کار ، پیش بروید و یک پایگاه داده و مجموعه ایجاد کنید. من یک پایگاه داده به نام ایجاد کردم movies_db و یک ظرف به نام movies با تنظیم کلید پارتیشن روی /idبشر

سیاست ایجاد کنید

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

شرح تصویر

انتخاب نوع فهرست: توجه داشته باشید که من انتخاب کرده ام diskANN نوع فهرست کدام یک و ابعادی از 1536 برای تعبیه بردار. مدل تعبیه شده من مدل Text-Embedding-ADA-002 بود و از اندازه ابعاد 1536 پشتیبانی می کند. توصیه می کنم برای اجرای این برنامه نمونه به این مقادیر بچسبید. اما بدانید که می توانید نوع شاخص را تغییر دهید اما برای مطابقت با بعد جدید نوع شاخص مشخص شده ، نیاز به تغییر مدل تعبیه دارید.

خوب ، اجازه دهید حرکت کنیم.

بارگیری داده ها در Azure Cosmos db

برای ساده نگه داشتن چیزها ، من یک مجموعه داده کوچک از فیلم ها در قالب JSON (در پرونده Movies.Json) دارم. این روند ساده است:

  • اطلاعات اطلاعات فیلم را از json پرونده
  • تعبیه بردار (توضیحات فیلم) و
  • داده های کامل (عنوان ، توضیحات و تعبیه ها) را در ظرف Azure Cosmos DB وارد کنید.

همانطور که وعده داده شده است ، در اینجا دستورالعمل های خاص زبان وجود دارد – به روشی که برای شما مرتبط است مراجعه کنید. صرف نظر از زبان ، شما باید متغیرهای محیط زیر را تنظیم کنید:

export COSMOS_DB_CONNECTION_STRING=""
export DATABASE_NAME=""
export CONTAINER_NAME=""

export AZURE_OPENAI_ENDPOINT=""
export AZURE_OPENAI_KEY=""
export AZURE_OPENAI_VERSION="2024-10-21"
export EMBEDDINGS_MODEL="text-embedding-ada-002"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

قبل از حرکت ، فراموش نکنید که این مخزن را کلون کنید:

git clone https://github.com/abhirockzz/cosmosdb-vector-search-python-typescript-java-dotnet
cd cosmosdb-vector-search-python-typescript-java-dotnet
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داده های بردار را با استفاده از Python SDK برای Azure Cosmos DB بارگیری کنید

محیط پایتون را تنظیم کرده و وابستگی های مورد نیاز را نصب کنید:

cd python
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای بارگیری داده ها ، دستور زیر را اجرا کنید:

python load.py
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داده های بردار را با استفاده از SDK TypeScript برای Azure Cosmos DB بارگیری کنید

وابستگی های مورد نیاز را نصب کنید:

cd typescript
npm install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برنامه را بسازید و سپس داده ها را بارگیری کنید:

npm run build
npm run load
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داده های بردار را با استفاده از Java SDK برای Azure Cosmos DB بارگیری کنید

وابستگی ها را نصب کنید ، برنامه را بسازید:

cd java
mvn clean install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بارگیری داده ها:

java -jar target/cosmosdb-java-vector-search-1.0-SNAPSHOT.jar load
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داده های بردار را با استفاده از Dotnet SDK برای Azure Cosmos DB بارگیری کنید

وابستگی ها را نصب کنید و داده ها را بارگیری کنید:

cd dotnet

dotnet restore
dotnet run load
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

صرف نظر از زبان ، باید خروجی مشابه این را ببینید (با تفاوت های جزئی):

database and container ready....
Generated description embedding for movie: The Matrix
Added data to Cosmos DB for movie: The Matrix
....
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داده ها را در Azure Cosmos DB تأیید کنید

داده ها را در پورتال لاجورد بررسی کنید. همچنین می توانید از پسوند کد ویژوال استودیو نیز استفاده کنید ، این بسیار مفید است!

شرح تصویر

بیایید به قسمت جستجو برویم!

بردار/جستجوی شباهت

مؤلفه جستجو مجموعه Azure Cosmos DB را برای یافتن فیلم های مشابه بر اساس معیارهای جستجوی معین – به عنوان مثال ، می توانید جستجو کنید comedy فیلم ها این کار با استفاده از عملکرد VectordIstance انجام می شود تا نمره شباهت بین دو بردار بدست آید.

باز هم ، روند بسیار ساده است:

  • یک وکتور را برای معیارهای جستجو تعبیه کنید و
  • از VectorDistance عملکردی برای مقایسه آن.

این همان چیزی است که پرس و جو به نظر می رسد:

SELECT TOP @num_results c.id, c.description, VectorDistance(c.embeddings, @embedding) AS similarityScore FROM c ORDER BY VectorDistance(c.embeddings, @embedding)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

من فرض می کنم که شما قبلاً متغیرهای محیط را تنظیم کرده اید و داده ها را بارگیری کرده اید.

با معیارهای جستجوی خود از برنامه مربوطه استفاده کنید (به عنوان مثال inspiringبا comedy، و غیره) و تعداد نتایج (top N) شما می خواهید ببینید.

پیتون

python search.py "inspiring" 3
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شرح

npm run search "inspiring" 3
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جاوا

java -jar target/cosmosdb-java-vector-search-1.0-SNAPSHOT.jar search "inspiring" 3
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داتنت

dotnet run search "inspiring" 3
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

صرف نظر از زبان ، باید نتایج مشابه این را بدست آورید. به عنوان مثال ، پرس و جو جستجوی من “الهام بخش” بود و من نتایج زیر را گرفتم:

Search results for query: inspiring

Similarity score: 0.7809536662138555
Title: Forrest Gump
Description: The story of a man with a low IQ who achieves incredible feats in his life, meeting historical figures and finding love along the way.
=====================================
Similarity score: 0.771059411474658
Title: The Shawshank Redemption
Description: Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.
=====================================
Similarity score: 0.768073216615931
Title: Avatar
Description: A paraplegic Marine dispatched to the moon Pandora on a unique mission becomes torn between following his orders and protecting the world he feels is his home.
=====================================
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یادداشت های بسته شدن

امیدوارم که این را مفید داشته باشید! قبل از بسته شدن ، در اینجا چند نکته را باید در خاطر داشته باشید:

  • انواع مختلف شاخص بردار وجود دارد که باید با آنها آزمایش کنید (flatبا quantizedFlat)
  • متریک مورد استفاده خود را برای محاسبه فاصله/شباهت در نظر بگیرید (من استفاده کردم cosine، اما شما همچنین می توانید استفاده کنید euclidean، یا dot product.)
  • از کدام مدل تعبیه شده استفاده می کنید نیز یک نکته مهم است – من از آن استفاده کردم text-embedding-ada-002 اما گزینه های دیگری مانند text-embedding-3-largeبا text-embedding-3-smallبشر
  • همچنین می توانید از Azure Cosmos DB برای MongoDB Vcore برای جستجوی بردار استفاده کنید.

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

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

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

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