Как работает поиск, который понимает опечатки и синонимы

Обсудить
Как работает поиск, который понимает опечатки и синонимы
Реклама. АО «ТаймВэб». erid: 2W5zFGXMEDP

Представьте обувной интернет-магазин. Покупатель торопится, набирает в строке поиска «адидас крассовки» и нажимает Enter. На складе сотни пар Adidas, но в ответ он видит пустую страницу: «Ничего не найдено». Через секунду этот человек уже в соседней вкладке у конкурента, и заказ ушел туда.

История бытовая, но за ней стоят деньги. Внутренним поиском пользуется около 30% посетителей магазина, и конвертируются они в покупателей в 2-3 раза чаще остальных (по данным Cimulate, 2024). Это самая горячая аудитория: человек уже знает, чего хочет, и прямым текстом об этом сообщает. Терять его на опечатке обиднее всего, тем более что слабый поиск – проблема массовая, а не единичная.

По оценке Baymard Institute, у 56% сайтов поиск работает «посредственно или хуже».

Хороший поиск умеет прощать опечатки, понимать разные формы слова и подбирать синонимы. «Крассовки» он соотнесет с «кроссовками», запрос «кеды» дополнит близкими моделями, а «адидас» свяжет с латинским Adidas. Со стороны это выглядит почти как чтение мыслей, хотя никакой магии здесь нет: за результатом стоит несколько понятных механизмов, которые обрабатывают запрос по очереди. Дальше разберем их по шагам, без погружения в код и устройство баз данных, на уровне принципов, которые полезно понимать любому, кто отвечает за сайт или магазин.

Почему обычный поиск не находит «крассовки»

Чтобы понять, в чем фокус умного поиска, полезно сначала посмотреть, как ищет «обычный». Самый наглядный пример буквального поиска – сочетание клавиш Ctrl+F в браузере или текстовом редакторе. Оно перебирает символы на странице и подсвечивает только точные вхождения. Набрали «кроссовки» – найдутся «кроссовки», но не «кросовки» с опечаткой и не «кроссовкам» в другом падеже. Для строчки текста этого достаточно, для каталога с тысячами товаров и живыми людьми за клавиатурой – уже нет.

Долгое время поиск по сайтам устроен был похоже. Система сравнивала запрос с названиями товаров буквально, символ в символ, и возвращала только то, что совпало точно. Любое отклонение от «идеального» написания ломало результат.

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

Умный поиск решает ровно эту задачу. Вместо требования «напиши точно» он исходит из вопроса «что человек, скорее всего, имел в виду».

Нечеткий поиск (от англ. fuzzy search, «приблизительный поиск») – это набор приемов, которые позволяют находить подходящие результаты, даже когда запрос не совпадает с тем, что хранится в базе, буквально: есть опечатки, другая форма слова или синоним.

Само слово «нечеткий» сбивает с толку: кажется, будто такой поиск работает неаккуратно. На деле наоборот. Он строже подходит к тому, что нужно человеку, и мягче – к тому, как именно человек это написал. Из чего складывается эта мягкость и почему она не превращается в хаотичную выдачу, разберем дальше по шагам, начиная с самого первого: что происходит с запросом сразу после нажатия Enter.

Шаг первый: как запрос приводят к единому виду

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

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

  • Приведение к нижнему регистру, чтобы «Ботинки», «БОТИНКИ» и «ботинки» считались одним и тем же словом.
  • Очистка от лишнего: повторяющихся пробелов, знаков препинания и «мусорных» слов вроде «купить», «цена», «недорого», которые не помогают сузить поиск.
  • Исправление раскладки клавиатуры, когда человек забыл переключить язык и набрал русское слово латинскими клавишами.

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

В крупнейшем исследовании набора текста (Aalto University совместно с Кембриджем и ETH Zürich, 37 000 участников) выяснилось, что на смартфоне люди делают примерно в пять раз больше ошибок, чем на компьютере: около 42 опечаток на каждые 100 слов против 8 

Данные ScienceDaily, 2019.

