Привет, Хабр! Это Илья Красавцев и Артем Козак из команды ранжирования и поиска Lamoda Tech. Понять, насколько хорошо работает поиск, не так просто, как кажется. Здесь не поможет одна правильная метрика: поведение пользователей неоднозначно, запросы разнообразны, а контент постоянно меняется. Поэтому приходится копать глубже: анализировать метрики, использовать LLM и даже спрашивать самих пользователей.
В этой статье мы расскажем, какие процессы выстроили для непрерывной оценки качества поиска в каталоге, и как с помощью них постоянно улучшаем систему.

Важность оценки качества поиска
Поиск — это важнейшая часть любого e-commerce проекта, Lamoda не исключение. Вот несколько весомых причин для того, чтобы постоянно работать над качеством поиска товаров:
Это нужно и важно пользователям. Каждый день более 1 млн пользователей открывают наш сайт или приложение и формулируют свои поисковые запросы. Они могут быть простыми, например, «кроссовки женские», и более сложными или редкими. Мы посчитали, что за последний год собрали более 25 миллионов уникальных поисковых запросов, и этот объем продолжает расти. Мы хотим помогать пользователям в тех случаях, когда они точно знают, что ищут, и когда у них есть только представление об этом.
Это напрямую влияет на бизнес-результаты. Сегодня около 25% всей выручки Lamoda приходит с поиска. Это значит, что его исправления могут превратиться в доход для компании: будь то обработка синонимов, умение распознать бренд при ошибочном вводе или корректная сортировка результатов.
Это улучшает бизнес-процессы. Оценка качества поиска помогает нам развивать не только сам пайплайн поиска, но и смежные процессы — работу с ассортиментом и селлерами платформы.
Например, если по запросу «форма для падела» в выдаче появляется нижнее белье, мы в том числе сигнализируем об этом коллегам из контента или коммерции. Они корректируют категории, атрибуты или сток, и поиск становится точнее.
Или если по какой-то теме стабильно нет релевантных товаров, мы передаем этот инсайт коллегам из коммерции, чтобы скорректировать закупки на будущее.
И еще один пример — до 2025 года мы не знали что такое «балетки-кроссовки» или «лабубу», а теперь это важная часть образов наших пользователей, которую они ищут в приложении.
Поэтому для нас улучшение качества поиска — одна из ключевых целей команды. Это не разовая оптимизация, а необходимый и постоянный процесс, который всегда находит отклик в счастье пользователя и бизнес-метриках.
При этом поиск — сложная многофакторная система, а поток запросов постоянно меняется. Из-за этого оценка качества поиска становится нетривиальной задачей, а нам нужно регулярно его мониторить.
Далее мы дадим краткий экскурс в нашу поисковую систему и расскажем про инструменты, с помощью которых видим максимально полную картину того, насколько хорошо работает наш поиск.
Как работает поисковая система в Lamoda?
Чтобы по текстовому запросу пользователя появился отранжированный по релевантности список товаров, система проходит через несколько этапов:
1. Нормализация текста. Запрос приводится к единому виду: убираются лишние символы, исправляются частые ошибки, текст переводится в стандартную форму. Например, запрос «ботильонов» превратится в «ботильоны».
2. Исправление опечаток. Отдельный модуль (опечаточник) отвечает за то, чтобы система одинаково понимала «reebok», «рибок» и «reeboc». Этот этап мы тоже можем улучшать: добавлять новые правила, корректировать частотные ошибки и развивать алгоритм, исходя из реального поведения пользователей.
3. Работа со словарями сущностей и связей. На этом этапе запрос обогащается дополнительной информацией о токенах, например, определяется сущность — бренд, цвет, категория. Также происходит обогащение синонимами, брендами-аналогами и другими экспертными связями.
Вот примеры связей, которые могут храниться в словарях:
Синонимы и похожие по смыслу слова: «штаны» и «брюки», «свитер» и «джемпер».
Названия брендов их варианты написания, включая транслиты, сокращения и связи между собой. Например, мы можем связать бренды Jordan и Nike, Yeezy и Adidas.
Для некоторых категорий фиксируются неформальные названия, которые пользователи часто используют, например, «изики».
4. Формирование поискового запроса к ElasticSearch. На этом этапе нормализованный текст превращается в AND/OR-дерево, которое подбирает товары в каталоге.
5. Нейронный семантический поиск. Для запросов, к которым мы подобрали малое количество «органических» кандидатов по текстовому индексу ElasticSearch, используем семантический поиск. На основе векторных представлений запроса и товара он ищет наиболее релевантных кандидатов.
6. Онлайн переранжирование кандидатов (персонализация) — топ-400 товаров переранжируются ML-моделью на основе предпочтений пользователя и других факторов. Подробнее об этом можно прочитать в статье.

