⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.
blog-post

Text-to-Image Search with Manticore Search

TL;DR: Узнайте, как Manticore Search позволяет осуществлять поиск по тексту и изображению, сочетая обработку естественного языка с векторным извлечением изображений. Изучите различные подходы, от традиционных методов до продвинутого векторного поиска, и попробуйте нашу демонстрацию поиска по тексту и изображению , чтобы увидеть это в действии.

Введение

Нахождение нужного изображения, описывая его на естественном языке — например, "закат над пляжем" — больше не является лишь видением будущего. Поиск по тексту и изображению делает это возможным, бесшовно соединяя язык с визуальным контентом.

Традиционные методы, такие как сопоставление ключевых слов или ручная разметка, имеют свои ограничения в точности и масштабируемости. Современные подходы, такие как тот, который поддерживается Manticore Search, используют семантическое понимание и векторные эмбеддинги для предоставления более точных и контекстно осведомленных результатов. Независимо от того, создаете ли вы платформу электронной коммерции, управляете медиа-библиотекой или разрабатываете креативный инструмент, поиск по тексту и изображению может упростить взаимодействие пользователей с вашим контентом.

Хотите увидеть это в действии? Попробуйте нашу демонстрацию поиска по тексту и изображению .

Разные подходы к поиску по тексту и изображению

1. Традиционный поиск на основе ключевых слов

Поиск на основе ключевых слов — один из самых простых методов для реализации поиска по тексту и изображению. Для начала вам нужно настроить соответствующую структуру данных:

CREATE TABLE images (
    title text,
    description text,
    tags text,
    path string stored
);

Чтобы это работало эффективно, вам сначала нужно вручную размечать каждое изображение. После разметки вы можете искать, используя запросы, такие как:

SELECT * FROM images WHERE MATCH('@tags red dress');

Или вы также можете искать по заголовку и описанию, которые вы добавили к своим изображениям:

SELECT * FROM images WHERE MATCH('@(title,description) red dress');

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

2. Поиск на основе категоризации

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

Вы должны организовать свои изображения, сортируя их по отдельным категориям самостоятельно. Вот как может выглядеть структура таблицы:

CREATE TABLE images (
    category_id int,
    subcategory_id int,
    attributes json,
    path string stored
);

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

3. Использование Manticore Search с подписями изображений

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

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

Давайте рассмотрим, как может развиваться рабочий процесс, если вы решите реализовать ручное создание подписей:

  1. Вставьте свои данные с правильно отформатированными подписями:
    INSERT INTO images (id, auto_caption, indexed_caption, path) VALUES
        (1, 'A person walking on a beach during sunset', 'beach sunset walking person', '/images/sunset_beach.jpg'),
        (2, 'Red car parked in an urban setting', 'car red urban parking', '/images/red_car.jpg');
    
  2. Выполните базовые текстовые поиски, используя поле indexed_caption:
    SELECT * FROM images WHERE MATCH('@indexed_caption beach sunset');
    
  3. Используйте продвинутые операторы поиска для более точных результатов:
    -- Phrase matching
    SELECT * FROM images WHERE MATCH('"red car"');
    
    -- Boolean operators
    SELECT * FROM images WHERE MATCH('@indexed_caption (beach | sunset) -night');
    

Ключевые моменты для оптимального поиска:

  • Предварительная обработка подписей для удаления стоп-слов
  • Использование стемминга для лучшего сопоставления
  • Учет синонимов для общих терминов
  • Реализация оценки релевантности для лучших результатов

Вы также можете комбинировать полнотекстовый поиск с дополнительными фильтрами:

SELECT path, WEIGHT() as relevance
FROM images
WHERE MATCH('@indexed_caption sunset')
AND category_id = 1
ORDER BY relevance DESC
LIMIT 10;

4. Векторный поиск (рекомендуемый подход)

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

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

Как работает векторный поиск

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

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

Чтобы помочь визуализировать этот процесс, следующая диаграмма иллюстрирует, как текст и изображения преобразуются в эмбеддинги и сопоставляются через Manticore Search:

