Как векторные базы данных революционизируют поиск по неструктурированным данным в AI-приложениях
Векторные базы данных стали инструментом, революционизирующим поиск по неструктурированным данным в AI-приложениях. Одна из их широко признанных ролей — retrieval-augmented generation (RAG), процесс, который связывает релевантные документы с LLM. Однако их применения и возможности выходят далеко за рамки RAG; они гораздо шире применимы для различных типов неструктурированных данных, т. е. любых данных, которые не соответствуют заранее заданной модели данных, таких как текст, изображения, аудио, молекулы и графы.
На недавнем Brazil Unstructured Data Meetup Frank Liu, руководитель направления искусственного интеллекта и машинного обучения в Zilliz, рассказал о том, как векторные базы данных трансформируют ландшафт поиска по неструктурированным данным в AI-приложениях. Его идеи пролили свет на широкие и значимые возможности этих баз данных.
Посмотрите запись выступления Frank на митапе Следуйте демо
Что такое векторы?
Прежде чем рассматривать векторные базы данных и их роль в AI-приложениях, важно понять, что такое векторы, поскольку они являются строительными блоками векторных баз данных. Вектор — это список чисел, который кодирует информацию таким образом, чтобы компьютеры могли ее обрабатывать. Представьте, что у вас есть изображение, как показано ниже:
Рис. 1 — Изображение, представленное в векторном формате
Для вас это красивый цветок, но для компьютера это изображение должно быть преобразовано в формат, который он может понять. Именно здесь в игру вступают векторные эмбеддинги.
Изображение цветка выше преобразуется в векторный эмбеддинг — структурированный массив чисел. Каждое число в векторе представляет определенную характеристику изображения, такую как цвет, текстура или форма. Комбинация этих чисел обеспечивает компактное и эффективное представление изображения, которое компьютер может использовать для различных задач, таких как поиск похожих изображений, категоризация объектов или даже генерация новых изображений. Вот визуализация того, как векторные эмбеддинги генерируются и сохраняются в векторной базе данных, такой как Milvus.
Рис. 2 — Процесс генерации и хранения векторных эмбеддингов
Процесс начинается с базы знаний, содержащей различные типы данных. Затем данные обрабатываются embedding-моделями, которые преобразуют их в векторы. Наконец, векторы сохраняются в векторной базе данных, такой как Milvus, готовые к извлечению.
Эмбеддинг данных не ограничивается изображениями. Текст, аудио и даже более сложные типы данных, такие как молекулы и графы, могут быть преобразованы в векторные эмбеддинги. Представляя данные в виде векторов, мы можем использовать возможности векторных баз данных для выполнения эффективного и точного поиска.
Давайте посмотрим, как векторные базы данных используются в разных областях.
Различные варианты использования на базе векторных баз данных
Векторные базы данных трансформируют то, как мы обрабатываем и ищем неструктурированные данные в множестве приложений. От расширения возможностей AI-систем до создания более эффективных рекомендаций — возможности обширны и значимы. Давайте перейдем к некоторым конкретным вариантам использования, основанным на векторных базах данных.
Retrieval-Augmented Generation (RAG)
Векторные базы данных трансформируют RAG, обеспечивая более эффективное и семантически значимое извлечение релевантной информации. Традиционные методы поиска по ключевым словам часто оказываются недостаточными при работе со сложными запросами или тонкими контекстами. Векторные базы данных решают это ограничение, храня и осуществляя поиск данных на основе семантического сходства, а не точных совпадений.
В RAG документы преобразуются в высокоразмерные векторы, которые отражают их семантический смысл. Когда поступает запрос, он также преобразуется в вектор, и векторная база данных быстро находит наиболее семантически похожие документы. Такой подход обеспечивает более тонкий и контекстно-ориентированный поиск информации, что крайне важно для генерации точных и релевантных ответов.
Рассмотрим чат-бота службы поддержки клиентов для технологической компании. Когда пользователь спрашивает: «Как устранить проблему с моим устройством, которое не включается?» векторная база данных может извлечь релевантные документы, даже если они не содержат именно этих слов. Она может найти информацию о проблемах с питанием, проблемах с батареей и общих шагах по устранению неполадок. Затем LLM использует эту извлеченную информацию для генерации комплексного и контекстуально релевантного ответа, значительно повышая качество поддержки клиентов.
Рекомендательная система
Векторные базы данных революционизируют рекомендательные системы, обеспечивая более сложные и эффективные вычисления сходства. Традиционные рекомендательные системы часто сталкиваются с проблемой «холодного старта» и могут быть вычислительно затратными при работе с большими наборами данных. Векторные базы данных решают эти проблемы, позволяя выполнять быстрый приближенный поиск ближайших соседей в высокоразмерных пространствах.
В рекомендательной системе на базе векторной базы данных и пользователи, и элементы представлены в виде векторов в общем пространстве embeddings. Эти embeddings отражают сложные характеристики и предпочтения, обеспечивая более тонкие рекомендации. Векторная база данных может быстро находить похожих пользователей или элементы, обеспечивая персонализацию в реальном времени даже при работе с огромными наборами данных.
Например, музыкальный стриминговый сервис вроде Spotify использует векторные базы данных для работы своего рекомендательного механизма. Каждая песня представлена в виде вектора, отражающего различные атрибуты, такие как жанр, темп, настроение и паттерны прослушивания. Пользовательские предпочтения также кодируются в виде векторов. Когда пользователь слушает новую песню, система может быстро найти похожие песни в векторном пространстве, позволяя открывать новую музыку, соответствующую вкусу пользователя, даже если она принадлежит незнакомому исполнителю или жанру.
Поиск молекулярного сходства
Векторные базы данных преобразуют поиск молекулярного сходства в разработке лекарств, обеспечивая более эффективную и точную идентификацию похожих соединений. Традиционные методы часто полагаются на сходство 2D-структур, из-за чего могут упускать важные сходства 3D-конформаций или связи функциональных групп.
С помощью векторных баз данных изображения молекул представляются как высокоразмерные векторы, отражающие сложные структурные и химические свойства. Это позволяет исследователям искать молекулы со схожими свойствами или потенциальной биологической активностью, даже если их 2D-структуры выглядят по-разному. Скорость векторных баз данных также позволяет быстро проводить скрининг огромных химических библиотек.
Возьмем пример фармацевтической компании, ищущей новых кандидатов в антибиотики. У них есть известная молекула антибиотика, которая хорошо работает, но имеет серьезные побочные эффекты. Используя векторную базу данных, они могут быстро выполнить поиск по миллионам соединений, чтобы найти молекулы со схожими антибактериальными свойствами, но потенциально с другим профилем побочных эффектов. Векторное представление может отражать такие признаки, как распределение заряда, потенциальные сайты связывания и 3D-форма, позволяя обнаруживать структурно разнообразные, но функционально похожие молекулы, которые традиционный поиск сходства 2D-структур мог бы упустить.
Мультимодальный поиск сходства
Векторные базы данных революционизируют мультимодальный поиск, предоставляя единый способ представления и поиска по разным типам данных (текст, изображения, аудио и т. д.). Традиционные поисковые системы часто испытывают трудности с кросс-модальными запросами или поиском связей между разными типами данных.
В мультимодальной системе на базе векторной базы данных все типы данных проецируются в общее высокоразмерное пространство, где можно вычислять сходства независимо от исходного типа данных. Это обеспечивает более гибкие и мощные возможности поиска, позволяя находить связанный контент в разных модальностях.
Например, платформа электронной коммерции реализует мультимодальную поисковую систему с использованием векторных баз данных. Пользователь может загрузить изображение предмета мебели, который ему нравится, и предоставить текстовое описание желаемого цвета и материала. Система преобразует и изображение, и текст в векторы в общем пространстве. Затем она выполняет поиск в векторной базе данных, чтобы найти товары, соответствующие как визуальному стилю с изображения, так и конкретным атрибутам из текстового описания. Это позволяет пользователям находить именно то, что они ищут, даже если они не могут полностью выразить это одними словами, значительно улучшая процесс покупок.
Это лишь несколько сценариев использования, которые революционизируются векторными базами данных. Фрэнк поделился следующим слайдом с еще большим количеством сценариев использования.
Рис. 3 — сценарии использования векторных баз данных
Приведенный выше список не является исчерпывающим. Это лишь представление того, что возможно, когда речь идет об улучшении поиска данных в AI-приложениях с помощью векторных баз данных.
Поскольку теперь вы понимаете важность векторных баз данных в различных областях. Давайте реализуем один из сценариев использования, чтобы вы могли увидеть их в действии. Мы будем использовать Milvus, поскольку это самая популярная векторная база данных с точки зрения звезд на GitHub.
Реализация мультимодальной системы поиска по сходству с использованием Milvus, Radient, ImageBind и Meta-Chameleon-7b
Чтобы реализовать мультимодальную систему поиска по сходству с использованием указанных выше инструментов. Вам нужно установить их в своем окружении и импортировать.
Настройка вашего окружения
Начните с установки необходимых библиотек и загрузки нужных моделей.
!pip install -U radient
!pip install -U yt-dlp
!pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
!git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
Вот что делает каждая из приведенных выше библиотек:
Radient: Создает и выполняет рабочие процессы для обработки и анализа мультимодальных данных, интегрируя различные этапы обработки данных.
yt-dlp: Инструмент командной строки для загрузки видео с YouTube. В этой статье мы будем использовать это видео из pre-show Google.
PyMilvus: Python SDK для взаимодействия с векторной базой данных Milvus и Milvus lite, обеспечивающий эффективный поиск по сходству и извлечение крупномасштабных данных.
Chameleon: Визуально-языковая модель, разработанная Meta AI, способная понимать и генерировать текст на основе визуальных входных данных, полезная для интеграции мультимодальных входных данных.
Meta-Chameleon-7b: Конкретная модель из серии Chameleon, предназначенная для продвинутых визуально-языковых задач, предоставляющая контекстно-ориентированные ответы за счет интеграции визуальных и текстовых данных.
ImageBind: Мультимодальная модель эмбеддингов.
После установки библиотек нам нужно импортировать их в ваш код, чтобы иметь возможность использовать их функции.
from pathlib import Path
from radient import make_operator
from radient import Workflow
Обратите внимание, что мы импортируем только radient. Это потому, что Radient обрабатывает интеграцию и использование модели эмбеддингов и PyMilvus в своих рабочих процессах. Поэтому нам не нужно импортировать их вручную.
Функция make_operator позволяет нам создавать различные операторы, которые будут служить строительными блоками нашего рабочего процесса. Класс Workflow объединит эти операторы в логическую последовательность.
После импортов вы готовы реализовать мультимодальную систему поиска по сходству.
Создание операторов
Начните с указания конкретных задач, которые будет выполнять рабочий процесс.
path = Path('/content/google.mp4') // pass the youtube downloaded video path here
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
Давайте подробно разберем каждый оператор:
read: Это операторsource, который считывает локальный видеофайл. Он принимает путь к файлу в качестве параметра и отвечает за загрузку видеоданных в наш рабочий процесс.demux: Это операторtransform, который демультиплексирует (разделяет) видео на кадры с интервалом 5,8 секунды. Этот шаг крайне важен для разбиения непрерывного видеопотока на отдельные изображения, которые можно обрабатывать по отдельности.vectorize: Этот оператор использует модельImageBindдля создания векторных эмбеддингов для мультимодальных данных. ImageBind — это мощная модель, которая может создавать унифицированные эмбеддинги для разных модальностей (таких как изображения, текст и аудио), позволяя нам представлять кадры видео в многомерном векторном пространстве.store: Это оператор-приемник, который вставляет векторизованные данные в Milvus lite. Облегченная версия Milvus
После создания операторов следующим шагом будет создание рабочего процесса с их использованием.
Построение рабочего процесса вставки
Далее мы строим рабочий процесс для вставки обработанных видеоданных в базу данных Milvus:
insert_wf = (Workflow()
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
Этот рабочий процесс начинается со считывания видеофайла, а затем демультиплексирует его на отдельные кадры. Каждый кадр затем векторизуется с помощью модели ImageBind. Полученные векторы сохраняются в базе данных Milvus.
Если все выполняется гладко, вы должны увидеть вывод, похожий на приведенный ниже:
Рис. 4 — Результаты операции вставки
Вывод показывает подтверждение того, что ваше видео было обработано и вставлено в Milvus. Он показывает результат операции вставки, указывая количество вставленных записей, их ID и вычислительную стоимость.
Настройка рабочего процесса поиска
После вставки наших данных нам нужно настроить рабочий процесс для поиска. Этот рабочий процесс позволит нам находить релевантные кадры видео на основе текстовых запросов:
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation": "search", "output_fields": None})
search_wf = (Workflow()
.add(vectorize, name="vectorize")
.add(search, name="search")
)
Этот рабочий процесс поиска состоит из двух основных шагов:
Оператор
vectorizeпринимает текстовый ввод и преобразует его в векторный эмбеддинг с помощью ImageBind. Это позволяет нам представлять наш текстовый запрос в том же векторном пространстве, что и кадры нашего видео.Затем оператор
searchиспользует этот вектор для выполнения поиска по сходству в базе данных Milvus, находя кадры видео, наиболее похожие на наш запрос.
Поскольку у нас есть рабочий процесс поиска, давайте выполним поиск.
Выполнение мультимодального поиска
Это мультимодальный поиск, поскольку мы используем текст для поиска по видео. Если точнее, мы ищем по кадрам видео.
prompt = "What was unusual about the coffee mug?"
search_wf(data=prompt)
search_vars = {
"limit": 1, # top-k limit
"output_fields": ["*"] # output fields
}
results = search_wf(
extra_vars={"search": search_vars},
data=prompt
)
results[0][0][0]["entity"]["data"]
Здесь мы определяем поисковый запрос, спрашивающий о необычной кофейной кружке. Словарь search_vars указывает, что нам нужен топ-1 результат и все поля вывода.
Затем мы выполняем поисковый workflow с этими входными данными. Workflow векторизует наш текстовый запрос, выполняет поиск похожих векторов в Milvus и возвращает результаты. Вложенная индексация [0][0][0] получает доступ к первому (и в данном случае единственному) результату поиска, а ["entity"]["data"] извлекает фактические данные, связанные с этим результатом.
Приведенный выше код возвращает путь к кадру, который лучше всего соответствует нашему запросу.
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
Давайте визуализируем этот возвращенный кадр, чтобы увидеть, что необычного в кружке.
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
Этот код открывает файл изображения, соответствующий нашему результату поиска, с помощью PIL (Python Imaging Library) и отображает его с использованием matplotlib. Это визуальное представление помогает нам понять, что система нашла в ответ на наш запрос о необычной кофейной кружке.
Вот результат:
Рис. 5 — Человек, выходящий из кружки
Как вы можете видеть, этот кадр показывает необычную кружку, поскольку в обычную кружку невозможно поместить человека. Необычное действие заключается в том, что из кружки выходит человек.
Использование Meta-Chameleon-7b для описания изображений
Чтобы еще больше улучшить нашу мультимодальную поисковую систему, мы можем использовать модель Meta-Chameleon-7b для генерации описания изображения:
from chameleon.inference.chameleon import ChameleonInferenceModel
import os
# Verify the file path and existence
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f"Image path: {image_path}")
print(f"File exists: {os.path.exists(image_path)}")
print(f"File size: {os.path.getsize(image_path)} bytes")
# Initialize the model
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/",
"./meta-chameleon-7b/tokenizer/text_tokenizer.json",
"./meta-chameleon-7b/tokenizer/vqgan.yaml",
"./meta-chameleon-7b/tokenizer/vqgan.ckpt",
)
try:
tokens = model.generate(
prompt_ui=[
{"type": "image", "value": f"file:{image_path}"}, # Remove the space after 'file:'
{"type": "text", "value": prompt},
{"type": "sentinel", "value": "<END-OF-TURN>"},
]
)
result = model.decode_text(tokens)[0]
print("Generated description:")
print(result)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
Этот код инициализирует модель Meta-Chameleon-7b, vision-language модель, способную понимать и описывать изображения в контексте. Мы передаем ей как изображение, так и наш исходный текстовый запрос, позволяя ей генерировать описание, релевантное нашему запросу.
Метод generate принимает список входных данных, включая путь к файлу изображения, наш текстовый запрос и sentinel-токен для обозначения конца входных данных. Затем модель генерирует последовательность токенов, которую мы декодируем в человекочитаемый текст. Вот пример того, как должен выглядеть вывод:
Рис. 6 — Результат описания изображения с использованием vision-language модели
Эта реализация демонстрирует, как векторные базы данных, такие как Milvus, могут быть интегрированы в более крупные AI-системы, обеспечивая эффективный поиск по сходству в разных модальностях.
Заключение
Фрэнк хорошо показал нам, как векторные базы данных стали преобразующей технологией в области ИИ и машинного обучения, особенно для обработки неструктурированных данных. Как было продемонстрировано, их применения выходят далеко за рамки простых систем генерации с дополненным поиском (RAG), революционизируя различные области, включая поддержку клиентов, рекомендательные системы, разработку лекарств и мультимодальный поиск. Продолжайте и реализуйте ещё более сложные ИИ-приложения на базе векторных баз данных. Вот несколько ресурсов для справки.
Для более подробного понимания, включая историю эмбеддингов, посмотрите запись доклада на митапе.
Дополнительные ресурсы
Читать далее

A Developer's Guide to Exploring Milvus 2.6 Features on Zilliz Cloud
Milvus 2.6 marks a shift from “vector search + glue code” to a more advanced retrieval engine, and it is now Generally Available (GA) on Zilliz Cloud (a managed Milvus service).

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.