Все эти этапы находятся под контролем нашей команды ранжирования и поиска.
Более подробно про принцип работы поиска на Lamoda мы рассказывали в другой статье и на одном из митапов.
Как оценить, что поиск работает так, как нужно?
Что такое идеальный поиск для fashion e-commerce платформы? Для нас это сочетание нескольких ключевых свойств:
Точность и релевантность. Поиск должен выдавать релевантные товары как по простым запросам, так и по сложным, и даже по не строгим формулировкам, например, «одежда для отпуска на пляже». Система должна уметь понимать синонимы, опечатки, транслитерации и разговорные выражения, которые пользователи используют в жизни.
Полнота. Поиск находит все релевантные товары, которые есть на стоке, при этом не показывая лишнего.
Трендовость. Появляются новые коллекции, бренды, лимитированные товары, выстреливают новые тренды — и поиск должен подстраиваться под изменения в fashion-индустрии.
Персональность. Даже при одинаковом запросе разным пользователям нужны разные товары. Поиск должен учитывать такие предпочтения, как бренды, размеры, цвета, цены, стилистика.
Оценить сразу все эти аспекты сложно. Поэтому мы формируем картину качества поиска по нескольким независимым источникам данных — каждый из них подсвечивает разные стороны пользовательского опыта.
1. Количественные метрики поиска
Анализируем, кликают ли пользователи по товарам, добавляют ли их в корзину, совершают ли покупки из поисковых запросов. Метод хорош тем, что он масштабный и отражает живое поведение.
Но есть и слабые места:
клики не гарантируют того, что результаты поиска были максимально релевантными;
причиной отсутствия кликов может быть что угодно — от плохого ранжирования до отсутствия нужного размера.
2. Фидбэк от пользователей
Через встроенный виджет в поисковой выдаче мы спрашиваем у пользователя напрямую, понравилась ли ему подборка. Это дает точные сигналы о конкретных проблемных кейсах, которые невозможно заметить в усредненной статистике.
Ограничения очевидны: фидбэка мало, и он не всегда равномерно распределен по запросам.
3. Асессорская и LLM-разметка поисковых запросов
Мы собираем ручную разметку «запрос → товар» и используем ее как эталон. Затем масштабируем оценку с помощью LLM.
Такой подход отлично показывает, насколько хорошо поиск в целом понимает запрос. Но он не учитывает персональные предпочтения.
4. Поиск проблемных запросов с помощью эмбеддингов
Если по двум похожим запросам («свадебное платье» и «платье на роспись») сильно отличается конверсия в клик или корзину — это явный сигнал о проблеме. Такой сравнительный анализ помогает выявлять ошибки ранжирования, поломки правил словаря и перекосы в ассортименте.
А теперь подробнее расскажем о том, какими инструментами мы пользуемся, чтобы оценить «здоровье» поисковой системы.
Количественные метрики поиска
Первым делом мы построили дашборд мониторинга количественных метрик поиска. Это инструмент, который помогает ежедневно отслеживать, как работает система, и какие тенденции появляются в пользовательском поведении.
Для каждого поискового запроса мы ежедневно собираем, обновляем и смотрим динамику по целому набору метрик для всего поиска, конкретных поисковых запросов и их групп:
Количество поисковых запросов — сколько раз пользователи вводили запрос за выбранный период.
Конверсия в клик — доля выдач, в которых пользователи кликнули по хотя бы одному товару из выдачи.
Конверсия добавления в корзину — доля выдач, в которых пользователь добавил в корзину хотя бы один товар из выдачи.
Количество коротких выдач — запросы, по которым найдено менее 60 товаров.
Количество пустых выдач — запросы, по которым не найдено ни одного товара.
Доля трафика, приходящегося на конкретный запрос.
NMV — сумма денег, который этот запрос приносит. Атрибуцируем покупки к просмотру товаров из поиска день в день.
Мы можем анализировать данные метрики в динамике и сравнивать запросы между собой. Это особенно полезно, когда нужно быстро понять, как ведут себя похожие запросы, например, если сравниваем «ботинки женские» и «сапоги женские» по кликам, конверсии и пустым/коротким выдачам.
Для того, чтобы работать со статистикой было удобно, мы поделили весь поток запросов на специальные группы — «корзинки». Выделили такие наборы:
Популярные — запросы, которые обеспечивают 60% всего поискового трафика Lamoda.
Денежные — запросы, которые приносят 60% NMV всего поиска.
Короткие — по которым найдено менее 60 товаров.
Брендовые — запросы с указанием только конкретного бренда.
Категорийные — запросы по конкретным категориям товаров: туфли, футболки, юбки и так далее.
Как мы определяем категорию запроса
Это более сложная задача, чем может показаться. Если решать эту задачу через словари или ручные правила, мы будем иметь низкую точность и полноту. Классификаторы плохо обучаются из-за большого количества классов и сильного дисбаланса (например, больше пользователей ищут футболки, а не мюли). Кроме того, из-за потока новых запросов их поддержка становится отдельной задачей.
Поэтому формирование категорийных корзинок запросов решили делать на базе поведения самих пользователей: смотрим на категории тех товаров, которые пользователь добавлял в корзину из поисковой выдачи, и по ним делаем выводы о категории самого запроса.
Например, если пользователи запрашивают «слингбэки женские натуральная кожа» и покупают туфли, мы именно эту категорию присвоим запросу.
Тренды и сезонность: регулярный батч растущих запросов
Домен fashion характеризуется сильной сезонностью и постоянным появлением новых трендов. В августе резко растет интерес к школьной форме, осенью к уггам, а весной или в начале лета — к товарам для пляжа. Еще прошлой осенью у нас не искали «чуни» (это такие укороченные валенки) и «шапки-пипки», а сегодня мы должны эффективно их находить. Поэтому каждый день дополнительно рассчитываются трендовые запросы — те, что показывают наибольший рост по количеству введенных поисковых запросов и конверсии в корзину «неделя к неделе».
Эта информация важна не только для команды поиска, но и для коммерции: она помогает понять, актуальность каких категорий или брендов растет. При этом иногда мы можем отлавливать и более интересные тренды, которые становятся нашей базой в понимании потребностей пользователей.
Таким образом, дашборды с количественными метриками — это важный инструмент для работы с поиском. С его помощью мы решаем несколько ключевых задач:
Мониторим общее здоровье поисковой системы. Если случится радикальная поломка, мы сможем заметить ее как по общим, так и по запросным метрикам.
Ищем точки роста в разных разрезах. По этому дашборду мы можем увидеть популярные, но низкоконверсионные запросы, и найти способ решения этой проблемы, или заметить проседающие категории.
Но у дашборда есть и недостатки. Он показывает метрики в среднем, по нему сложнее определить точечные проблемные кейсы, которые нужно дебажить. Поэтому помимо общих количественных метрик, нашей команде нужны инструменты, которые позволяют оперативно реагировать на поломки и единичные проблемные запросы.
Фидбек от пользователей
Что может быть лучше, чем спросить самих пользователей, нравится ли им поисковая выдача? Мы тоже так подумали, и внедрили систему сбора обратной связи прямо внутри нее.
Если пользователь проскроллил страницу примерно до 30 позиции и при этом не совершил целевых действий, ему показывается небольшой виджет с вопросом:
Товары соответствуют вашему запросу?
Ответить можно «Да» или «Нет, товары не подходят».

