В этой статье описывается встроенная функция векторного поиска в Cosmos DB для MongoDB vCore, а также приводится краткое руководство по ее исследованию с использованием кода Python.
Недавно Microsoft объявила о внедрении функциональности векторного поиска в Azure Cosmos DB для MongoDB vCore. Эта функция расширяет возможности Cosmos DB, позволяя разработчикам выполнять сложные поиски по сходству в многомерных данных, что особенно полезно в приложениях на основе RAG , системах рекомендаций, поиске изображений и документов и т. д.
В этой статье я рассмотрю детали этой новой функциональности, варианты ее использования и предоставим пример реализации с использованием Python.
Что такое векторный магазин?
Векторные хранилища (или векторные базы данных ) предназначены для хранения и управления векторными вложениями . Эти вложения являются математическими представлениями данных в многомерном пространстве. Каждое измерение соответствует свойству данных, и для представления сложных данных могут использоваться десятки тысяч измерений. Например, слова, фразы, целые документы, изображения, аудио и другие типы данных могут быть векторизованы. Проще говоря, векторные вложения — это список чисел, которые могут представлять внутри многомерного пространства любые сложные данные.
Пример
Pen: [0.6715,0.5562,0.3566,0.9787]
Теперь мы можем представить ручку внутри многомерного пространства, а затем использовать алгоритмы векторного поиска для выполнения поиска по сходству и извлечения наиболее совпадающих элементов.
Как работает векторный индекс?
В векторном хранилище алгоритмы векторного поиска используются для индексации и запроса вложений. Векторная индексация — это метод, используемый в машинном обучении и анализе данных для эффективного поиска и извлечения информации из больших наборов данных. Некоторые известные алгоритмы включают:
-
Плоская индексация
-
Иерархический навигационный малый мир (HNSW)
-
Индексы инвертированного файла (IVF)
-
Индексы хеширования с учетом локальности (LSH)
Векторный поиск позволяет находить похожие элементы на основе их характеристик данных, а не точных совпадений в поле свойств. Это полезно для таких приложений, как:
-
Поиск похожего текста
-
Поиск связанных изображений
-
Давать рекомендации
-
Обнаружение аномалий
Интегрированная векторная база данных в Azure Cosmos DB для MongoDB vCore
Интегрированная векторная база данных в Azure Cosmos DB для MongoDB vCore позволяет вам эффективно хранить, индексировать и запрашивать многомерные векторные данные непосредственно в вашем экземпляре Cosmos DB. Как транзакционные данные, так и векторные вложения хранятся внутри Cosmos DB вместе. Это устраняет необходимость переноса данных в отдельные векторные хранилища и дополнительных расходов. Работает в 2 этапа:
1. Создание векторного индекса
Чтобы выполнить поиск по сходству векторов по свойствам векторов в ваших документах, вам сначала нужно создать индекс вектора . Этот индекс позволяет эффективно выполнять запросы на основе характеристик вектора.
2. Векторный поиск
После того как ваши данные будут вставлены в базу данных Azure Cosmos DB для MongoDB vCore и коллекцию, а ваш векторный индекс будет определен, вы сможете выполнить поиск по сходству векторов по целевому вектору запроса.
Что такое векторный поиск?
Векторный поиск, также известный как поиск по сходству или поиск ближайшего соседа, — это метод, используемый для поиска объектов, похожих на заданный объект запроса в многомерном пространстве. В отличие от традиционных методов поиска, которые полагаются на точные совпадения, векторный поиск использует концепцию расстояния между точками в векторном пространстве для поиска похожих элементов. Это особенно полезно для неструктурированных данных, таких как изображения, аудио и текстовые вставки.
Преимущества векторного поиска в Cosmos DB
-
Эффективный поиск по сходству : обеспечивает быстрый и эффективный поиск по многомерным векторам, что делает его идеальным для рекомендательных систем, поиска изображений и задач обработки естественного языка.
-
Масштабируемость : использует масштабируемость Cosmos DB для обработки больших наборов данных и больших объемов запросов.
-
Гибкость : легко интегрируется с существующими API MongoDB, позволяя разработчикам использовать знакомые инструменты и библиотеки.
Варианты использования
-
Рекомендательные системы : предоставление персонализированных рекомендаций на основе поведения и предпочтений пользователя.
-
Поиск изображений и видео : поиск изображений или видео, визуально похожих на заданные входные данные.
-
Обработка естественного языка : поиск документов или фрагментов текста, семантически схожих с текстом запроса.
-
Обнаружение аномалий : выявление необычных закономерностей в многомерных данных
Настройка поиска векторов в Cosmos DB
Предпосылки
-
Учетная запись Azure с активной подпиской
-
Azure Cosmos DB для MongoDB vCore, настроенный для вашей рабочей нагрузки
Подробное пошаговое руководство и пример кода, написанного на Python
-
Создайте учетную запись Cosmos DB :
-
Перейдите на портал Azure.
-
Найдите Azure Cosmos DB и выберите опцию MongoDB (vCore) .
-
Следуйте инструкциям, чтобы создать учетную запись Cosmos DB.
-
-
Настройте базу данных :
-
Создайте базу данных и коллекцию, где вы будете хранить свои векторы.
-
Убедитесь, что коллекция соответствующим образом индексирована для поддержки векторных операций. В частности, вам нужно будет создать индекс для векторного поля.
-
-
Вставьте векторы в коллекцию :
-
Векторы можно хранить в виде массивов чисел в документах MongoDB.
-
-
Настройте свой проект :
-
Создайте новый проект Python (например, с помощью Visual Studio или Visual Studio Code).
-
Импорт необходимых модулей MongoDB и Azure/OpenAI
-
-
Подключитесь к базе данных с помощью клиента Mongo.
-
Вставка данных :
-
Приведенный ниже код показывает, как вставить
order
данные из локального файла JSON и вставить внедрения вcontentVector
поле.
-
-
Генерация векторных вложений с использованием открытого
getEmbeddings()
метода искусственного интеллекта.
Вот полный код для справки:
-
JavaScript
1
const { MongoClient } = require ( 'mongodb' );
2
const { OpenAIClient , AzureKeyCredential } = require ( "@azure/openai" );
3
4
// Настраиваем клиент MongoDB
5
const dbClient = new MongoClient ( process.env.AZURE_COSMOSDB_CONNECTION_STRING ) ;
6
7
// Настраиваем клиент Azure OpenAI
8
const aoaiClient = new OpenAIClient ( "https://" + process . env . AZURE_OPENAI_API_INSTANCE_NAME + ".openai.azure.com/" ,
9
новый AzureKeyCredential ( process.env.AZURE_OPENAI_API_KEY ) ) ;
10
11
асинхронная функция main () {
12
пытаться {
13
ждем dbClient.connect ( ) ;
14
console.log ( ' Подключено к MongoDB' ) ;
15
const db = dbClient . db ( 'order_db' );
16
17
// Загрузить данные заказа из локального файла JSON
18
console.log ( ' Загрузка данных заказа ' )
19
const orderRawData = "<локальный файл JSON>" ;
20
const orderData = ( ожидание ( ожидание выборки ( orderRawData )). json ()))
21
. карта ( порядок => чистые данные ( порядок ));
22
дождитесь вставкиDataAndGenerateEmbeddings ( db , orderData );
23
24
} поймать ( ошибка ) {
25
console . error ( 'Произошла ошибка:' , error );
26
} окончательно {
27
ждем dbClient . close ();
28
}
29
}
30
31
// Вставляем данные в базу данных и генерируем вложения
32
асинхронная функция insertDataAndGenerateEmbeddings ( db , data ) {
33
const orderCollection = db.collection ( 'orders ' ) ;
34
await orderCollection.deleteMany ( {}) ;
35
var result = await orderCollection . bulkWrite (
36
данные.карта ( асинхронный ( порядок ) = > ( {
37
вставитьОдин : {
38
документ : {
39
... заказ ,
40
contentVector : ожидание generateEmbeddings ( JSON . stringify ( order ))
41
}
42
}
43
}))
44
);
45
console.log ( ` $ { result.indedCount } заказов вставлено` ) ;
46
}
47
48
// Генерация вложений
49
асинхронная функция generateEmbeddings ( текст ) {
50
const embeddings = await aoaiClient . getEmbeddings ( embeddingsDeploymentName , text );
51
await new Promise ( resolve => setTimeout ( resolve , 500 )); // Период отдыха, чтобы избежать ограничения скорости в Azure OpenAI
52
вернуть вложения.данные [ 0 ] .вложение ;
53
}
Примечание. Не забудьте заменить заполнители (строку подключения Cosmos DB, ключ Azure OpenAI и конечную точку) фактическими значениями.
Управление расходами
Для эффективного управления затратами при использовании векторного поиска в Cosmos DB:
-
Оптимизируйте индексы : убедитесь, что индексируются только необходимые поля.
-
Мониторинг использования : используйте Azure Monitor для отслеживания и анализа шаблонов использования.
-
Автоматическое масштабирование : настройте автоматическое масштабирование для эффективной обработки пиковых нагрузок без избыточного выделения ресурсов.
-
Разделение данных : разделяйте данные соответствующим образом, чтобы обеспечить эффективные запросы и хранение.
Заключение
Введение функциональности векторного поиска в Azure Cosmos DB для MongoDB vCore открывает новые возможности для создания расширенных приложений искусственного интеллекта и машинного обучения . Используя эту функцию, разработчики могут реализовать эффективный поиск по сходству, что позволяет использовать широкий спектр приложений от систем рекомендаций до обнаружения аномалий. С предоставленными примерами кода Python вы можете начать интеграцию векторного поиска в свои приложения на основе Cosmos DB.
Более подробную документацию можно найти в документации Azure Cosmos DB .
Напоминаю, что каждый может следить за новостями в мире ИИ в моем канале
Автор: sanior1231