Проверил поиск в 14 интернет-магазинах: больше половины спотыкаются на простых запросах. Как я это чиню

Ввёл „наушнеки“, „памперсы“ и „кросовки“ в поиск 14 интернет-магазинов. Больше половины хотя бы раз ответили „ничего не найдено“ на товар, который у них есть».

Проверил поиск в 14 интернет-магазинах: больше половины спотыкаются на простых запросах. Как я это чиню

Несколько лет назад я впервые открыл отчёт о том, что люди ищут на сайте интернет-магазина. Не в Яндексе — именно в строке поиска на самом сайте. И залип на час.

«Кросовки». «Толстовка» — при том что в каталоге они все называются «худи». «Rjkzcrf» — это «коляска», набранная в английской раскладке. «Чтобы не дуло из окна». «Подарок маме на юбилей».

На большую часть таких запросов сайт отвечал «ничего не найдено». Хотя нужные товары лежали в каталоге. Человек пришёл, сказал, что ему нужно, — и ушёл ни с чем.

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

Проверил поиск в 14 магазинах

Перед тем как писать, я решил посмотреть, как с этим обстоят дела сейчас. Взял 14 интернет-магазинов из пяти ниш: одежда, электроника, товары для дома, детские товары, стройка и инструмент. Среди них есть и большие сети, и магазины поменьше. Названия не привожу — задача не в том, чтобы кого-то пристыдить.

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

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

Никаких хитрых формулировок. Засчитывал, если в выдаче были подходящие товары.

Что получилось:

  • с опечаткой справились 11 магазинов из 14;
  • с раскладкой — 10 из 14;
  • с другим словом — 10 из 14;
  • со всеми пятью запросами — только 6 из 14, и это в основном крупные сети электроники и стройки.
Проверил поиск в 14 интернет-магазинах: больше половины спотыкаются на простых запросах. Как я это чиню

То есть больше половины магазинов теряли покупателя хотя бы на одном из самых обычных запросов. Несколько примеров, которые запомнились:

  • магазин электроники на «наушнеки» ответил «товаров не найдено» — при том что раздел «Наушники» висит у него в меню;
  • детский магазин не нашёл ничего ни по «каляска», ни по «памперсы» — а подгузники и коляски у него есть;
  • магазин посуды не понял «сковародку» и ответил «ничего не найдено»;
  • магазин одежды на «треники» показал пустую страницу, а на «кофту» — пижаму;
  • крупный магазин электроники на «зарядку для телефона» предложил автомобильные держатели.

А если попросить чуть сложнее, начинается совсем весёлое. На запрос «слушать музыку в метро» один магазин техники показал аудиодиски с романсами и музыкальный центр. На «чтобы не дуло из окна» строительный магазин первым предложил купить новое окно за 4 250 рублей.

Это не провал конкретных магазинов. Так устроен обычный поиск.

Почему обычный поиск не справляется

Стандартная строка поиска устроена просто: берёт слова из запроса и ищет их в названиях и описаниях товаров. Совпало — показала. Нет — «ничего не найдено».

Пока покупатель пишет так же, как назван товар, всё хорошо. Но люди пишут по-своему:

  • с ошибками — «каляска», «перфаратор»;
  • в другой раскладке — забыли переключить язык;
  • другими словами — «толстовка» вместо «худи», «болгарка» вместо «УШМ»;
  • задачей вместо товара — «чтобы ребёнок не упал с кровати».

Для обычного поиска все четыре случая одинаковы: совпадения букв нет, значит, и товара нет.

Самое обидное — последний пункт. Человек, который описывает задачу, обычно уже готов купить. Он просто не знает, как называется нужная вещь. И именно такие запросы проваливаются чаще всего.

Первая ошибка: «давайте подключим нейросеть»

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

Я так и сделал. Работало красиво — на демо. В жизни вылезли три проблемы.

Медленно. Ответ модели — это секунды. Покупатель, который набрал «кроссовки», не хочет ждать, пока машина подумает.

Дорого. Каждый запрос — это обращение к платному сервису. Для магазина с небольшим оборотом счёт быстро становится заметным.

Хрупко. Когда сервис нейросети тормозил или падал, вместе с ним падал и поиск. А поиск — это не чат, без которого можно прожить вечер. Без поиска магазин теряет продажи прямо сейчас.

Вывод, к которому я пришёл: нейросеть не должна быть фундаментом поиска. Она должна быть надстройкой, без которой всё продолжает работать.

Что сработало: три слоя

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

Слой 1. Быстрый поиск по кусочкам слов

