Проверил поиск в 14 интернет-магазинах: больше половины спотыкаются на простых запросах. Как я это чиню
Ввёл „наушнеки“, „памперсы“ и „кросовки“ в поиск 14 интернет-магазинов. Больше половины хотя бы раз ответили „ничего не найдено“ на товар, который у них есть».
Несколько лет назад я впервые открыл отчёт о том, что люди ищут на сайте интернет-магазина. Не в Яндексе — именно в строке поиска на самом сайте. И залип на час.
«Кросовки». «Толстовка» — при том что в каталоге они все называются «худи». «Rjkzcrf» — это «коляска», набранная в английской раскладке. «Чтобы не дуло из окна». «Подарок маме на юбилей».
На большую часть таких запросов сайт отвечал «ничего не найдено». Хотя нужные товары лежали в каталоге. Человек пришёл, сказал, что ему нужно, — и ушёл ни с чем.
С тех пор я делаю поиск для небольших магазинов. Ниже — что я понял за это время, какие ошибки сделал и что в итоге сработало. Но сначала — небольшая проверка, чтобы было понятно, что проблема не придумана.
Проверил поиск в 14 магазинах
Перед тем как писать, я решил посмотреть, как с этим обстоят дела сейчас. Взял 14 интернет-магазинов из пяти ниш: одежда, электроника, товары для дома, детские товары, стройка и инструмент. Среди них есть и большие сети, и магазины поменьше. Названия не привожу — задача не в том, чтобы кого-то пристыдить.
В каждом магазине — пять простых запросов, которые пишут обычные люди:
- опечатка — «кросовки», «наушнеки», «сковародка», «перфаратор»;
- неправильная раскладка — то же слово, набранное латиницей;
- другое слово — «толстовка», «лэптоп», «мусорка», «болгарка», «памперсы»;
- два разговорных запроса — «треники», «кофта», «зарядка для телефона», «шуруповерт», «саморезы».
Никаких хитрых формулировок. Засчитывал, если в выдаче были подходящие товары.
Что получилось:
- с опечаткой справились 11 магазинов из 14;
- с раскладкой — 10 из 14;
- с другим словом — 10 из 14;
- со всеми пятью запросами — только 6 из 14, и это в основном крупные сети электроники и стройки.
То есть больше половины магазинов теряли покупателя хотя бы на одном из самых обычных запросов. Несколько примеров, которые запомнились:
- магазин электроники на «наушнеки» ответил «товаров не найдено» — при том что раздел «Наушники» висит у него в меню;
- детский магазин не нашёл ничего ни по «каляска», ни по «памперсы» — а подгузники и коляски у него есть;
- магазин посуды не понял «сковародку» и ответил «ничего не найдено»;
- магазин одежды на «треники» показал пустую страницу, а на «кофту» — пижаму;
- крупный магазин электроники на «зарядку для телефона» предложил автомобильные держатели.
А если попросить чуть сложнее, начинается совсем весёлое. На запрос «слушать музыку в метро» один магазин техники показал аудиодиски с романсами и музыкальный центр. На «чтобы не дуло из окна» строительный магазин первым предложил купить новое окно за 4 250 рублей.
Это не провал конкретных магазинов. Так устроен обычный поиск.
Почему обычный поиск не справляется
Стандартная строка поиска устроена просто: берёт слова из запроса и ищет их в названиях и описаниях товаров. Совпало — показала. Нет — «ничего не найдено».
Пока покупатель пишет так же, как назван товар, всё хорошо. Но люди пишут по-своему:
- с ошибками — «каляска», «перфаратор»;
- в другой раскладке — забыли переключить язык;
- другими словами — «толстовка» вместо «худи», «болгарка» вместо «УШМ»;
- задачей вместо товара — «чтобы ребёнок не упал с кровати».
Для обычного поиска все четыре случая одинаковы: совпадения букв нет, значит, и товара нет.
Самое обидное — последний пункт. Человек, который описывает задачу, обычно уже готов купить. Он просто не знает, как называется нужная вещь. И именно такие запросы проваливаются чаще всего.
Первая ошибка: «давайте подключим нейросеть»
Когда появились большие языковые модели, решение казалось очевидным: пусть нейросеть читает каждый запрос, понимает, что хотел человек, и ищет нужное.
Я так и сделал. Работало красиво — на демо. В жизни вылезли три проблемы.
Медленно. Ответ модели — это секунды. Покупатель, который набрал «кроссовки», не хочет ждать, пока машина подумает.
Дорого. Каждый запрос — это обращение к платному сервису. Для магазина с небольшим оборотом счёт быстро становится заметным.
Хрупко. Когда сервис нейросети тормозил или падал, вместе с ним падал и поиск. А поиск — это не чат, без которого можно прожить вечер. Без поиска магазин теряет продажи прямо сейчас.
Вывод, к которому я пришёл: нейросеть не должна быть фундаментом поиска. Она должна быть надстройкой, без которой всё продолжает работать.
Что сработало: три слоя
В итоге поиск сложился из трёх слоёв, и каждый закрывает свою часть проблем.
Слой 1. Быстрый поиск по кусочкам слов
Опечатки, раскладка и формы слов решаются без всякой нейросети.
Слово разбивается на короткие фрагменты по три буквы. «Кроссовки» и «кросовки» состоят почти из одних и тех же фрагментов, поэтому считаются похожими. Пропущенная буква, лишняя буква, переставленные соседние — это меняет пару фрагментов из десятка.
С раскладкой ещё проще: если по запросу ничего не нашлось, поиск переводит каждую латинскую клавишу в русскую, которая стоит на том же месте, и пробует снова. «Rjkzcrf» превращается в «коляска».
Это работает за доли секунды и ничего не стоит.
Слой 2. Поиск по смыслу
Для запросов-задач кусочки слов не помогут: в «чтобы не дуло из окна» нет ни одного слова из «уплотнитель для окон».
Здесь работает сравнение по смыслу. Каждая карточка товара и каждый запрос превращаются в набор чисел — что-то вроде отпечатка смысла. Близкие по смыслу тексты получают похожие отпечатки, даже если слова в них разные. Поиск показывает товары, чьи отпечатки ближе всего к запросу.
Отдельное открытие: для каталога в несколько тысяч товаров не нужна никакая тяжёлая инфраструктура. Мне долго казалось, что без специальной поисковой базы не обойтись. Оказалось, что сравнить запрос с парой тысяч отпечатков можно прямо в приложении — быстрее, чем пользователь успеет моргнуть.
Слой 3. Нейросеть — только там, где она правда нужна
Модель осталась, но поменяла роль. Теперь она подключается в трёх местах:
- разбирает сложный запрос — из «недорогой ноутбук для учёбы, лёгкий» вытаскивает цену, назначение и вес;
- задаёт уточняющий вопрос, если запрос размытый: вместо сотни товаров по запросу «подарок» спрашивает, кому и на какой бюджет;
- коротко объясняет выбор — почему предложен именно этот товар.
И главное правило: если модель не ответила вовремя или сервис недоступен, поиск молча работает на первых двух слоях. Покупатель получает результаты чуть менее умные, но получает их.
Синонимы без ручного словаря
С синонимами отдельная история. Классический способ — словарь, который ведёт администратор: «толстовка = худи = свитшот». Я видел десятки таких словарей, и у всех одна судьба: их заполняют при запуске и забывают. Новые слова покупателей в них не попадают.
Я сделал по-другому. Когда товар загружается в каталог, модель один раз читает его карточку и дописывает слова, которыми его могут искать: разговорные названия, назначение, для кого он. Карточка «Худи оверсайз хлопок» получает «толстовка, кофта с капюшоном, тёплая кофта».
Нейросеть работает один раз при загрузке, а не на каждый запрос. Это быстро, дёшево, и словарь растёт вместе с каталогом сам.
Как понять, что стало лучше
Это, пожалуй, главный урок. Поиск очень легко «улучшить» так, что он станет хуже.
Поправил что-то ради опечаток — сломались синонимы. Подкрутил поиск по смыслу — в выдачу по «кроссовкам» полезли носки. Без проверки ты узнаёшь об этом от покупателей, то есть никогда.
Поэтому у меня есть набор эталонных запросов: опечатки, раскладка, синонимы, запросы-задачи, размытые запросы. Для каждого записано, какой товар должен оказаться в начале выдачи. После любой правки набор прогоняется целиком. Если хоть один запрос провалился — правка не выходит.
Набор небольшой, всего шестнадцать запросов. Но он ловит большую часть ошибок до того, как их увидят люди.
Неожиданный побочный эффект
Я делал поиск, чтобы люди находили товары. А оказалось, что сами запросы — один из самых полезных отчётов для владельца магазина.
Запросы, по которым ничего не нашлось, показывают, чего не хватает в ассортименте. Запросы-задачи подсказывают, какими словами описывать товары. Частые уточнения — какие характеристики людям важны, а в карточках их нет.
Это прямой голос покупателя: человек сам написал, что ему нужно. Никакой опрос так не сделаешь.
Что пока не получается
Было бы нечестно рассказать только об успехах.
Очень размытые запросы. «Что-нибудь интересное» — тут не справится ни поиск, ни продавец-человек без пары встречных вопросов.
Пустые карточки. Если у товара только название и цена, поиску по смыслу просто не за что зацепиться. Качество поиска упирается в качество описаний — и это не исправить никакой технологией.
Узкоспециальные термины. В нишах вроде запчастей или стройматериалов у покупателей свой язык, артикулы и сокращения. Здесь без ручной донастройки пока не обойтись.
Проверьте свой поиск за пять минут
Если у вас интернет-магазин, откройте сайт и поищите пять раз:
- Опечатка. Возьмите популярный товар и сделайте ошибку в названии.
- Раскладка. Наберите название, не переключив язык.
- Синоним. Назовите товар так, как его называют покупатели, а не как он записан в каталоге.
- Задача. Опишите, для чего нужен товар, не называя его.
- Размытый запрос. Например, «подарок на новоселье».
Если поиск справился с первыми тремя — у вас неплохой базовый поиск. Если с четвёртым — это уже поиск по смыслу. Если на пятый он показал разумную подборку или задал вопрос — вам повезло больше, чем большинству.
А если провалился уже на первом — посмотрите отчёт о поисковых запросах в своей CMS или в Яндекс Метрике. Почти наверняка вы увидите там тех самых покупателей, которые сказали, что им нужно, и ушли.
---
Интересно, что ищут и не находят ваши покупатели? Поделитесь в комментариях самыми странными запросами из своего поиска — у меня коллекция таких уже на несколько страниц.