Сюда же примыкает автодополнение – подсказки, которые выпадают по мере ввода. Стоит набрать «крос», как магазин предлагает «кроссовки», «кроссовки мужские», «кроссовки Adidas». Это та же работа над сырым запросом, только на опережение: система помогает человеку сформулировать запрос правильно, не дожидаясь опечатки. На выходе из этого шага вместо хаотичной строки получается чистый набор слов в едином формате. Только теперь начинается собственно поиск, и первым делом он учится прощать ошибки.

Как поиск прощает опечатки

Теперь у системы на руках чистый набор слов, но в одном из них покупатель ошибся: написал «крассовки» вместо «кроссовки». Буквального совпадения в базе нет. Чтобы все-таки найти товар, поиск перестает требовать точного совпадения и начинает мерить, насколько одно слово похоже на другое. Если непохожесть невелика, слова считаются одним и тем же.

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

  • Пропуск буквы: «кросовки» вместо «кроссовки» (потеряна одна «с»).
  • Лишняя буква: «крассовки» вместо «кроссовки» (добавлена лишняя «с»).
  • Перестановка соседних букв: «кроссовик» вместо «кроссовки».
  • Неправильная буква: «кроссовкы» вместо «кроссовки».

В случае с «крассовки» достаточно убрать одну лишнюю букву и поправить гласную, чтобы получить «кроссовки». Это близко, поэтому система уверенно соотносит запрос с товаром.

«Крассовки» → «кроссовки»: расстояние Левенштейна равно 2. Слова различаются всего двумя правками, и при стандартном пороге поиск считает их совпадением

Чтобы поиск не находил откровенно чужие слова, у этой меры есть порог. Обычно он равен двум: слова, отличающиеся на две правки и меньше, считаются совпадением, на три и больше – уже нет. Порог защищает от мусора. Если разрешить слишком большое расстояние, по запросу «кот» начнут находиться «код», «рот», «ком» и десяток других слов, к товару отношения не имеющих.

Расстояние Левенштейна – основной, но не единственный прием. Длинные слова часто сверяют по кусочкам из нескольких букв (их называют n-граммами): если у запроса и товара совпадает большинство таких кусочков, слова считаются родственными. А для имен собственных и брендов иногда подключают фонетические алгоритмы, которые сравнивают слова по звучанию, а не по написанию, и помогают, когда человек пишет название так, как слышит. Вместе эти приемы дают поиску запас прочности к человеческим ошибкам. Но опечатка – не единственная причина, по которой буквальное совпадение не срабатывает. Чаще мешает то, что русский язык изменяет слова по форме.

Как поиск исправляет опечатки

Как поиск понимает словоформы и синонимы

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

Работают с морфологией двумя способами. Первый, попроще, называется стеммингом: у слова грубо отсекают окончание и оставляют основу, «кроссовк-». Все формы сводятся к этому огрызку, и они начинают совпадать между собой. Способ быстрый, но прямолинейный: основа получается не всегда красивой и иногда склеивает слова, которые лучше бы различать.

Второй способ, лемматизация, аккуратнее: он приводит слово к словарной форме, то есть к тому виду, в каком слово стоит в словаре («кроссовки» в именительном падеже, «бежать» в инфинитиве). Лемматизация требует словаря и понимания грамматики, зато реже ошибается.

Цена непонятого запроса высока: 68% интернет-магазинов превращают страницу «ничего не найдено» в тупик, не предлагая покупателю ни альтернатив, ни подсказок, куда идти дальше

Исследование Baymard Institute, 2024

Остается случай, когда человек называет товар совсем другим словом. Один ищет «газировку», другой «лимонад», третий «колу», а в каталоге товар записан как «напиток газированный». Морфология тут бессильна, потому что это не формы одного слова, а разные слова с близким смыслом. Для них заводят словарь синонимов: список групп слов, которые магазин считает равнозначными. Наглядно разница между уровнями видна на сравнении.