Диаграмма векторного подхода

Настройка векторного поиска с Manticore

Вот как вы можете реализовать векторный поиск шаг за шагом:

  1. Настройте вашу мультимодальную модель
    Используйте модель, такую как TinyCLIP, облегчённую версию CLIP, чтобы генерировать эмбеддинги для изображений и текста. Загрузите модель и её процессор:
    from transformers import CLIPProcessor, CLIPModel
    clip_model = CLIPModel.from_pretrained("wkcn/TinyCLIP-ViT-61M-32-Text-29M-LAION400M")
    clip_processor = CLIPProcessor.from_pretrained("wkcn/TinyCLIP-ViT-61M-32-Text-29M-LAION400M")
    
  2. Создайте структуру базы данных
    Создайте таблицу в Manticore Search для хранения эмбеддингов:
    CREATE TABLE images (
      id bigint,
      image_path text,
      embeddings float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='COSINE'
    );
    
  3. Создайте и вставьте эмбеддинги
    Обработайте ваши изображения через модель, чтобы создать эмбеддинги и сохранить их в базе данных. Для руководства по реализации этого шага обратитесь к скрипту load-dataset на GitHub . Хотя этот скрипт не предназначен для прямого использования, он служит подробным справочником по созданию эмбеддингов и их вставке в базу данных.
  4. Запрос к базе данных
    $embeddings = $Embed->getImageEmbeddings($image->getPath());
    $query = new Manticoresearch\Query\KnnQuery('embeddings', $embeddings, 10);
    $docs = $client->index('image')->search($query)->get();
    

Преимущества векторного поиска

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

  • Семантическое понимание: Сопоставляет запросы и изображения на основе их смысла, а не точных ключевых слов.
  • Сопоставление визуальных концепций: Точно фиксирует сложные визуальные идеи и согласует их с текстовыми описаниями.
  • Совместимость с естественным языком: Легко обрабатывает запросы на естественном языке, обеспечивая интуитивный поиск.
  • Повышенная точность: Предоставляет самые точные результаты, даже для абстрактных или нюансированных вводов.
  • Масштабируемость: Снижает ручные усилия и без проблем работает с большими наборами данных.

Сравнение подходов

Вот как различные методы работают в реальных сценариях:

ПодходОписаниеТочностьСложность настройкиОбслуживаниеСкорость запроса
На основе ключевых словСопоставляет запросы пользователей с вручную добавленными тегами или метаданными. Просто, но не имеет семантического понимания.НизкаяНизкаяВысокаяБыстрая
На основе категоризацииОрганизует изображения в предопределённые категории и позволяет структурированную фильтрацию.СредняяСредняяВысокаяБыстрая
С использованием подписейИспользует сгенерированные ИИ или вручную созданные подписи для улучшенных возможностей текстового поиска.СредняяВысокаяСредняяБыстрая
На основе векторовИспользует эмбеддинги для семантического поиска, связывая текст и изображения осмысленно.ВысокаяВысокаяНизкаяСредняя

Попробуйте демо на GitHub

Хотите увидеть, как всё это работает вместе? Мы открыли исходный код нашего демо, чтобы вы могли исследовать его и даже создать свою собственную реализацию. Посетите репозиторий на GitHub для полного исходного кода: Manticore Image Search Demo .

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

Заключение

Векторный поиск по тексту к изображению с использованием Manticore Search предлагает значительные преимущества по сравнению с традиционными подходами. Он предоставляет:

  • Высокая точность при сопоставлении запросов пользователей с релевантными изображениями
  • Нет необходимости в ручном тегировании или подписи
  • Лучшее понимание семантических отношений
  • Масштабируемая производительность для растущих коллекций изображений

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

Попробуйте наше демо на image.manticoresearch.com или погрузитесь в исходный код на GitHub: Manticore Image Search Demo .

Image Search Demo

Установить Manticore Search

Установить Manticore Search