Семантический поиск Codex Pets на YDB: как найти Винни-Пуха в 768 измерениях

Как отыскать персонажа, не называя его имени? В многомерном пространстве, где каждый объект представлен вектором из 768 чисел, запрос «тревожный коричневый медведь из старого мультфильма» приводит к нужному результату, даже если в тексте нет ни одного точного совпадения. Это не магия, а семантически

Семантический поиск Codex Pets на YDB: как найти Винни-Пуха в 768 измерениях

Как отыскать персонажа, не называя его имени? В многомерном пространстве, где каждый объект представлен вектором из 768 чисел, запрос «тревожный коричневый медведь из старого мультфильма» приводит к нужному результату, даже если в тексте нет ни одного точного совпадения. Это не магия, а семантический поиск, реализованный в проекте Codex Pets на базе распределённой СУБД YDB. Разбираем, как это работает и почему такие технологии меняют подход к поиску.

Codex Pets: гибридный поиск на YDB

Codex Pets — это демонстрационный проект, который показывает, как объединить векторный поиск и полнотекстовый поиск в одной базе данных. Идея проста: каждый питомец (персонаж мультфильма) описывается текстом, а его изображение превращается в вектор с помощью нейросети. Когда пользователь вводит запрос, он тоже превращается в вектор, и система ищет ближайших соседей в многомерном пространстве.

В основе лежит YDB — распределённая отказоустойчивая СУБД, которая поддерживает как классические SQL-запросы, так и работу с векторами. В проекте используется гибридный подход: сначала поиск по векторному сходству, затем уточнение по ключевым словам. Это позволяет находить объекты даже тогда, когда точные слова не совпадают, но смысл близок.

Например, в базе есть Винни-Пух — «коричневый медведь, который любит мёд». Запрос «тревожный коричневый медведь из старого мультфильма» не содержит ни одного точного совпадения, но векторное представление запроса оказывается близким к вектору описания Винни-Пуха. Система выдаёт его первым в результатах.

Предыстория и контекст

Семантический поиск — не новая идея. Ещё в 2013 году Google представила алгоритм Hummingbird, который начал учитывать смысл запроса, а не только отдельные слова. Однако долгое время такие технологии оставались уделом крупных корпораций с огромными вычислительными мощностями. Сегодня, благодаря развитию векторных баз данных и open-source моделей, семантический поиск становится доступен каждому разработчику.

Проект Codex Pets появился как демонстрация возможностей YDB в области векторного поиска. YDB — это открытая распределённая СУБД, разработанная в Яндексе. Она поддерживает горизонтальное масштабирование, ACID-транзакции и, что важно, умеет хранить и индексировать векторы. Это позволяет строить гибридные поисковые системы без необходимости использовать отдельные векторные базы данных.

Интересно, что в проекте используются два типа моделей: одна для текста, другая для изображений. Это типичный подход в мультимодальном поиске, когда разные типы данных приводятся к единому векторному пространству. В данном случае оба вектора имеют размерность 768, что позволяет сравнивать их напрямую.

Как работает семантический поиск на YDB?

Когда пользователь вводит запрос, он проходит через ту же модель эмбеддингов, что и текстовые описания питомцев. Полученный вектор сравнивается с векторами всех объектов в базе. Расстояние между векторами (обычно косинусное) показывает, насколько объекты близки по смыслу. Чем меньше расстояние, тем более релевантен результат.

Но векторный поиск не идеален: он может не учитывать редкие имена или специфические термины. Поэтому Codex Pets использует гибридный подход: сначала выполняется векторный поиск, затем результаты фильтруются и ранжируются с учётом полнотекстового поиска по ключевым словам. Это повышает точность и позволяет находить объекты даже при неточных запросах.

В YDB для этого используется специальный индекс, который хранит векторы вместе с метаданными. Запросы выполняются на языке SQL с расширениями для работы с векторами. Например, функция cosinesimilarity вычисляет косинусное расстояние между векторами. Это делает YDB удобной платформой для построения поисковых систем.

Технические подробности: как устроен проект

Проект Codex Pets написан на Python и использует библиотеку ydb для работы с базой данных. Для генерации эмбеддингов текста применяется модель intfloat/multilingual-e5-large — она поддерживает 100 языков и выдаёт векторы размерностью 768. Для изображений используется модель ViT-B/32 от OpenAI (CLIP), которая также даёт векторы той же размерности.

Архитектура проекта включает несколько компонентов: модуль загрузки данных, который читает CSV-файл с описаниями питомцев и изображениями, модуль генерации эмбеддингов, модуль индексации в YDB и веб-интерфейс на Streamlit. Пользователь вводит запрос в текстовое поле, и система возвращает карточки питомцев с фотографиями и описаниями.

Особенность проекта — использование гибридного поиска: сначала выполняется векторный поиск (топ-100 результатов), затем результаты ранжируются с помощью полнотекстового поиска по ключевым словам. Для этого в YDB создаётся таблица с полем embedding типа vector и полнотекстовым индексом по полю description. Запрос к базе выглядит как обычный SQL с добавлением функции vectortopk.

Такой подход позволяет добиться точности, недостижимой при использовании только одного метода. Например, запрос «медведь который любит мёд» найдёт Винни-Пуха, даже если в описании нет слова «мёд», но вектор запроса будет близок к вектору описания.

Кого затронет и как

Семантический поиск на YDB интересен прежде всего разработчикам, которые строят поисковые системы для e-commerce, медиа или социальных сетей. Гибридный подход позволяет улучшить качество поиска без значительных затрат на инфраструктуру. Особенно это актуально для небольших команд, которые не могут позволить себе отдельную векторную базу данных.

Для бизнеса это означает более точное попадание в запросы пользователей, что повышает конверсию и удовлетворённость. Например, в интернет-магазине можно искать товары по описанию: «красное платье для вечеринки» — и система найдёт подходящие варианты, даже если в названии товара нет слова «вечеринка».

В России и СНГ YDB активно используется в Яндексе и других компаниях, поэтому опыт Codex Pets может быть полезен локальным разработчикам. К тому же проект полностью открыт — код доступен на GitHub, а данные можно скачать и запустить демо у себя.

Что будет дальше

Проект Codex Pets — это демонстрация, но она открывает дорогу к более сложным системам. В будущем можно ожидать расширения функциональности: поддержка голосовых запросов, мультимодальный поиск по видео, интеграция с рекомендательными системами. YDB продолжает развиваться, и векторный поиск станет одной из ключевых фич.

Уже сейчас можно попробовать Codex Pets в действии: запустить демо-сервер и поэкспериментировать с запросами. Это отличный способ понять, как работает семантический поиск и какие задачи он может решать. Возможно, вскоре мы увидим подобные технологии в массовых продуктах — от поиска по фото до умных помощников.

Итог

Codex Pets наглядно показывает, что семантический поиск — это не фантастика, а доступная технология, которую можно реализовать на открытом стеке. Гибридный подход, сочетающий векторы и ключевые слова, даёт впечатляющие результаты: Винни-Пух находится по описанию, в котором нет ни одного точного слова. Если вы строите поиск или хотите улучшить существующий, стоит присмотреться к YDB и векторным эмбеддингам — возможно, это именно то, что нужно.