- PVSM.RU - https://www.pvsm.ru -
Недавно 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 позволяет вам эффективно хранить, индексировать и запрашивать многомерные векторные данные непосредственно в вашем экземпляре Cosmos DB. Как транзакционные данные, так и векторные вложения хранятся внутри Cosmos DB вместе. Это устраняет необходимость переноса данных в отдельные векторные хранилища и дополнительных расходов. Работает в 2 этапа:
Чтобы выполнить поиск по сходству векторов по свойствам векторов в ваших документах, вам сначала нужно создать индекс вектора . Этот индекс позволяет эффективно выполнять запросы на основе характеристик вектора.
После того как ваши данные будут вставлены в базу данных Azure Cosmos DB для MongoDB vCore и коллекцию, а ваш векторный индекс будет определен, вы сможете выполнить поиск по сходству векторов по целевому вектору запроса.
Векторный поиск, также известный как поиск по сходству или поиск ближайшего соседа, — это метод, используемый для поиска объектов, похожих на заданный объект запроса в многомерном пространстве. В отличие от традиционных методов поиска, которые полагаются на точные совпадения, векторный поиск использует концепцию расстояния между точками в векторном пространстве для поиска похожих элементов. Это особенно полезно для неструктурированных данных, таких как изображения, аудио и текстовые вставки.
Эффективный поиск по сходству : обеспечивает быстрый и эффективный поиск по многомерным векторам, что делает его идеальным для рекомендательных систем, поиска изображений и задач обработки естественного языка.
Масштабируемость : использует масштабируемость Cosmos DB для обработки больших наборов данных и больших объемов запросов.
Гибкость : легко интегрируется с существующими API MongoDB, позволяя разработчикам использовать знакомые инструменты и библиотеки.
Рекомендательные системы : предоставление персонализированных рекомендаций на основе поведения и предпочтений пользователя.
Поиск изображений и видео : поиск изображений или видео, визуально похожих на заданные входные данные.
Обработка естественного языка : поиск документов или фрагментов текста, семантически схожих с текстом запроса.
Обнаружение аномалий : выявление необычных закономерностей в многомерных данных
Учетная запись Azure с активной подпиской
Azure Cosmos DB для MongoDB vCore, настроенный для вашей рабочей нагрузки
Создайте учетную запись Cosmos DB :
Перейдите на портал Azure.
Найдите Azure Cosmos DB и выберите опцию MongoDB (vCore) .
Следуйте инструкциям, чтобы создать учетную запись Cosmos DB.
Настройте базу данных :
Создайте базу данных и коллекцию, где вы будете хранить свои векторы.
Убедитесь, что коллекция соответствующим образом индексирована для поддержки векторных операций. В частности, вам нужно будет создать индекс для векторного поля.
Вставьте векторы в коллекцию :
Векторы можно хранить в виде массивов чисел в документах MongoDB.
Настройте свой проект :
Создайте новый проект Python (например, с помощью Visual Studio или Visual Studio Code).
Импорт необходимых модулей MongoDB и Azure/OpenAI
Подключитесь к базе данных с помощью клиента Mongo.
Вставка данных :
Приведенный ниже код показывает, как вставить order
данные из локального файла JSON [1] и вставить внедрения в 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 для отслеживания и анализа шаблонов использования.
Автоматическое масштабирование : настройте автоматическое масштабирование для эффективной обработки пиковых нагрузок без избыточного выделения ресурсов.
Разделение данных : разделяйте данные [2] соответствующим образом, чтобы обеспечить эффективные запросы и хранение.
Введение функциональности векторного поиска в Azure Cosmos DB для MongoDB vCore открывает новые возможности для создания расширенных приложений искусственного интеллекта и машинного обучения [3] . Используя эту функцию, разработчики могут реализовать эффективный поиск по сходству, что позволяет использовать широкий спектр приложений от систем рекомендаций до обнаружения аномалий. С предоставленными примерами кода Python вы можете начать интеграцию векторного поиска в свои приложения на основе Cosmos DB.
Более подробную документацию можно найти в документации Azure Cosmos DB [4] .
Напоминаю, что каждый может следить за новостями в мире ИИ в моем канале [5]
Автор: sanior1231
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/393665
Ссылки в тексте:
[1] JSON: https://dzone.com/refcardz/core-json
[2] разделяйте данные: https://dzone.com/articles/evolution-of-data-partitioning-traditional-vs-mode
[3] машинного обучения: https://dzone.com/refcardz/machine-learning-predictive
[4] в документации Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/introduction
[5] моем канале: https://t.me/+F9WueGXYsohjZjIy
[6] Источник: https://habr.com/ru/articles/836456/?utm_source=habrahabr&utm_medium=rss&utm_campaign=836456
Нажмите здесь для печати.