Обзор модуляЧасть III · ~8 ч · Сложность: (средний) · Пререквизиты: Модуль 1
До сих пор мы строили офлайн-сторону системы: обход (Модуль 2), идентичность документа (Модуль 3), индекс (Модуль 4). Теперь начинается онлайн-сторона — то, что происходит в момент, когда пользователь нажал Enter. Прежде чем система вообще обратится к индексу, она должна понять, что у неё спросили. Сырая строка запроса — это не намерение пользователя, а лишь его зашумлённая проекция: с опечатками, в неудобной форме, неоднозначная, иногда без половины нужных слов. Модуль о том, как из строки символов получить структурированное, обогащённое представление запроса, пригодное для поиска и ранжирования.
В сквозном конвейере «обход → индекс → факторы → ранжирование → выдача → постобработка → измерение» этот модуль стоит на стыке: он завершает подготовку и открывает онлайн-часть. Его выход — нормализованный, исправленный, расширенный и классифицированный запрос — становится входом для текстовой релевантности (Модуль 6), для выбора кандидатов и формулы ранжирования в каскаде (Модуль 12) и для постобработки выдачи (Модуль 16). Ошибка понимания запроса каскадно отравляет всё, что ниже: идеальная формула BM25 бесполезна, если запрос токенизирован неправильно или классифицирован не в тот интент.
Ключевая идея модуля: обработка запроса симметрична обработке документа. Те же операции нормализации и токенизации, что применялись к документам при индексировании, должны применяться к запросу — иначе термины не совпадут. Но запрос короче, реже и неоднозначнее документа, поэтому к нему добавляются специфические шаги: исправление опечаток, расширение синонимами и словоформами, классификация намерения (intent), сегментация на смысловые единицы и взвешивание слов по важности.
После модуля студент сможет: спроектировать конвейер предобработки запроса; выбрать стратегию исправления опечаток и оценить её риски; объяснить, как и зачем расширяется запрос и где это вредит; классифицировать запрос по намерению и показать, как класс меняет формулу ранжирования и фильтры; представить запрос как взвешенное дерево термов и сегментов.
Как читать по трекам
- Студент CS — обязательно всё; глава 5.4 (дерево запроса) особенно важна как мост к формальным моделям. Лабы по расстоянию Дамерау—Левенштейна и по классификатору интента — делать.
- Инженер поиска/ML — обязательно всё; обращай внимание на «Инженерные заметки» (латентность, кэширование исправлений, онлайн-офлайн симметрия). Глава 5.4 — основа для построения дерева запроса в serving.
- SEO-специалист — обязательно 5.1 (как система видит твой запрос ≠ как написано на странице), 5.2 (синонимы и словоформы — почему точное вхождение не нужно), 5.3 (интент запроса ↔ интент страницы — ключевая глава). Вывод метрик и деревьев — обзорно.
- Смешанный/руководитель — обзор + глава 5.3 целиком (классификация интента влияет на продуктовые решения и метрики).
- 5.1. Нормализация, исправление опечаток, токенизация запроса (средний)
- 5.2. Расширение запроса: синонимы, словоформы, переформулировки (средний)
- 5.3. Классификация интента: информационный / навигационный / коммерческий / свежий, гео-интент (средний)
- 5.4. Сегментация и взвешивание слов; запрос как дерево (продвинутый)
Цели обучения
После главы студент сможет:
- Объяснить, почему нормализация запроса обязана быть симметрична нормализации документа, и предсказать последствия её нарушения.
- Перечислить и упорядочить этапы предобработки запроса (юникод-нормализация, регистр, диакритика, сегментация, стоп-слова).
- Реализовать токенизацию запроса для языка со словоизменением и обосновать выбор гранулярности токена.
- Реализовать исправление опечаток на базе расстояния Дамерау—Левенштейна с языковой моделью и оценить порог автоисправления.
- Оценить риски ложного исправления и спроектировать стратегию «исправили — но показали оригинал».
Запрос приходит в систему как строка байтов. Между этой строкой и обратным индексом (inverted index) лежит конвейер предобработки. Его задача — превратить запрос в последовательность термов в точно той же нормальной форме, в какой термы лежат в индексе.
Этапы нормализацииИнтуиция. Индекс — это словарь, где ключи записаны по строгим правилам. Запрос — это то, чем мы стучимся в словарь. Если документ при индексировании привёл слово к форме «кошка», а запрос оставил «Кошки!», ключи не совпадут и совпадение потеряется. Поэтому один и тот же нормализатор должен применяться и при индексировании, и при запросе. Это правило «онлайн-офлайн симметрии».
Типовой конвейер (порядок важен):
Код: Выделить всё
Этап | Что делает | Пример
----------------------+------------------------------------------------------------------------------------------------+-------------------------------
Юникод-нормализация | приведение к канонической форме (NFC/NFKC), устранение визуально одинаковых, но разных кодов | é (e+◌́) → é (один код)
Регистр | приведение к нижнему (с учётом языковых правил) | CamelWord → camelword
Диакритика/гомоглифы | снятие диакритики там, где язык это допускает; замена латиницы-двойников кириллицы | cafе́ → cafe; лат. o → кир. о
Пунктуация | удаление/нормализация знаков, кроме значимых (c++, c#, @) | что-то? → что-то
Сегментация | разбиение на токены (см. ниже) | купитьдёшево → купить дёшево
Стоп-слова | пометка/удаление частотных служебных слов | как и почему → как·почему
ТокенизацияВнимание. Снятие диакритики и слияние гомоглифов — палка о двух концах. Для одних языков диакритика смыслоразличительна, для других нет. Гомоглифы (визуально одинаковые символы из разных алфавитов) — частый приём спама и фишинга; их полезно ловить, но агрессивная замена ломает легитимные многоязычные запросы. Решение принимается по языку и по контексту.
Токенизация — разбиение строки на термы. Для языков с пробельным разделением базовый случай тривиален, но реальные сложности начинаются сразу:
- Словоизменение. В языках с богатой морфологией один смысл порождает десятки форм (кошка / кошки / кошке / кошку...). Здесь токенизация смыкается со стеммингом (грубое отсечение окончаний) или лемматизацией (приведение к словарной форме). Лемматизация точнее, но дороже и требует словаря; стемминг быстр, но грубее. Та же операция должна была выполняться над документами.
- Составные слова и слитное написание. онлайнкурсы, web-сайт. Нужна сегментация на основе словаря/статистики (подробнее — глава 5.4).
- Значимая пунктуация. Токенизатор обязан знать исключения: c++, c#, .net, ip 192.168.0.1, e-mail, хэштеги. Их нельзя «зачищать» как обычную пунктуацию.
- Гранулярность. Токен может быть словом, n-граммой символов (для исправления опечаток и языков без пробелов) или субсловной единицей (BPE/WordPiece — мост к нейропоиску, Модуль 10).
Исправление опечаток (spelling correction)Инженерная заметка. Один и тот же код нормализатора и токенизатора компилируется в две точки: офлайн (индексирование документов) и онлайн (обработка запроса). На практике это часто буквально одна библиотека. Любое расхождение версий между ними — источник «молчаливых» провалов recall, которые трудно отлаживать: запрос вроде корректный, но ничего не находит, потому что термы не совпали по форме.
Запрос короток и часто содержит ошибки: опечатки клавиатуры, фонетические ошибки, неверная раскладка, склейки слов. Цель — предложить наиболее вероятный «исходный» запрос.
Шаг 1. Кандидаты. Для каждого слова генерируем кандидаты в пределах малого редакционного расстояния. Базовая мера — расстояние Дамерау—Левенштейна (Damerau–Levenshtein): минимальное число операций вставки, удаления, замены и транспозиции соседних символов, чтобы превратить одну строку в другую.
Интуиция. Левенштейн считает вставки/удаления/замены. Дамерау добавляет транспозицию (театр → тетар) как одну операцию, а не две, — потому что перестановка соседних букв при наборе очень частая ошибка.
Шаг 2. Ранжирование кандидатов. Среди кандидатов в пределах расстояния выбираем по модели «ошибочный канал × языковая модель»:Пример. тевизор → телевизор. Нужна одна вставка (ле? нет — посимвольно): тевизор → телвизор (вставка л) → телевизор (вставка е). Расстояние 2. А теавтр → театр: транспозиция ав→ва даёт расстояние 1 по Дамерау (против 2 по чистому Левенштейну).
P(исправление | опечатка) ∝ P(опечатка | исправление) · P(исправление)
- P(исправление) — языковая модель: насколько слово/биграмма частотны в корпусе и в логе запросов.
- P(опечатка | исправление) — модель ошибки: вероятность именно такого искажения (соседние клавиши на раскладке ошибаются чаще, транспозиции частые и т.п.).
Шаг 4. Решение и порог. Три исхода:
- Автоисправление (высокая уверенность) — ищем по исправленному, показываем плашку «исправлено на X, искать вместо этого Y».
- Подсказка (средняя уверенность) — ищем по оригиналу, но предлагаем «возможно, вы имели в виду X».
- Без вмешательства (низкая уверенность или редкий, но валидный токен).
Внимание. Цена ложного исправления асимметрична. Исправить редкое, но правильное слово (имя, бренд, термин, код товара) в популярное — катастрофа: пользователь получает выдачу не по своему запросу и теряет доверие. Поэтому порог автоисправления держат высоким, а редкие токены, найденные в индексе в достаточном количестве, защищают от исправления.
Частые заблужденияИнженерная заметка. Перебор всех слов словаря на расстояние ≤ 2 — дорого. Ускоряют это структурами: BK-деревья, конечные автоматы Левенштейна, или индексом «удалений» (SymSpell-подход) — заранее строят все варианты слов с удалёнными символами и ищут по хэшу. Латентность исправления критична: оно на горячем пути и должно укладываться в единицы миллисекунд.
Заблуждение. «Нормализацию запроса можно настроить отдельно от индекса — лишь бы выглядело разумно.» Нет: единственный корректный критерий — совпадение нормальной формы с индексом. Любое одностороннее «улучшение» нормализатора запроса без переиндексации документов рвёт совпадения.
Лаба / практикаЗаблуждение. «Чем агрессивнее исправлять опечатки, тем лучше.» Агрессивное автоисправление убивает запросы по редким сущностям (артикулы, имена, неологизмы) и порождает выдачу «не по делу». Хорошая система чаще предлагает, чем молча исправляет.
Дан мини-словарь из 200 частотных слов с частотами и набор из 10 запросов с опечатками (включая транспозиции, склейки, неверную раскладку).
- Реализуйте расстояние Дамерау—Левенштейна (псевдокод/Python).
- Для каждого слова запроса сгенерируйте кандидатов с расстоянием ≤ 2 и отранжируйте их по P(опечатка|испр.)·P(испр.) (модель ошибки задайте простой: транспозиция — 0.3, замена соседней клавиши — 0.5, прочее — 0.1).
- Введите порог автоисправления и разметьте каждый запрос на {автоисправить / предложить / не трогать}.
- Сравните с эталонной разметкой; посчитайте, сколько ложных исправлений вы сделали бы при двух разных порогах.
Контрольные вопросы
- Почему нормализатор запроса и нормализатор документа должны быть одним и тем же кодом? Что сломается при их расхождении?
- Чем расстояние Дамерау—Левенштейна отличается от Левенштейна и почему транспозиция выделена отдельной операцией?
- В формуле P(испр.|опеч.) ∝ P(опеч.|испр.)·P(испр.) за что отвечает каждый множитель и откуда берутся их оценки?
- Опишите ситуацию, в которой автоисправление вредит. Как система может её предотвратить?
- Почему снятие диакритики и слияние гомоглифов нельзя включать «глобально для всех языков»?
- Где в конвейере проходит граница между токенизацией и стеммингом/лемматизацией и в чём компромисс между стеммингом и лемматизацией?
- Какие токены токенизатор обязан НЕ ломать пунктуацией? Приведите три примера.
Цели обучения
После главы студент сможет:
- Объяснить разрыв словаря (vocabulary mismatch) и почему точного совпадения термов недостаточно.
- Различать расширение по словоформам, по синонимам и по переформулировкам и выбрать уместный уровень.
- Реализовать расширение запроса через структуру OR-групп с весами и объяснить влияние на recall и precision.
- Сравнить ручные тезаурусы, дистрибутивные эмбеддинги и псевдо-релевантную обратную связь (PRF) как источники расширений.
- Оценить риск «дрейфа запроса» (query drift) и спроектировать защиту от него.
Главная проблема текстового поиска — разрыв словаря: пользователь и автор документа называют одно и то же разными словами. Запрос авто дёшево, документ недорогой автомобиль. Совпадение по точным термам теряет такой документ. Расширение запроса (query expansion) добавляет к исходным термам родственные, чтобы поднять recall.
Три уровня расширенияИнтуиция. Расширение — это «и/или ещё вот так это называют». Вместо «найди документы со словом X» система говорит «найди со словом X, или с его формой, или с близким по смыслу словом — но за неточное совпадение начисляй меньше».
Код: Выделить всё
Уровень | Что добавляет | Риск | Пример
------------------+-------------------------------------------+----------------------------+-------------------------------------------------
Словоформы | другие формы того же слова (морфология) | почти нет | купить → купил, куплю, покупка
Синонимы | другие слова с близким значением | средний (многозначность) | авто → автомобиль, машина, тачка
Переформулировки | другая формулировка всего запроса | высокий (дрейф) | как убрать пятно от вина → вывести винное пятно
Синонимы. Источники:
- Ручные тезаурусы / онтологии — точные, но дорогие в поддержке и неполные.
- Дистрибутивная семантика (эмбеддинги). «Слова в похожих контекстах похожи по смыслу.» Из больших корпусов извлекаются близкие по векторам слова. Дёшево и широко, но шумно: близкими оказываются и антонимы (дешёвый/дорогой живут в одинаковых контекстах).
- Лог запросов и переформулировки сессий. Если пользователи часто после авто доуточняют машина, это сильный сигнал синонимии — добытый из реального поведения.
Как технически добавляется расширение
Расширения вставляются не как равноправные термы, а как взвешенные OR-группы (синсеты):
Код: Выделить всё
исходный: автомобиль AND купить
расширенный: (автомобиль^1.0 OR авто^0.7 OR машина^0.6)
AND
(купить^1.0 OR покупка^0.8 OR приобрести^0.5)
Псевдо-релевантная обратная связь (PRF)
Автоматический способ расширения без словарей: сделать первичный поиск, взять топ-k документов как предположительно релевантные, извлечь из них характерные термы (например, по методам вроде RM3/Rocchio) и добавить их в запрос, затем переискать.
Интуиция. «Посмотрим, какими словами обычно описывают то, что я ищу, в лучших найденных документах, и добавим эти слова в запрос.»
Внимание. Дрейф запроса (query drift). Если топ-k оказался нерелевантным (многозначный запрос ушёл не в ту сторону), PRF усилит ошибку: добавит слова из «не той» темы и уведёт выдачу ещё дальше. Защита: ограничивать число добавляемых термов и их вес, отбирать только термы, устойчиво встречающиеся в нескольких топ-документах, и не применять PRF к коротким навигационным запросам.
Частые заблужденияSEO-врезка. Расширение по синонимам и словоформам означает, что точное вхождение ключевого слова не обязательно. Страница про «недорогой автомобиль» может ранжироваться по запросу «дешёвое авто», даже без точной фразы. Поэтому современная оптимизация — это покрытие семантического поля темы (синонимы, словоформы, сопутствующие сущности), а не плотность одной фразы. Переспам точной фразой при этом не помогает (насыщение в Модуле 6) и ловится антиспамом (Модуль 16).
Заблуждение. «Расширение всегда улучшает поиск.» Оно поднимает recall ценой precision. На точных и навигационных запросах (см. 5.3) расширение чаще вредит: пользователю, ищущему конкретную сущность, не нужны «похожие».
Лаба / практикаЗаблуждение. «Эмбеддинги дают идеальные синонимы.» Дистрибутивная близость путает синонимы с антонимами и со-гипонимами (Москва/Питер близки по вектору, но это разные города). Эмбеддинги — источник кандидатов, а не готовая истина; их фильтруют.
Дан запрос из 2–3 слов, ручной тезаурус синонимов и мини-корпус из 10 документов.
- Постройте расширенный запрос как взвешенные OR-группы (оригинал — вес 1.0, синонимы — 0.5–0.7).
- Посчитайте, какие документы находятся только благодаря расширению, и проверьте, релевантны ли они на самом деле.
- Реализуйте простой PRF: возьмите топ-3 по первичному поиску, извлеките 3 самых характерных терма, добавьте их и переищите. Сравните топ до и после.
- Подберите такой запрос (или такой топ-3), на котором PRF уводит выдачу в сторону, и объясните механизм дрейфа.
Контрольные вопросы
- Что такое разрыв словаря и какими тремя уровнями расширения с ним борются?
- Почему расширения добавляют как взвешенные OR-группы, а не как обычные AND-термы?
- Сравните ручной тезаурус, эмбеддинги и лог запросов как источники синонимов: точность, полнота, стоимость.
- Опишите механизм псевдо-релевантной обратной связи и условие, при котором она ухудшает результат.
- Почему расширение особенно опасно для навигационных запросов (см. 5.3)?
- (SEO) Как факт расширения по синонимам меняет стратегию подбора ключевых слов для страницы?
- Почему близость в пространстве эмбеддингов не равна синонимии? Приведите контрпример.
Цели обучения
После главы студент сможет:
- Перечислить базовые классы намерения запроса и распознавать их по признакам.
- Объяснить, как класс интента меняет выбор формулы ранжирования, набор источников и фильтры (связь с Модулями 12 и 16).
- Распознавать свежий (freshness) и гео-интент (local intent) как ортогональные размерности.
- Спроектировать признаки и оценить классификатор интента; обосновать выбор метрики.
- Связать интент запроса с интентом страницы (SEO).
Один и тот же текст запроса может означать совершенно разные потребности. Намерение (intent) — это то, что пользователь на самом деле хочет получить. Распознать класс намерения критично, потому что класс определяет всю дальнейшую механику поиска: какую формулу применить, какие источники подмешать, какие фильтры включить, как сформировать страницу.
Базовая таксономия намерений
Код: Выделить всё
Класс | Что хочет пользователь | Маркеры | Идеальная выдача
-------------------------------+------------------------------------------+--------------------------------------------------------+--------------------------------------------------------------
Информационный | узнать, понять, прочитать | вопросительные слова, «что/как/почему», широкая тема | статьи, справки, разнообразие источников
Навигационный | попасть на конкретный известный ресурс | имя бренда/сайта, точная сущность | один правильный результат вверху, без «похожих»
Коммерческий / транзакционный | купить, заказать, сравнить, выбрать | «купить», «цена», «отзывы», «vs», модель товара | карточки товаров, цены, агрегаторы, разнообразие предложений
Свежий (freshness) | актуальное прямо сейчас | имена событий, «сегодня», новостной всплеск | свежие документы, новости, лента
- Свежесть (temporal/freshness intent). Запрос может «требовать актуальности». Бывает явной (новости сегодня) и неявной/всплесковой: запрос внезапно стал частым — вероятно, произошло событие, и пользователю нужно свежее, а не вечная энциклопедическая статья. Это связывает главу с поведенческими сигналами (Модуль 11) и с детектированием всплесков.
- Гео-интент (local intent). Запрос может требовать привязки к местоположению. Явный (кофейня в центре) и неявный (аптека, банкомат — почти всегда «рядом со мной»). Гео-интент включает геофильтры и переранжирование по расстоянию.
Как класс влияет на формулу и фильтры (связь с Модулями 12 и 16)Интуиция. Класс интента — это «режим работы поиска». Навигационный запрос — «найди ровно одну дверь и открой её». Информационный — «принеси хорошую библиотеку по теме». Коммерческий — «покажи витрину с ценами». Свежий — «что нового прямо сейчас». Одна формула не может одинаково хорошо обслужить все четыре режима.
Это центральная мысль главы. Классификатор интента — не украшение, а переключатель конвейера ранжирования.
1. Выбор кандидатов и источников (Модуль 12, отбор L0/L1).
- Коммерческий интент → подмешать вертикаль товаров/цен в федерацию источников.
- Свежий интент → подмешать новостной/свежий индекс, ослабить порог по дате.
- Гео-интент → активировать геоиндекс, ограничить кандидатов радиусом.
- Навигационный → агрессивно поднять кандидата с точным совпадением сущности.
Каскад ранжирования не использует одну универсальную формулу — он выбирает профиль весов под класс запроса:
- Навигационный → вес «точного совпадения сущности» и авторитетности (Модуль 7) резко вверх; разнообразие — вниз (нужен один ответ).
- Информационный → вес текстовой релевантности (Модуль 6) и качества/полноты документа вверх; допускается разнообразие источников.
- Коммерческий → вес коммерческих факторов (наличие цены, свежесть предложения, отзывы) вверх.
- Свежий → вес фактора давности (recency) резко вверх, иногда с временным затуханием; статический авторитет — вниз.
3. Постранжирование и формирование выдачи (Модуль 16).Инженерная заметка. Технически это часто реализовано как набор специализированных моделей ранжирования или наборов весов, между которыми переключает предсказанный класс (или мягкая смесь по вероятностям классов). Поэтому ошибка классификатора интента дорогая: она выбирает не ту формулу для всего запроса. Класс интента сам становится признаком модели ранжирования.
- Навигационный → подавить дубли и «похожие», показать один доминирующий результат; разнообразие почти не нужно.
- Информационный/коммерческий → наоборот, включить диверсификацию (показать разные интерпретации/поставщиков), чтобы покрыть неоднозначность.
- Свежий → правила сборки ленты, временные срезы.
- Гео → переупорядочивание по расстоянию и доступности на карте.
Признаки и обучение классификатораПример. Запрос «ягуар». Без интента — каша из животных, автомобилей и спортивных клубов. Классификатор (плюс гео- и поведенческий контекст) оценивает вероятности интерпретаций. Если сигналов мало — включается диверсификация в постобработке (Модуль 15): в топ попадают по одному представителю каждой интерпретации, чтобы хоть один ответил пользователю. Если контекст явный (ягуар цена, ягуар дилер) — коммерческий профиль, витрина авто.
Классификатор интента — обычно ML-модель (Модуль 9 даёт фундамент LTR/классификации). Признаки:
- Лексические: наличие маркеров (купить, цена, новости, вопросительные слова), сущности (бренд → навигационный сигнал).
- Из лога запросов: как обычно ведут себя пользователи после этого запроса — на какие типы результатов кликают (мост к Модулю 11).
- Темпоральные: всплеск частоты запроса → сигнал свежести.
- Гео: исторически кликали по локальным результатам → гео-интент.
Внимание. Метрику классификатора выбирают под цену ошибки, а не «accuracy вообще». Перепутать информационный и свежий — мягкая ошибка. Перепутать навигационный с коммерческим — грубая: пользователю, который шёл «к одной двери», вываливают витрину. Поэтому смотрят на ошибки по парам классов, а не на агрегат.
Частые заблужденияSEO-врезка. Интент страницы ↔ интент запроса. Это фундамент современного SEO. Страница ранжируется хорошо, только если её тип соответствует доминирующему интенту запроса:
- Запрос коммерческий («купить X») → побеждают страницы-витрины/карточки, а не статья-обзор.
- Запрос информационный («что такое X») → побеждает разъяснительный контент, а не страница покупки.
- Запрос навигационный (бренд) → побеждает официальный ресурс бренда; чужой странице тут «не пробиться».
Практический вывод: перед оптимизацией страницы определи доминирующий интент запроса (посмотри, какой тип страниц система уже ставит в топ — это её ответ на вопрос «какой интент я здесь вижу») и приведи тип своей страницы в соответствие. Несовпадение интента — самая частая причина, почему «хорошая» страница не ранжируется: она отвечает не на тот вопрос. Покрытие смежных интентов делают разными страницами (обзор отдельно, карточка покупки отдельно), а не одной «универсальной».
Заблуждение. «Интент — это просто тип запроса, метка для статистики.» Нет: интент — это управляющий сигнал, переключающий источники, формулу и постобработку. Это вход ранжирования, а не его выход.
Заблуждение. «У запроса всегда один интент.» Многие запросы смешанные или неоднозначные. Система работает с распределением вероятностей по классам и часто отвечает диверсификацией, а не выбором одного класса.
Лаба / практикаЗаблуждение (SEO). «Хватит ключевого слова на странице — и попаду в топ.» Если тип страницы не совпадает с интентом запроса, ключевое слово не спасёт: система уже «решила», какой тип контента отвечает на запрос.
Дан размеченный набор из ~40 запросов с метками {информационный, навигационный, коммерческий, свежий} и флагами {гео, свежесть}.
- Придумайте и реализуйте набор лексических признаков (маркеры, наличие бренда, вопросительные слова, темпоральные слова).
- Обучите простой классификатор (например, логистическую регрессию / наивный байес) и оцените его по матрице ошибок по парам классов, а не только accuracy.
- Для каждого класса выпишите, какой профиль ранжирования и какие фильтры он должен включить (ссылаясь на роли из Модулей 12 и 16).
- Найдите в наборе минимум один неоднозначный запрос и опишите, как его следует обслужить через диверсификацию.
Контрольные вопросы
- Перечислите базовые классы интента и по два маркера для каждого.
- Почему свежесть и гео-интент рассматривают как ортогональные размерности, а не как ещё два класса в общем списке?
- Как класс интента меняет: (а) выбор источников, (б) профиль весов формулы, (в) постобработку выдачи? Дайте по примеру (связь с Модулями 12 и 16).
- Почему ошибку классификатора интента оценивают по парам классов, а не общей точностью? Назовите «дорогую» пару.
- Что делает система, когда интент неоднозначен, и в каком модуле это реализуется?
- (SEO) Как определить доминирующий интент запроса по уже существующей выдаче и что с этим делать со страницей?
- Почему один и тот же контент, отвечающий «и на куплю, и на узнать», часто проигрывает специализированным страницам?
- Как лог запросов и темпоральные сигналы используются для предсказания интента?
Цели обучения
После главы студент сможет:
- Выполнить сегментацию запроса на смысловые единицы (фразы, сущности, операторы) и обосновать границы.
- Назначить термам веса важности и объяснить, как они входят в формулу релевантности.
- Представить запрос как дерево (синсеты, фразы, обязательность, операторы) и объяснить его обход.
- Показать, как дерево запроса передаётся в каскад ранжирования (Модуль 12) как структурированный план поиска.
- Связать вес терма с его IDF, с расширением (5.2) и с интентом (5.3).
К этой главе запрос уже нормализован (5.1), расширен (5.2) и классифицирован (5.3). Финальный шаг понимания — превратить «мешок слов» в структуру: понять, какие слова важнее, какие образуют неделимые единицы и как они логически связаны. Результат — дерево запроса, формальный план поиска, который уйдёт в индекс и в ранжирование.
Сегментация запроса
Сегментация (query segmentation) — разбиение последовательности термов на смысловые группы:
- Фразы / коллокации. белый дом — это сущность, а не «белый» И «дом». Такие группы ищутся как фраза (с учётом порядка и близости) и весят иначе.
- Сущности. Распознавание именованных сущностей (модель товара смартфон модели X2, имя, гео-объект) превращает несколько токенов в один смысловой узел.
- Операторы / атрибуты. Явные ("точная фраза", -минус слово, site:) и неявные (число → возможная цена/год, диапазон).
Интуиция. «Слова в запросе — не равноправная россыпь. Некоторые слипаются в неделимые куски (нижний новгород — не про низость и не про новизну), некоторые управляют поиском (минус-слово), некоторые — главные, а некоторые почти шум.»
Взвешивание термовПример. Запрос купить нижний новгород дёшево. Наивно: 4 равных терма. После сегментации: [купить] (намерение, коммерческий маркер) + [нижний новгород] (гео-сущность, неделимая фраза) + [дёшево] (модификатор). Совсем другая семантика — и другой план поиска.
Не все слова запроса одинаково важны. Веса термов (term weighting) говорят формуле, за совпадение каких слов начислять больше.
Источники веса:
- IDF (редкость). Редкое слово несёт больше информации, чем частотное (мост к Модулю 6). фотоаппарат важнее, чем и или купить.
- Стоп-слова / служебные — вес близок к нулю (но иногда значимы: to be or not to be).
- Сущности и редкие токены — вес вверх (часто это «ядро» запроса).
- Расширения (из 5.2) — вес вниз пропорционально уверенности.
- Сигнал важности из лога — какие слова пользователи дописывают/убирают, не меняя смысла (значит, они менее важны).
Запрос как деревоВнимание. Удаление стоп-слов и низкий вес — не одно и то же. Безусловное удаление ломает запросы, где служебное слово смыслоразличительно (vitamin a, the who). Безопаснее понизить вес, чем выбросить терм.
Финальное представление — дерево, узлы которого:
- Листья — термы (с весами).
- Синсеты (OR с весами) — терм и его расширения/формы (из 5.2).
- Фразовые узлы — неделимые группы (из сегментации), с требованием близости/порядка.
- Логические узлы — AND (мягкое — «желательно все»), обязательность (+), отрицание (−).
- Корень — весь запрос плюс метаданные интента (из 5.3).
Код: Выделить всё
QUERY (intent=commercial, geo=true)
/ | \
REQUIRED PHRASE MODIFIER
(купить) [нижний новгород] (дёшево)
/ | \ близость=1, порядок / \
синсет: OR (гео-сущность) синсет: OR
/ | \ / | \
купить^1 покупка^.8 приобрести^.5 дёшево^1 недорого^.7 дешевле^.6
Как дерево уходит в каскад (связь с Модулем 12)Интуиция. Дерево — это «скомпилированный запрос». Как компилятор превращает текст программы в AST, понималка запроса превращает строку в синтаксическое дерево поиска: что обязательно, что желательно, что неделимо, что чем заменимо, и с каким весом.
Дерево запроса — это план исполнения для серверов поиска:
- Отбор кандидатов (L0/L1). Обязательные узлы (REQUIRED) и фразовые узлы определяют, какие постинг-листы пересекать в индексе. Синсеты раскрываются в объединения постинг-листов.
- Скоринг (L2+). Веса листьев и узлов входят в формулу релевантности (Модуль 6) как коэффициенты вклада термов; метаданные интента в корне переключают профиль формулы (5.3 → Модуль 12).
- Близость и порядок. Фразовые узлы дают фактору близости (proximity) данные о том, какие термы должны стоять рядом.
Инженерная заметка. Дерево запроса — это контракт между пониманием запроса и исполнением. Чем богаче дерево (веса, синсеты, фразы, интент), тем точнее отбор и скоринг, но тем дороже исполнение: широкие синсеты раздувают объединения постинг-листов и латентность. Поэтому глубину расширения и ширину синсетов балансируют против бюджета времени ответа — типичный компромисс recall/latency, разрешаемый в каскаде (Модуль 12).
Частые заблужденияSEO-врезка. Раз система видит фразовые узлы и взвешивает термы по IDF, то «ядро» запроса — это его редкие, специфичные слова и сущности, а не частотные модификаторы. Оптимизировать страницу стоит вокруг этого ядра и его естественных формулировок; служебные и сверхчастотные слова веса почти не несут. И помни: фраза-сущность (нижний новгород) воспринимается целиком — разрывать её на странице бессмысленно.
Заблуждение. «Запрос — это мешок слов (bag of words), порядок и группировка не важны.» Для грубого отбора — приемлемо, но фразовые сущности, близость и обязательность сильно влияют на точность. нижний новгород ≠ новгород нижний в общем случае.
Лаба / практикаЗаблуждение. «Все слова запроса нужно искать как обязательные (AND).» Жёсткий AND по всем термам обнуляет recall на длинных запросах. Реальные системы используют мягкую обязательность: часть термов можно опустить, понизив скор, а не отбросив документ.
Дан запрос из 5–6 слов, включающий гео-сущность, коммерческий маркер и модификатор, плюс таблица df (частот документов) по корпусу.
- Выполните сегментацию: выделите фразовую сущность, маркер интента, модификаторы.
- Назначьте веса термам по IDF (idf = log(N/df)); стоп-словам — понизьте, сущности — повысьте.
- Постройте дерево запроса с узлами REQUIRED / PHRASE / синсет / MODIFIER, добавив к каждому синсету 1–2 расширения с весами.
- Опишите словами план исполнения: какие постинг-листы пересекаются на отборе, какие веса идут в скоринг, как метаданные интента переключают профиль (ссылка на Модуль 12).
- Покажите, как изменится дерево и план, если интент сменить с коммерческого на информационный.
Контрольные вопросы
- Что такое сегментация запроса и почему нижний новгород нельзя обрабатывать как два независимых терма?
- Из каких источников складывается вес терма? Почему понижение веса предпочтительнее удаления стоп-слова?
- Перечислите типы узлов дерева запроса и приведите для каждого пример.
- Как обязательные и фразовые узлы влияют на отбор кандидатов (L0/L1) в каскаде (Модуль 12)?
- Как метаданные интента в корне дерева влияют на скоринг? Свяжите с главой 5.3.
- В чём компромисс между богатством дерева (широкие синсеты, глубокое расширение) и латентностью ответа?
- Почему жёсткий AND по всем термам вреден на длинных запросах и чем его заменяют?
- (Связь) Как IDF-веса в дереве согласуются с формулой релевантности из Модуля 6?
- Сырая строка запроса — зашумлённая проекция намерения; задача модуля — превратить её в структурированное обогащённое представление до обращения к индексу.
- Онлайн-офлайн симметрия: нормализатор и токенизатор запроса обязаны совпадать с теми, что применялись к документам, иначе термы не сойдутся и recall молча проваливается.
- Исправление опечаток = генерация кандидатов (расстояние Дамерау—Левенштейна) × модель «канал ошибки × языковая модель»; цена ложного исправления асимметрична, поэтому чаще предлагают, чем молча исправляют.
- Расширение (словоформы → синонимы → переформулировки) борется с разрывом словаря и поднимает recall ценой precision; добавляется взвешенными OR-группами; PRF полезна, но рискует дрейфом запроса.
- Класс интента (информационный/навигационный/коммерческий/свежий + ортогональные гео и свежесть) — это управляющий сигнал, переключающий источники, профиль формулы (Модуль 12) и постобработку/диверсификацию (Модули 15–16).
- Ошибку классификатора интента оценивают по парам классов: путать навигационный с коммерческим — дорого.
- Финальное представление — дерево запроса: листья-термы с весами, синсеты, фразовые узлы, обязательность и метаданные интента; это «скомпилированный запрос» и контракт с каскадом исполнения.
- (SEO) Совпадение типа страницы с доминирующим интентом запроса важнее плотности ключевых слов; ядро запроса — редкие специфичные слова и сущности, а не частотные модификаторы.
- Онлайн-офлайн симметрия — требование, чтобы нормализация/токенизация запроса совпадали с применёнными к документам при индексировании.
- Расстояние Дамерау—Левенштейна — минимальное число вставок, удалений, замен и транспозиций соседних символов между двумя строками.
- Модель канала ошибки (error model) — вероятность конкретного искажения слова при наборе; множитель P(опечатка|исправление).
- Разрыв словаря (vocabulary mismatch) — несовпадение слов запроса и слов документа при одинаковом смысле.
- Расширение запроса (query expansion) — добавление родственных термов (формы, синонимы, переформулировки) для повышения recall.
- Синсет — узел дерева запроса вида взвешенного OR из терма и его расширений.
- Псевдо-релевантная обратная связь (PRF) — автоматическое расширение запроса термами из топ-k первичной выдачи.
- Дрейф запроса (query drift) — уход выдачи в сторону из-за расширения по нерелевантному топу.
- Интент (намерение) запроса — истинная потребность пользователя; класс, переключающий механику поиска.
- Навигационный / информационный / коммерческий / свежий интент — базовые классы намерения.
- Гео-интент (local intent) — потребность в результатах, привязанных к местоположению.
- Свежесть (freshness intent) — потребность в актуальных по времени результатах.
- Сегментация запроса (query segmentation) — разбиение запроса на смысловые единицы (фразы, сущности, операторы).
- Взвешивание термов (term weighting) — назначение термам важности (часто на основе IDF) для формулы релевантности.
- Дерево запроса — структурированное представление запроса (термы, синсеты, фразы, логика, интент) как план исполнения.
- Мягкая обязательность — режим, где часть термов можно опустить со штрафом к скору, а не отбросить документ.
- Опирается на Модуль 1 (Information Retrieval): IDF, модель «мешка слов», recall/precision, языковые модели.
- Использует Модуль 3 (каноникализация) и Модуль 4 (индекс): нормализация запроса обязана быть симметрична нормализации документов; постинг-листы — мишень дерева запроса.
- Питает Модуль 6 (текстовая релевантность): веса термов и синсеты входят в формулу скоринга; IDF общий.
- Питает Модуль 12 (каскад ранжирования и serving): дерево запроса = план отбора и скоринга; класс интента переключает профиль формулы и источники.
- Питает Модули 15–16 (формирование выдачи, постранжирование, антиспам): интент управляет диверсификацией, подавлением дублей и сборкой выдачи.
- Связан с Модулем 9 (LTR) и 11 (поведенческие сигналы): классификатор интента обучается, в т.ч. на логах кликов и переформулировок.
- Связан с Модулем 7 (ссылочный граф): навигационный интент повышает вес авторитетности.
- Классические работы по исправлению орфографии и шумному каналу (noisy channel model), редакционные расстояния и эффективные структуры поиска по словарю.
- Обзоры по расширению запроса: тезаурусы, дистрибутивная семантика, псевдо-релевантная обратная связь и её устойчивость.
- Литература по классификации намерения запросов и таксономиям интента в веб-поиске.
- Работы по сегментации запросов и распознаванию именованных сущностей в коротких текстах.
- Материалы по структурированным запросным языкам и представлению запроса как взвешенного дерева (структурированные модели поиска).