Если пользователь выбирает «Нет», открывается дополнительная форма, где он может уточнить причину. Эта обратная связь помогает нам получать качественные инсайты — те, что не всегда видны в метриках.

После анализа ответов мы выделили несколько категорий жалоб:
Точность поиска — найденные товары не соответствуют запросу (самая полезная для нас категория).
Ранжирование — иногда персонализация поднимает наверх менее релевантные товары.
Размер — в выдаче показываются товары не в нужном размере.
Цвет/материал — несоответствие цвета/материала ожиданиям.
Цена — представлены слишком дорогие товары.
Ассортимент — товаров нужной категории/бренда слишком мало или вообще нет.
Качество и стиль — субъективное несоответствие ожиданиям пользователя.
Фильтры — не работают или применяются некорректно.
Этот инструмент помогает нам находить интересные инсайты. Например, пользователи могут пожаловаться, что по запросу «пальто» стали появляться куртки, плащи, халаты. Для нас это сигнал о том, что нужно проверить работу синонимов в словаре.
Все данные из фидбека ежедневно собираются в отдельные дашборды: там можно видеть долю негативных ответов на вопрос о качестве поисковой выдачи, их динамику во времени и негативный фидбек по популярным запросам.
Однако с таким инструментом нужно быть осторожными. Виджет занимает место на странице, и вместо товаров, которые пользователь мог бы добавить в корзину и купить, он видит форму для обратной связи, которая может отвлекать его от целевого действия на сайте.
Прежде чем вывести это решение в продакшн, мы провели А/Б-эксперимент, чтобы убедиться, что виджет не просаживает ключевые метрики нашей команды: конверсию в клик, добавление в корзину и выручку на пользователя.
На данный момент мы оставили виджет на постоянной основе только у 10% пользователей, где он позволяет собирать значимую обратную связь, не влияя на поведение основной аудитории.
Асессорская и LLM-разметка поисковых запросов
Понятно, что одного фидбека для качественной оценки всего поиска не хватает, мы можем оценить только точечные кейсы. Поэтому чтобы иметь полное представление о качестве поиска, а также возможность валидировать и обучать новые алгоритмы, необходима качественная разметка поиска. С помощью внешних асессоров у нас настроена регулярная разметка ключевых корзинок запросов и мониторинг их релевантности.
И так как бюджет на асессорскую разметку не бесконечен, мы решили смотреть в сторону популярного подхода LLM-as-a-judge. Задача состояла в том, чтобы масштабировать асессорскую оценку с помощью LLM, размечая большее количество пар запрос-ответ.
Выбор LLM-модели
Первой нашей задачей был выбор LLM, оптимальной по трем показателям — скорости, цене и качеству разметки. И поскольку нам критически важно, чтобы модель разбиралась в домене fashion, мы используем дообученные в компании LLM-модели. Ранее это была LLM Mistral, а сейчас это дообученная модель QWEN. Она постоянно улучшается и поддерживается для многих задач в нашем домене, поэтому у нас есть возможность дообучить ее в том числе на задачу разметки.
Для более качественной разметки мы много дорабатывали промпт. В нашем случае он состоит из таких частей:
1. Контекст и задача.
2. Пошаговая инструкция. При оценке качества модель выставляла оценку по следующей шкале:
2 — релевантно
1 — частично релевантно
0 — нерелевантно
3. Дополнительные факторы: неправильная раскладка, учет гендера, сезона, наличие бренда в запросе и так далее.
4. Ограничения разметки.
5. Примеры «запрос-товар с правильной разметкой»
6. Примеры на разметку. По товару LLM получает информацию о названии, описании, бренде и других атрибутах.
Чтобы оценить качество LLM-разметки, часть запросов мы отправили живым асессорам, где они по этой же шкале оценивали релевантность товаров. Однако одноразовая проверка нам не подходит, потому что со временем меняется поток запросов, и модель может начать галлюцинировать. Чтобы постоянно проверять ее, мы создали отдельную корзинку проверочных запросов — Golden Set.
Эта корзинка содержит около 500 запросов, которые мы меняем не чаще чем раз в квартал и отбираем равномерно из трех групп поисковых запросов:
высокочастотных — запросы с частотой выше 99.9 персентиля,
среднечастотных — запросы с частотой выше 99 персентиля,
низкочастотных — запросы с частотой ниже 99 персентиля (менее 50 запросов за месяц).
Эти запросы мы размечаем параллельно двумя способами:
отправляем внешним асессорам,
прогоняем через нашу LLM.
Если разметка не совпадает, запрос уходит на внутреннюю ручную проверку, где определяем финальную оценку. Таким образом, мы можем объективно измерять, насколько LLM сохраняет качество разметки во времени.
На текущий момент точность нашей модели составляет:
Accuracy: 0.90
F1-score: 0.89
Это качество мы улучшаем комплексно: дообучаем LLM модель на сложных примерах, и меняем саму инструкцию-промт, чтобы сделать разметку точнее. В планах перейти на VLM-разметку, потому что часть запросов сложно разметить без фото товара.
Работа с разметкой
Убедившись в качестве полученной LLM-разметки, мы внедрили ее в регулярный процесс оценки качества поиска. LLM позволяет разметить больше запросов, чем способны асессоры, но все равно далеко не все. Поэтому мы решили сэмплировать запросы для разметки из корзинок, о которых рассказывали ранее.
Каждую неделю мы отбираем поисковые запросы из каждой корзинки. Чем популярнее запрос, тем выше вероятность, что он попадет в разметку на этой неделе. В среднем отбирается суммарно 2200-2500 запросов. Для каждого из них идем в логи системы каталога и достаем топ-60 товаров, которые показывались живым пользователям в поисковой выдаче, с учетом персонализации.
Далее данные обогащаются контентом: из таблиц с описаниями мы добавляем к каждому товару его бренд, категорию, материал, страну происхождения, сезонность, тип посадки (оверсайз или нет), текстовое описание и так далее. После этого собранный датасет сохраняется в FeatureStorage, чтобы хранить историю и отслеживать изменения во времени.
После разметки моделью мы вычисляем основные метрики:
NDCG (Normalized Discounted Cumulative Gain) — отражает качество ранжирования (наиболее релевантные товары находятся на самом верху выдачи).
Precision@K — показывает долю релевантных товаров в топе выдачи.


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

