Поиск по фото - классическая задача, которую Яндекс с Гуглом решили очень давно, но вот недавно пришлось столкнуться с этим функционалом применительно к поиску конкретного товара и первым в очереди был Ozon. Каково было удивление, когда такой функцию там не оказалось, хотя казалось бы - поиска по фото... Дальше Wildberries: там функция есть, но после пары примеров использования стало ясно, что задача не решается, а поиск по фото с переменным успехом выдается разнообразные предметы кое-как подходящие по цвету и форме.

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

Минусы такой реализации:

для юзера

  • Один и тот же товар на двух картинках будет показывать разную выдачу, обрежьте 30% фотографии для примера. Я уже не говорю о фотографии на столе, в руках, на человеке и т.д.

  • если ты знаешь какие-то конкретные детали этого предмета, очень логично использовать это для фильтрации выдачи (например, материал, или его назначение), а это невозможно

для бизнеса

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

Плюсы:

для юзера

  • Он как-то работает :) можно найти "круглый бежевый пуфик с волнистым рельефом", НО сфотографированный под идеальным светом, нужным углом, стоящий на похожего цвета ламинате

для бизнеса

  • алгоритм понятный, есть множества его реализаций в открытом доступе

  • цена. Поиск по векторам весьма дешево стоит с точки зрения вычислительных мощностей

Какова альтернатива? - Сперва определить конкретный элемент на картинке, который человек хочет купить, и уже этот предмет со своими характеристиками искать на маркетплейсе. Делается это любой мультимодальной (или в простом приближении img2text) моделью, можно взять открытую LLAMA 3.2 или российский GigaChat по API. В качестве доказательства такого подхода мы в Statzilla буквально за 3 часа собрали телеграмм бота. На вход кидаешь картинку, плюс можно добавить какой-то текст, а на выходе ссылки на 4 маркетплейса.

Плюсы:

для юзера

  • более релевантная выдача

  • Переход в категорию товара сразу с фильтрами, причем если иметь доступ к фильтрам на моменте обработки изображения, то можно автоматом их заполнить и вести пользователя сразу на отфильтрованную выдачу

для бизнеса

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

  • качественная продуктовая аналитика по поиску - легко понять в каких категориях эта функция востребована, где ее можно улучшать. И улучшать легко, просто меняя промпт в модели. Мы, для простоты, берем описание из 4-5 слов, если больше, будет точнее, но там уже ограничение классического поиска.

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

Минусы:

для бизнеса

  • Цена. Чтобы так организовать поиск по картинке, нужно не просто построить вектор по картинке, но и скормить это LLM моделе, что при закупке токенов у облачного провайдера обойдется примерно в 1 рубль (для картинки нужно порядка 500-1000 токенов), на собственном железе дешевле, но не принципиально. НО, можно использовать дешевый аналог, например популярный img2text - BLIP, там стоимость можно сократить в несколько раз, что уже близко к стоимости векторизации и поиска схожего вектора, который суммарно обходится примерно в 10 копеек.

  • Работает примерно на секунду дольше стандартного поиска

  • 100% совпадений получить почти невозможно, потому что мы сжимаем целую картинку до нескольких слов запроса с фильтрами. НО и при классическом поиске по фото это сложно, ввиду различного окружения/фона.

Выводы

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

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


  1. noker81
    11.11.2024 20:22

    Ждал больше информации по разработке, а тут просто реклама.


    1. Statzilla Автор
      11.11.2024 20:22

      Так все, что написано в статье, это собственно и есть вся разработка, для этого надо в прямом смысле слово взять фотку, подать ее любой LLM моделе по API и получить подготовленный запрос для подачи его в поисковую строку - все:)


  1. ebogdanov
    11.11.2024 20:22

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

    Но стало интересно: ксли кто из читателей в теме - есть ли статьи со стороны маркетплейсов как у них внутри поиск по фото организован?


  1. LisaTsareva
    11.11.2024 20:22

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


    1. Statzilla Автор
      11.11.2024 20:22

      Ты ищешь по картинке ТОЛЬКО по причине, что понимаешь, нельзя написать "серьга в форме капли на половину по горизонтали из изумруда, а вторая половина из металла, плавная граница разделения" (представили) - а поисковая выдача будет просто пустой!

      Проблема - правильно проиндексировать предмет словами. Продавец на МП в лучшем случае напишет "серьга капля металлическая". А если прогнать через модель все картинки и получить достаточно точное их описание (ограничившись не 5 словами, как мы искусственно обрезали в боте) то ты улучшаешь и весь поиск в целом, и выдачу даешь сразу с фильтрами заполненными, и поиск по картинке делаешь ОЧЕВИДНО работающим, просто потому что описание предмета будет всегда примерно одинаковое.


      1. LisaTsareva
        11.11.2024 20:22

        Понятно, тут сталкивается множество якодзун - как товар может описать покупатель, как его обвешивает продавец, какие фильтры доступны на самой площадке, как разметил картинку бот / ии / кто-то еще. Больнее всего это пока что выглядит на ВБ - причем поиск по картинке у них не такой болезненный, как поиск по кивордам и фильтрам. А лучше всего получается - у алика и google lens. Есть подозрение, что поиск у бота / вб и у алика / гугла строится на разных подходах, но я как простой обыватель рассуждаю.


  1. BLCG
    11.11.2024 20:22

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