Мультимодальный семантический поиск с использованием изображений и текста
Как люди, мы воспринимаем мир с помощью наших органов чувств. Мы слышим звуки, видим изображения, видео и текст, часто накладывая их друг на друга. Мы понимаем мир через эти многочисленные модальности и взаимосвязь между ними. Чтобы искусственный интеллект действительно соответствовал или превосходил человеческие возможности, он должен развить в себе такую же способность понимать мир через несколько линз одновременно.
В этом посте и сопровождающих его видео (скоро будет) и блокноте мы расскажем о недавнем прорыве в моделях, которые могут обрабатывать как текст, так и изображения вместе. Мы продемонстрируем это на примере создания приложения для семантического поиска, которое выходит за рамки простого подбора ключевых слов - оно понимает взаимосвязь между тем, что запрашивают пользователи, и визуальным контентом, который они ищут.
Что делает этот проект особенно интересным, так это то, что он полностью построен с использованием инструментов с открытым исходным кодом: векторной базы данных 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 и надеемся увидеть вас на нашей следующей встрече по неструктурированным данным. До встречи!
Ресурсы
Блокнот: "Мультимодальный поиск с помощью Amazon Reviews и LLVM Reranking".
Видео для разработчиков AWS на Youtube (скоро будет)
Модель встраивания: Визуализированная карта модели BGE
Альтернативная модель встраивания: MagicLens model repo
Документ: "MagicLens: самоконтролируемый поиск изображений с помощью открытых инструкций"
Набор данных: Amazon Reviews 2023
- Индексирование
- Поиск
- Поколение
- Резюме
- Ресурсы
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word