Работа с проблемными запросами
А теперь расскажем про еще один интересный способ поиска проблемных запросов, который активно используем. Мы выделяем запросы с низкой конверсией в добавление в корзину, либо пустыми выдачами, с которыми хотим поработать. Затем, для каждого из них с помощью близости в пространстве эмбеддингов мы находим топ-N ближайших соседей по косинусному расстоянию, то есть запросы с почти одинаковым смыслом, но при этом с высокой конверсией. Для получения эмбеддингов, мы используем ту же модель, что отвечает за семантический поиск на сайте, на данный момент это дообученный би-энкодер.
Идея в том, если два запроса очень похожи по смыслу, но один работает хорошо, а другой нет, значит, возможно, где-то возникла проблема — в нормализации, подборе синонимов или в работе опечаточника.
Этот подход помогает нам в решении нескольких задач:
1. Найти самые частые опечатки и транслитерации, которые наш текущий опечаточник еще не умеет детектировать. Например:
victoria vicci -> vittoria vicci
канцлер -> kanzler
асиксы -> asics и так далее
Эти кейсы мы добавили в словари вручную, улучшив качество поиска по брендам.
2. Обогатить словари синонимов и коллекций. Мы нашли слова и признаки, которых раньше не было в базе знаний.
Например, мы выяснили, что пользователи часто ищут вещи изумрудного и молочного цвета, который не работали у нас в поиске. Или что сумка the tote bag — это конкретная коллекция бренда Marc Jacobs.
Таким образом, этот инструмент позволяет быстро и без инвестиций в разметку выявить сломанные запросы, а также расширить покрытие поиска. Сейчас мы активно работаем на тем чтобы максимально автоматизировать этот процесс и сделать его частью стандартной рутины по улучшению поиска.
Поддержка качества поиска на постоянной основе
Каждую неделю мы проводим оценку качества поиска, где с помощью всех описанных инструментов: дашбордов, LLM-разметки, эмбеддингов и пользовательского фидбека находим проблемы и исправляем их.
Какие это могут быть изменения:
добавление новых брендов и их вариантов написания,
расширение списка синонимов, чтобы больше товаров имело возможность попасть в выдачу,
настройка модуля-опечаточника,
дебаг проблемных запросов и корректировка их обработки,
добавление новые атрибутов конкретным товарам/категориям товаров,
улучшение ранжирования на финальном этапе,
улучшение модели семантического поиска.
Как коллеги помогают оценить качество поиска
Помимо аналитического процесса, у нас есть специальный внутренний рабочий канал, куда сотрудники компании могут прислать запрос, по которому поиск ведет себя некорректно или просят донастроить по конкретным запросам.
Например, коллеги могут попросить, чтобы при запросе по бренду Hikes выдавался также ассортимент бренда Hike и наоборот, так как с нового сезона произошло изменение в названии бренда, но в товарах прошлого сезона оставалось старое название.
Команда поиска должна в течение 1-2 дней проверить обращение, разобраться в причине и дать ответ — это уже исправлено или требуется более сложное изменение в логике.
Раз в неделю мы собираемся командой и разбираем самые сложные кейсы — те, где проблема неочевидна или находится на стыке словарей, контента и коммерции. Иногда решение требует не только технической правки, но и обсуждения с другими отделами.
Такой подход позволяет нам поддерживать качество поиска на высоком уровне и работать с ожиданиями стейкхолдеров.
Выводы
Поиск одна из самых сложных частей любого e-commerce продукта. Он стоит на стыке данных, алгоритмов, UX и человеческого поведения. Особенно это относится к fashion, где запросы часто туманные, вкусы меняются быстро, а правильный товар — это не только про точное совпадение, но и про стиль, настроение, контекст.
В этой статье мы рассказали, как в Lamoda строим многослойную систему оценки качества поиска:
количественные метрики,
ручная разметка и LLM-оценка релевантности,
фидбэк пользователей,
сравнение похожих запросов и оперативный дебаг проблемных кейсов.
Эти инструменты позволяют нам видеть и общее состояние системы, и конкретные точки боли. Это непрерывный процесс, который помогает поддерживать поиск релевантным, персональным и полезным.
Спасибо за внимание! Надеемся, наш опыт поможет построить поиск, который действительно работает для ваших пользователей.