Что ввел покупатель Найдет буквальный поиск Найдет умный поиск
кроссовок ничего (нет точного слова) кроссовки (морфология)
газировка ничего (товар назван иначе) напиток газированный (синонимы)
Adidas адидас по-разному в зависимости от раскладки один и тот же бренд

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

Путь запроса от опечатки до выдачи результатов

Как из десятков совпадений выбирается то, что нужно

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

Выстраивается своего рода лесенка приоритетов:

  1. Точное совпадение слова стоит выше всего: человек написал ровно то, что есть в базе.
  2. Другая форма того же слова идет следом, она почти так же надежна.
  3. Совпадение с одной опечаткой ниже, с двумя опечатками – еще ниже.
  4. Совпадение по синониму замыкает список: смысл близкий, но слово человек выбрал другое.

За этим стоит понятное соображение: даже если опечатка очевидна человеку, точное совпадение все равно остается для системы более надежным сигналом, чем исправленное. Но одной близости текста мало. Два товара могут одинаково точно подходить под запрос, а показать вперед стоит тот, что принесет пользу и покупателю, и магазину. Поэтому к текстовой релевантности добавляют другие факторы: есть ли товар в наличии (нет смысла поднимать наверх то, что нельзя купить), насколько он популярен и хорошо продается, какой у него рейтинг. Так чисто языковое совпадение превращается в осмысленную выдачу.

Соберем все шаги в один пример и проследим, как живой запрос проходит конвейер целиком. Покупатель вводит «адидас крассовки мужские». Сначала нормализация приводит фразу к нижнему регистру, разбивает на слова и связывает «адидас» с брендом Adidas. Затем нечеткое сопоставление исправляет «крассовки» на «кроссовки» по расстоянию Левенштейна. Морфология понимает, что «мужские» и «мужской» – одно и то же. После этого находятся все подходящие модели, и ранжирование поднимает наверх те, что есть в наличии и хорошо продаются. На пустую страницу из начала статьи человек уже не попадет.

Иногда покупателю, наоборот, нужно точное совпадение без всех этих послаблений. На такой случай многие сайты позволяют взять запрос в кавычки: это сигнал поиску отключить исправление опечаток и синонимы и искать ровно то, что написано. Удобно, когда человек ищет конкретный артикул или редкое название, которое поиск иначе попытается «исправить».

Что это дает бизнесу и как оценить свой поиск

Из механики складывается прямая выгода. Поиск, который прощает ошибки и понимает синонимы, превращает несостоявшиеся пустые выдачи в показы товаров, а значит, удерживает ту самую горячую аудиторию, что конвертируется в покупателей в 2-3 раза чаще обычных посетителей (по данным Cimulate, 2024). Параллельно он снимает нагрузку с поддержки: человек сам находит «цемент М500 в мешках» или нужный артикул вместо того, чтобы писать в чат и спрашивать менеджера.

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

  1. Введите название популярного товара с явной опечаткой. Хороший поиск все равно его найдет; буквальный вернет пустую страницу.
  2. Поищите товар в другой форме слова и через разговорный синоним. Проверяете морфологию и словарь синонимов.
  3. Наберите запрос в неправильной раскладке. Система должна догадаться, что вы имели в виду.
  4. Посмотрите, есть ли подсказки и автодополнение по мере ввода.
  5. Проверьте, поднимаются ли наверх товары в наличии, а не распроданные позиции.

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

Почему поиск важен для продаж

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

Куда движется поиск

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

Разница с привычным поиском принципиальная. Нечеткое сопоставление считает, насколько похожи написания слов, а семантический поиск оценивает, насколько близки их значения, и связывает запрос с товаром даже без единого общего слова. Опечатки и синонимы он переносит как само собой разумеющееся: «газировку» и «лимонад» он сближает не по словарю, который кто-то завел вручную, а потому что в текстах они встречаются в похожих контекстах. В ту же сторону движется и весь способ общения с магазином.

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

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

Статьи, посвященные предпринимательству и менеджменту. Рассказываем простым языком о сложных вещах.

Комментарии

С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте