🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Мультимодальный семантический поиск с использованием изображений и текста

Мультимодальный семантический поиск с использованием изображений и текста

  • Engineering
February 03, 2025
Stefan Webb

Как люди, мы воспринимаем мир с помощью наших органов чувств. Мы слышим звуки, видим изображения, видео и текст, часто накладывая их друг на друга. Мы понимаем мир через эти многочисленные модальности и взаимосвязь между ними. Чтобы искусственный интеллект действительно соответствовал или превосходил человеческие возможности, он должен развить в себе такую же способность понимать мир через несколько линз одновременно.

В этом посте и сопровождающих его видео (скоро будет) и блокноте мы расскажем о недавнем прорыве в моделях, которые могут обрабатывать как текст, так и изображения вместе. Мы продемонстрируем это на примере создания приложения для семантического поиска, которое выходит за рамки простого подбора ключевых слов - оно понимает взаимосвязь между тем, что запрашивают пользователи, и визуальным контентом, который они ищут.

Что делает этот проект особенно интересным, так это то, что он полностью построен с использованием инструментов с открытым исходным кодом: векторной базы данных Milvus, библиотек машинного обучения HuggingFace и набора данных отзывов покупателей Amazon. Примечательно, что всего десять лет назад для создания подобного потребовались бы значительные собственные ресурсы. Сегодня эти мощные компоненты находятся в свободном доступе и могут быть объединены инновационными способами всеми, у кого есть любопытство к экспериментам.

Наше мультимодальное поисковое приложение относится к типу retrieve-and-rerank. Если вы знакомы с retrieval-augmented-generation (RAG), это очень похоже, только конечным результатом является список изображений, которые были проранжированы с помощью большой языковой модели зрения (LLVM). Поисковый запрос пользователя содержит как текст, так и изображение, а целью является набор изображений, проиндексированных в векторной базе данных. Архитектура состоит из трех этапов - индексирования, поиска и переранжирования (сродни "генерации"), которые мы кратко излагаем по очереди.

Индексирование

Наше поисковое приложение должно иметь что-то для поиска. В нашем случае мы используем небольшое подмножество набора данных "Amazon Reviews 2023", который содержит текст и изображения из отзывов покупателей Amazon по всем типам товаров. Вы можете представить, что подобный семантический поиск, который мы создаем, будет полезным дополнением к сайту электронной коммерции. Мы используем 900 изображений и отбрасываем текст, хотя заметим, что этот блокнот может масштабироваться до production-размера при правильном развертывании базы данных и выводов.

Первая часть "магии" в нашем конвейере - это выбор модели встраивания. Мы используем недавно разработанную мультимодальную модель под названием Visualized BGE, которая способна встраивать текст и изображения вместе или по отдельности в одно пространство с помощью единой модели, в которой близкие точки семантически схожи. В последнее время были разработаны и другие подобные модели, например MagicLens.

На рисунке выше показано: вложение для [изображения льва сбоку] плюс текст "вид спереди" близко к вложению для [изображения льва спереди] без текста. Одна и та же модель используется как для входов с текстом и изображением, так и для входов только с изображением (а также для входов только с текстом). Таким образом, модель способна понять намерения пользователя в том, как текст запроса связан с изображением запроса.

Мы встраиваем 900 изображений товаров без соответствующего текста и храним их в векторной базе данных с помощью Milvus.

Поиск

Теперь, когда наша база данных создана, мы можем отправить запрос пользователю. Представьте, что пользователь пришел с запросом: "чехол для телефона с этим" плюс [изображение леопарда]. То есть он ищет чехлы для телефонов с принтом в виде шкуры леопарда.

Обратите внимание, что в тексте запроса пользователя было написано "это", а не "шкура леопарда". Наша модель встраивания должна быть способна связать слово "это" с тем, к чему оно относится, что является впечатляющим достижением, учитывая, что предыдущая итерация моделей не могла обрабатывать такие открытые инструкции. В статье MagicLens приводятся другие примеры.

Мы вставляем текст запроса и изображение вместе и выполняем поиск по сходству в нашей векторной базе данных, возвращая девять лучших совпадений. Результаты показаны на рисунке выше, вместе с запрошенным изображением леопарда. Оказывается, что первое попавшееся изображение не является наиболее релевантным запросу. Наиболее релевантным является седьмой результат - чехол для телефона с принтом леопардовой шкуры.

Поколение

Похоже, что наш поиск не удался, поскольку верхний результат не является наиболее релевантным. Однако мы можем исправить это с помощью повторного ранжирования. Вы можете быть знакомы с повторным ранжированием найденных элементов как важным шагом во многих конвейерах RAG. Мы используем Phi-3 Vision в качестве модели реранжировщика.

Сначала мы просим LLVM сгенерировать подпись к изображению запроса. LLVM выдает:

"На изображении крупным планом показана морда леопарда с акцентом на его пятнистый мех и зеленые глаза".

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

Результат визуализирован на рисунке выше - наиболее релевантный элемент теперь занимает первое место, а причина выбора такова:

"Наиболее подходящим является товар с леопардовой тематикой, который соответствует запросу пользователя о чехле для телефона с аналогичной тематикой".

Наш LLVM-реранжировщик смог обеспечить понимание изображений и текста и улучшить релевантность результатов поиска. Интересным артефактом является то, что реранжировщик выдал только восемь результатов и отбросил один, что подчеркивает необходимость защитных ограждений и структурированного вывода.

Резюме

В этом посте, а также в сопровождающем его видео (скоро будет) и блокноте мы создали приложение для мультимодального семантического поиска по тексту и изображениям. Модель встраивания могла встраивать текст и изображения вместе или по отдельности в одно и то же пространство, а модель основы могла вводить текст и изображение и генерировать текст в ответ. Важно отметить, что модель встраивания смогла связать намерение пользователя, выраженное в открытой инструкции, с изображением запроса и таким образом указать, как пользователь хочет, чтобы результаты относились к введенному изображению.

Это лишь часть того, что нас ждет в ближайшем будущем. Мы увидим множество применений мультимодального поиска, мультимодального понимания и рассуждения и так далее в различных модальностях: изображения, видео, аудио, молекулы, социальные сети, табличные данные, временные ряды - потенциал безграничен.

И в основе этих систем лежит векторная база данных, которая является внешней "памятью" системы. Milvus - отличный выбор для этой цели. Он имеет открытый исходный код, полнофункциональный (см. статью о полнотекстовом поиске в Milvus 2.5) и эффективно масштабируется до миллиардов векторов с веб-трафиком и задержкой менее 100 мс. Узнайте больше в документации Milvus, присоединяйтесь к нашему сообществу Discord и надеемся увидеть вас на нашей следующей встрече по неструктурированным данным. До встречи!

Ресурсы

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Продолжить чтение