Опечатки, раскладка и формы слов решаются без всякой нейросети.

Слово разбивается на короткие фрагменты по три буквы. «Кроссовки» и «кросовки» состоят почти из одних и тех же фрагментов, поэтому считаются похожими. Пропущенная буква, лишняя буква, переставленные соседние — это меняет пару фрагментов из десятка.

С раскладкой ещё проще: если по запросу ничего не нашлось, поиск переводит каждую латинскую клавишу в русскую, которая стоит на том же месте, и пробует снова. «Rjkzcrf» превращается в «коляска».

Это работает за доли секунды и ничего не стоит.

Слой 2. Поиск по смыслу

Для запросов-задач кусочки слов не помогут: в «чтобы не дуло из окна» нет ни одного слова из «уплотнитель для окон».

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

Отдельное открытие: для каталога в несколько тысяч товаров не нужна никакая тяжёлая инфраструктура. Мне долго казалось, что без специальной поисковой базы не обойтись. Оказалось, что сравнить запрос с парой тысяч отпечатков можно прямо в приложении — быстрее, чем пользователь успеет моргнуть.

Слой 3. Нейросеть — только там, где она правда нужна

Модель осталась, но поменяла роль. Теперь она подключается в трёх местах:

  • разбирает сложный запрос — из «недорогой ноутбук для учёбы, лёгкий» вытаскивает цену, назначение и вес;
  • задаёт уточняющий вопрос, если запрос размытый: вместо сотни товаров по запросу «подарок» спрашивает, кому и на какой бюджет;
  • коротко объясняет выбор — почему предложен именно этот товар.

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

Синонимы без ручного словаря

С синонимами отдельная история. Классический способ — словарь, который ведёт администратор: «толстовка = худи = свитшот». Я видел десятки таких словарей, и у всех одна судьба: их заполняют при запуске и забывают. Новые слова покупателей в них не попадают.

Я сделал по-другому. Когда товар загружается в каталог, модель один раз читает его карточку и дописывает слова, которыми его могут искать: разговорные названия, назначение, для кого он. Карточка «Худи оверсайз хлопок» получает «толстовка, кофта с капюшоном, тёплая кофта».

Нейросеть работает один раз при загрузке, а не на каждый запрос. Это быстро, дёшево, и словарь растёт вместе с каталогом сам.

Как понять, что стало лучше

Это, пожалуй, главный урок. Поиск очень легко «улучшить» так, что он станет хуже.

Поправил что-то ради опечаток — сломались синонимы. Подкрутил поиск по смыслу — в выдачу по «кроссовкам» полезли носки. Без проверки ты узнаёшь об этом от покупателей, то есть никогда.

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

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

Неожиданный побочный эффект

Я делал поиск, чтобы люди находили товары. А оказалось, что сами запросы — один из самых полезных отчётов для владельца магазина.

Запросы, по которым ничего не нашлось, показывают, чего не хватает в ассортименте. Запросы-задачи подсказывают, какими словами описывать товары. Частые уточнения — какие характеристики людям важны, а в карточках их нет.

Это прямой голос покупателя: человек сам написал, что ему нужно. Никакой опрос так не сделаешь.

Что пока не получается

Было бы нечестно рассказать только об успехах.

Очень размытые запросы. «Что-нибудь интересное» — тут не справится ни поиск, ни продавец-человек без пары встречных вопросов.

Пустые карточки. Если у товара только название и цена, поиску по смыслу просто не за что зацепиться. Качество поиска упирается в качество описаний — и это не исправить никакой технологией.

Узкоспециальные термины. В нишах вроде запчастей или стройматериалов у покупателей свой язык, артикулы и сокращения. Здесь без ручной донастройки пока не обойтись.

Проверьте свой поиск за пять минут

Если у вас интернет-магазин, откройте сайт и поищите пять раз:

  1. Опечатка. Возьмите популярный товар и сделайте ошибку в названии.
  2. Раскладка. Наберите название, не переключив язык.
  3. Синоним. Назовите товар так, как его называют покупатели, а не как он записан в каталоге.
  4. Задача. Опишите, для чего нужен товар, не называя его.
  5. Размытый запрос. Например, «подарок на новоселье».

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

А если провалился уже на первом — посмотрите отчёт о поисковых запросах в своей CMS или в Яндекс Метрике. Почти наверняка вы увидите там тех самых покупателей, которые сказали, что им нужно, и ушли.

---

Интересно, что ищут и не находят ваши покупатели? Поделитесь в комментариях самыми странными запросами из своего поиска — у меня коллекция таких уже на несколько страниц.

11