Семантический поиск простыми словами: проверка на 16 запросах магазина
Покупатель пишет «светит на лбу», а в каталоге «фонарь налобный». Я сравнил три вида поиска на одном каталоге и одних и тех же запросах: строгий по словам, по словам с учётом окончаний и по смыслу.
Кратко
- Семантический поиск ищет по смыслу, а не по совпадению буквТексты и запрос превращаются в векторы, и поиск выбирает близкие по смыслу, даже если общих слов нет.
- На 16 запросах «своими словами»: 1, 8 и 15Столько раз нужный товар попал в первую тройку у строгого поиска по словам, поиска с учётом окончаний и поиска по смыслу.
- Слабое место — он всегда что-то находитНа запрос «каска», которой в каталоге нет, поиск по смыслу показал ветрозащитную куртку. Нужен порог «ничего не найдено», подобранный на ваших данных.
- Отрицание он путает«С сахаром» и «без сахара» для него почти одно и то же. Это лечится, но проверять нужно специально.
- Лучше всего — в паре с точным поискомАртикулы, бренды и фильтры работают как раньше, смысл добавляется сверху.
Что такое семантический поиск
Обычный поиск на сайте сравнивает буквы: какие слова запроса встречаются в названии и описании товара. Если покупатель назвал вещь не так, как она записана в каталоге, совпадения нет, и он видит «ничего не найдено».
Семантический поиск (его ещё называют поиском по смыслу или векторным) работает иначе. Специальная модель превращает каждый текст в вектор — длинный набор чисел, который описывает смысл. Тексты о похожем оказываются рядом: «налобный фонарь» и «светит на лбу» получают близкие векторы, хотя общих слов у них нет. На запрос поиск считает его вектор и выбирает товары, которые ближе всего.
Поиск по словам с учётом окончаний — промежуточный вариант. Он понимает, что «палатку» и «палатка» — одно слово, но синонимы и описания задачи («чем рубить дрова» вместо «топор») ему недоступны.
Как я проверял
- Каталог
- Вымышленный магазин «Северный путь»: 108 товаров для рыбалки, туризма и дома. Названия записаны так, как принято в магазинах: «костюм утеплённый», «бур ледовый шнековый».
- Запросы
- 16 запросов так, как пишут люди: «куртка для зимней рыбалки», «дырку во льду сделать», «зарядить телефон без розетки». Для каждого я заранее отметил, какие товары считаются правильными.
- Успех
- Правильный товар в первой тройке выдачи: дальше покупатель обычно не смотрит.
- Три поиска
- Строгий: все слова запроса должны встретиться в тексте так, как написаны. С окончаниями: слова сравниваются без окончаний и взвешиваются (BM25). По смыслу: векторы модели mistral-embed плюс небольшой вес точных слов.
Набор маленький, каталог вымышленный, правильные ответы размечал я сам. На вашем каталоге цифры будут другими, поэтому в прототипе я сравниваю поиски на 100 ваших реальных запросах.
Результат
| Запрос | Строгий по словам | С окончаниями | По смыслу | Первый товар поиска по смыслу |
|---|---|---|---|---|
| куртка для зимней рыбалки | — | нашёл | нашёл | Куртка-парка зимняя «Тундра» |
| чем согреть ноги на льду | — | нашёл | нашёл | Сапоги зимние на ЭВА до −40 °C |
| светит на лбу | — | — | нашёл | Фонарь налобный аккумуляторный |
| палатка от ветра | — | — | нашёл | Палатка зимняя «Зонт» трёхслойная |
| дырку во льду сделать | — | — | нашёл | Бур ледовый ручной шнековый |
| где спать в лесу | — | — | нашёл | Спальный мешок-одеяло лёгкий |
| зарядить телефон без розетки | — | нашёл | нашёл | Внешний аккумулятор 20 000 мА·ч |
| согреть руки | — | — | нашёл | Грелка для рук аккумуляторная |
| горячий чай в дороге | — | нашёл | нашёл | Термос для еды широкий |
| ловить рыбу зимой | — | — | нашёл | Эхолот для подлёдного лова (нужный товар вторым) |
| чем рубить дрова | — | — | нашёл | Топор туристический |
| защита от дождя | нашёл | нашёл | нашёл | Костюм влагозащитный из ПВХ |
| тёплое бельё под одежду | — | нашёл | нашёл | Комплект термобелья |
| разделать рыбу | — | нашёл | нашёл | Нож разделочный для рыбы |
| светильник в палатку | — | — | — | Палатка зимняя «Зонт» (а нужен фонарь) |
| обогреть палатку | — | нашёл | нашёл | Обогреватель газовый керамический |
| Итого из 16 | 1 | 8 | 15 |
Строгий поиск справился с одним запросом из 16: «защита от дождя», где все три слова нашлись в описаниях товаров. На остальных он вернул пустую выдачу. Поиск с окончаниями нашёл нужное в 8 случаях: помогает, когда в запросе есть слово из названия («термос», «рыба»), и бессилен, когда человек описывает задачу. Поиск по смыслу нашёл нужный товар в 15 запросах из 16, в 14 из них — первым в выдаче.
Попробуйте сами: это то же демо, на котором делался замер. Слева строгий поиск, справа по смыслу.
Обычный поиск
Как у многих сайтов: каждое слово запроса должно встретиться в тексте так, как оно написано.
Введите запрос или выберите пример.
Поиск по смыслу
Понимает смысл запроса, синонимы и формы слов.
Здесь появятся статьи, близкие по смыслу.
Поиск по смыслу не безошибочен: если в каталоге нет ничего подходящего (попробуйте «каска»), он всё равно покажет ближайшие товары. Порог «ничего не найдено» подбирается на ваших данных: у этой модели области правильных и неправильных запросов пересекаются.
Где поиск по смыслу ошибается
- Сильное слово перетягивает
- «Светильник в палатку» — единственный промах. Слово «палатка» оказалось сильнее «светильника», и наверх вышли сами палатки, а не кемпинговая лампа. Для таких случаев при внедрении есть шаг переранжирования лучших результатов; в демо его нет, и помог ли бы он здесь, я не замерял.
- Он всегда что-то показывает
- Я спросил 6 вещей, которых в каталоге нет. На «каску» поиск по смыслу показал ветрозащитную куртку, на «шампунь» — мангал. Строгий поиск честно вернул пустоту. Порог «ничего не найдено» подбирается на ваших данных; у этой модели области правильных и неправильных запросов пересекаются, так что идеального порога нет.
- Отрицание
- Модели векторов плохо различают «с сахаром» и «без сахара». В своём исследовании negation-direction я нашёл в векторах ось отрицания, общую для русского и английского; дополнительный признак снижает долю таких ошибок с 0,72 до 0,02 на русском (multilingual-e5-base).
- Артикулы и коды
- Номер «AB-1234» смысла не несёт, для векторов это шум. Поэтому точный поиск по артикулам и брендам остаётся рядом и работает как раньше.
Как это внедряют на сайте
- Ваш каталог: названия, описания, артикулы и бренды
- Описания переводятся в векторы моделью для русского языка; при необходимости она дообучается на ваших данных
- Смысл складывается с точными совпадениями
- Лучшее переставляется наверх
- Выдача на сайт через API
Старый поиск не выкидывается: новый слой работает рядом, фильтры по цене, наличию и городу продолжают работать. Полезный побочный результат — отчёт о запросах без результата: он показывает, что люди ищут и не находят в ассортименте.
На большом объёме я делал то же самое в проекте Compas: поиск по смыслу по ~147 тыс. компаний. На 1000 проверочных запросах у 691 лучшие совпадения оказались достаточно близки, а опечатки в запросе меняли оценку совпадения всего на 1,2%.
Как понять, нужен ли он вашему магазину
- Посмотрите в статистике сайта, какая доля поисков заканчивается пустой выдачей или уходом со страницы.
- Выпишите 20 запросов так, как их пишут покупатели, а не менеджеры: описанием задачи, синонимами, с опечатками.
- Прогоните их через свой поиск и посчитайте, в скольких нужный товар попал в первую тройку.
Если результат похож на левые колонки таблицы выше, поиск по смыслу даст заметную разницу. Прототип на вашем каталоге со сравнением на 100 реальных запросах — 3–4 недели, от 90 000 ₽; внедрение — от 200 000 ₽.
Вопросы
Чем семантический поиск отличается от полнотекстового?
Полнотекстовый ищет слова (иногда с учётом окончаний), семантический — близкий смысл. На запросах «своими словами» в моём замере это 8 и 15 попаданий из 16.
Придётся выкинуть текущий поиск?
Нет: новый слой работает рядом, точные совпадения, артикулы и фильтры остаются.
Работает с Битриксом?
Через API — да; конкретную интеграцию обсуждаем на разборе.
Не замедлит сайт?
Скорость ответа записываю в задачу и замеряю на прототипе.
Бесплатный пример на ваших данных
Пришлите адрес сайта или каталога — за 2 дня соберу пример поиска на ваших открытых данных, и вы сравните его со своим.
Что написать: адрес сайта или каталога и пару запросов, на которых поиск сейчас не справляется. Пишите в Telegram или на почту, отвечаю в течение суток.
Что будет после обращения
- Вы пишетеЧто у вас есть (сайт, документы, каталог) и что хотите улучшить — в Telegram или на почту.
- Я уточняюЗадаю вопросы по задаче и данным; до доступа к данным подписываем NDA.
- Называю цену и срокТочную стоимость называю после разбора задачи; дальше решаете вы.