Кратко: Узнайте, как Manticore Search даёт возможность искать изображения по текстовому описанию, совмещая обработку естественного языка и поиск по векторным представлениям. Мы рассмотрим разные пути — от классических методов до современных решений на базе векторного поиска. А если хотите увидеть всё в реальном времени, загляните в наше демо.

Введение

Представьте, что можно найти нужное изображение, просто описав его словами, например: "закат на пляже". Теперь это не фантастика, а реальность. Поиск изображений по тексту объединяет язык и визуальный контент.Традиционные способы (поиск по ключевым словам или ручная разметка) часто бывают неточными и сложными в масштабировании. Современные методы, как решение от Manticore Search, используют семантическое понимание и векторные представления, чтобы выдавать более точные и контекстно-релевантные результаты. Это особенно удобно для интернет-магазинов, медиабиблиотек или сервисов для творческих задач, помогая упростить работу с контентом. Хотите посмотреть, как это работает? Попробуйте наше демо.

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

1. Поиск по ключевым словам

Самый простой метод. Сначала создаём таблицу:

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

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

SELECT * FROM images WHERE MATCH('@tags красное платье');

Или искать по заголовкам и описаниям:

SELECT * FROM images WHERE MATCH('@(title,description) красное платье');

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

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

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

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

При таком подходе все изображения распределяются по заранее определённым категориям. Это даёт более чёткую структуру, чем просто ключевые слова, но ограничивает гибкость, ведь всё жёстко привязано к заранее заданным группам. К тому же придётся вручную решать, куда отнести каждую картинку.

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

Существуют различные модели ИИ, которые могут автоматически генерировать короткие описания (подписи) к изображениям. Хотя такие автоподписи не всегда идеальны для публичного показа, они отлично дополняют поиск по ключевым словам.Неважно, как именно вы структурируете свои данные — через категории или ручную разметку, — всё равно нужно задействовать инструменты полнотекстового поиска, чтобы извлекать информацию по нужным полям.Допустим, вы хотите делать подписи вручную. Тогда процесс может выглядеть так:

1. Добавляем данные с корректно оформленными подписями:

INSERT INTO images (id, auto_caption, indexed_caption, path) VALUES
 (1, 'Человек идёт по пляжу на закате', 'пляж закат человек', '/images/sunset_beach.jpg'),
 (2, 'Красная машина на улице', 'машина красная город', '/images/red_car.jpg');

2. Делаем простой текстовый поиск по полю indexed_caption:

SELECT * FROM images WHERE MATCH('@indexed_caption пляж закат');

3. Используем расширенные операторы для более точного поиска:

-- Поиск по фразе
SELECT * FROM images WHERE MATCH('"красная машина"');

-- Сложные запросы
SELECT * FROM images WHERE MATCH('@indexed_caption (пляж | закат) -ночь');

Как улучшить результаты?

  • Удаляйте стоп-слова из подписей.

  • Настраивайте стемминг, чтобы охватывать разные формы слов.

  • Добавляйте синонимы для популярных терминов.

  • Настраивайте коэффициенты релевантности, чтобы выдача была точнее.

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

SELECT path, WEIGHT() as relevance
FROM images
WHERE MATCH('@indexed_caption закат')
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. Создать таблицу в базе

Подготовим структуру для хранения векторов:

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 и настроить всё под свои нужды: Manticore Image Search Demo. В репозитории — детальные инструкции и примеры скриптов, чтобы вы могли быстро запустить или допилить приложение под себя. Это отличный старт как для тестов, так и для реального продакшна.

Заключение

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

  • Очень точное сопоставление запросов и релевантных изображений.

  • Минимум ручной работы (не нужно везде расставлять теги).

  • Учет семантических связей между словами и картинками.

  • Хорошую масштабируемость при росте числа изображений.

    Хотя поиск по ключевым словам или категоризация иногда тоже бывают полезны, векторный подход на сегодняшний день считается самым современным и эффективным для текстового поиска по изображениям.Не верите на слово? Заходите в наше демо image.manticoresearch.com или смотрите исходники на GitHub: Manticore Image Search Demo.

Комментарии (1)


  1. ENick
    31.12.2024 14:36

    "Семантическое понимание ", извините, а это не одно и то же?