Поиск — это не просто строка ввода
В предыдущей части мы разобрали рекомендательные системы — алгоритмы, которые решают, что показать пользователю без его запроса. Теперь поговорим о другой стороне: что происходит, когда пользователь сам ищет что-то.
Большинство компаний относятся к поиску как к утилите: есть строка ввода, есть индекс, есть результаты. Но персонализированный поиск — это совершенно другой продукт. Один и тот же запрос «рок» для подростка и для 45-летнего меломана должен давать разные результаты. И оба должны быть релевантными.
В Звуке поиск обрабатывал 2–3 миллиона запросов в день. Когда мы начали персонализировать его, CTR вырос на 18%, а конверсия в прослушивание — на 23%. Это были одни из самых «дешёвых» улучшений: относительно небольшие изменения в ранжировании дали значительный эффект.
Персонализированный поиск vs обычный
Обычный поиск ранжирует результаты по релевантности к запросу: текстовое совпадение, TF-IDF, BM25. Все пользователи получают одинаковую выдачу.
Персонализированный поиск добавляет второй фактор — релевантность к пользователю. Финальный скор = f(relevancetoquery, relevancetouser). Два человека, набравшие одно и то же, видят разные результаты.
Как это работает на практике:
Запрос «рок» для пользователя, который слушает Metallica и Slayer → выдача начинается с thrash metal и heavy metal. Тот же запрос для пользователя, слушающего Radiohead и Muse → альтернативный рок и инди.
Запрос «новинки» для пользователя, предпочитающего русский рэп → свежие релизы русских рэп-исполнителей. Для слушателя классической музыки → новые записи симфонических оркестров.
Технически это реализуется через re-ranking: базовый поисковый движок возвращает кандидатов, а персонализированная модель переранжирует их с учётом профиля пользователя.
Ранжирование: как учитывать предпочтения
Модель ранжирования принимает на вход три группы фичей:
Query features
- Токены запроса и их эмбеддинги
- Тип запроса (navigational / exploratory / informational)
- Длина запроса, наличие фильтров
Document features
- Атрибуты контента (жанр, исполнитель, год, настроение)
- Эмбеддинги контента
- Популярность (глобальная и в сегменте)
- Свежесть (для discovery важно показывать новинки)
User features
- Профиль предпочтений (вектор из части 2)
- История поиска и прослушиваний
- Контекст: время суток, устройство, текущая сессия
- Сегмент (для пользователей с малой историей)
Мы использовали Learning to Rank (LTR) — подход, при котором модель обучается ранжировать результаты на основе исторических сигналов. В качестве таргета — клики, прослушивания, добавления в плейлист. Модель — LambdaMART на первом этапе, позже перешли на нейросетевой ранкер с cross-attention между запросом, документом и пользователем.
Важный нюанс: персонализация поиска не должна быть абсолютной. Если пользователь явно ищет «классическая музыка», а он обычно слушает рэп — нужно показать классику. Intent запроса важнее исторических предпочтений. Баланс между персонализацией и intent — одна из самых сложных задач.
Intent detection: понять, что ищет пользователь
Не все поисковые запросы одинаковы. Мы выделили три типа intent:
Navigational intent
Пользователь знает, что ищет: конкретный трек, исполнитель, альбом. «Metallica Nothing Else Matters» — здесь персонализация минимальна, нужно просто найти правильный результат. Точность поиска > персонализация.
Exploratory intent
Пользователь хочет исследовать: «рок 80-х», «музыка для бега», «похожее на Radiohead». Здесь персонализация критична — из тысяч результатов нужно выбрать те, что понравятся именно этому пользователю.
Mood/context intent
Пользователь описывает состояние или ситуацию: «грустная музыка», «для вечеринки», «утренняя». Это самый сложный тип — нужно понимать и семантику запроса, и вкус пользователя.
Для классификации intent мы обучили BERT-модель на размеченных запросах. Accuracy — 89% на трёх классах. Классификатор работал в real-time и определял, насколько агрессивно персонализировать выдачу.
Как поиск и рекомендации дополняют друг друга
Поиск и рекомендации — не конкурирующие продукты, а две стороны одной медали:
- Рекомендации = push-модель. Система предлагает контент, пользователь пассивен.
- Поиск = pull-модель. Пользователь выражает намерение, система отвечает.
На практике они обогащают друг друга:
Поисковые данные улучшают рекомендации. Если пользователь ищет «jazz», но его история прослушивания — только поп, поисковый запрос — более сильный сигнал намерения. Мы передавали поисковые запросы как фичи в рекомендательные модели, и это давало +5% relevance в офлайн-тестах.
Рекомендации улучшают поиск. Если рекомендательная модель знает, что пользователь предпочитает acoustic-версии, это знание используется при ранжировании поисковой выдачи. Общий профиль пользователя — это shared asset.
Поиск как fallback. Когда рекомендации промахиваются (а это случается — ни одна модель не идеальна), поиск — это способ пользователя «поправить» систему. Анализ поисковых запросов после плохих рекомендаций — ценный источник информации о качестве RecSys.
Discovery: помочь найти неизвестное
Discovery — это то, что отличает хороший продукт от великого. Рекомендации отвечают на вопрос «что ещё тебе понравится?». Discovery отвечает на вопрос «что ты ещё не знаешь, но полюбишь?».
В Звуке мы реализовали несколько discovery-механик:
Exploration slots. В каждой персональной ленте 10–15% позиций отдавались контенту вне привычного вкусового профиля, но с высоким predicted score. Мы использовали epsilon-greedy стратегию: с вероятностью epsilon показываем «неожиданный» контент.
Taste breakers. Специальный плейлист «Расширь горизонт» — алгоритм подбирал треки, которые нравились пользователям с частично похожим вкусом. Если ты слушаешь инди-рок и электронику, а похожие пользователи ещё и джаз — вот тебе джаз.
Trending in your segment. Что популярно среди похожих на тебя пользователей прямо сейчас. Это сочетание персонализации и социального доказательства — мощный драйвер discovery.
Результаты: пользователи, которые активно взаимодействовали с discovery-контентом, показывали +35% retention через 30 дней. Discovery расширял вкусовой профиль, и система получала больше сигналов — позитивный feedback loop.
Метрики поисковой персонализации
Как измерять успех персонализированного поиска:
| Метрика | Что измеряет | Наш бенчмарк |
|---|---|---|
| pCTR | Персонализированный CTR на позиции 1–5 | +18% vs baseline |
| MRR | Mean Reciprocal Rank — позиция первого клика | 0.72 → 0.81 |
| nDCG@10 | Качество ранжирования топ-10 | 0.65 → 0.74 |
| Zero-result rate | Доля запросов без результатов | 8% → 4% |
| Search-to-listen rate | Конверсия из поиска в прослушивание | +23% |
| Discovery rate | Доля нового контента в потреблении | 15% → 28% |
Совет: не оптимизируйте только CTR. Пользователь может кликнуть и уйти через 5 секунд. Измеряйте downstream-метрики: прослушивание, добавление в избранное, retention. Именно они отражают реальную ценность.
Что дальше
В следующей части мы разберём CVM и путь клиента — как персонализация выходит за рамки контента и начинает управлять всем опытом: пушами, офферами, UI.
Хотите персонализировать поиск и discovery в вашем продукте? Запишитесь на консультацию — разберём ваш кейс и определим точки роста.