← Все статьи

Zero-Shot классификация поискового интента: автоматизация семантики методами NLP на Python

11 мин чтенияОбновлено 02.10.2026
Zero-Shot классификация поискового интента: автоматизация кластеризации семантики методами машинного обучения

Кризис эвристик: почему ручная сортировка семантики не масштабируется

При работе с семантическими ядрами объемом в десятки тысяч запросов классические методы группировки быстро достигают предела эффективности. Традиционный SEO-процесс строится либо на ручном просмотре ключевых слов в электронных таблицах, либо на сопоставлении по словарям маркерных слов («купить», «цена», «инструкция», «отзывы», «каталог»). На практике эти эвристики сталкиваются с фундаментальными барьерами, когда в выборку попадает многословный диалоговый хвост (long-tail).

Уязвимости словарного и эвристического подхода

  • Контекстная слепота к многосоставным намерениям: поисковые запросы вида «как подключить эквайринг для интернет-магазина тарифы» содержат одновременно маркеры информационного («как подключить»), коммерческого («тарифы») и сервисного действия. Простое совпадение по подстроке не способно определить доминирующую цель пользователя.
  • Экспоненциальные трудозатраты: ручная разметка 30 000 уникальных фраз требует сотен часов работы специалистов. При этом субъективность оценки неизбежно приводит к разнобою: разные специалисты классифицируют одинаковые по структуре фразы в разные кластеры.
  • Появление диалоговых формулировок: с развитием поисковых LLM-систем (SearchGPT, Perplexity, диалоговые ответы Яндекса и Google) пользователи все чаще вводят развернутые естественные вопросы. Словарные списки не покрывают синтаксические вариации живой речи.
  • Риск семантической каннибализации: ошибочная привязка запросов к неподходящим типам страниц приводит к созданию дублирующего контента и размытию релевантности сайта в поисковой выдаче.
Традиционная кластеризация по пересечению поисковой выдачи (SERP-кластеризация) частично снимает проблему, но она фиксирует лишь текущее состояние выдачи, не объясняя внутренний интент пользователя, и требует значительных затрат на выгрузку сотен тысяч URL.

Концепция Zero-Shot классификации на базе Natural Language Inference

Zero-Shot классификация позволяет определять принадлежность текста к произвольным категориям без предварительного обучения модели на размеченном обучающем датасете. В основе этого метода лежит задача распознавания естественного языкового вывода — Natural Language Inference (NLI).

Модель оценивает логическую связь между двумя утверждениями: предпосылкой (premise) и гипотезой (hypothesis). В контексте поисковой аналитики этот механизм работает следующим образом:

  • Предпосылка (Premise): сам поисковый запрос (например: «критерии выбора системы сквозной аналитики для b2b»).
  • Шаблон гипотезы (Hypothesis Template): параметризованная фраза вида «Этот поисковый запрос отражает намерение: {}.»
  • Кандидаты классов (Candidate Labels): список целевых интентов, сформированных под структуру проекта («сравнение и выбор решения», «покупка и заказ», «поиск информации и инструкции», «навигация по бренду»).

Модель вычисляет распределение вероятностей между классами следования (entailment), нейтральности (neutral) и противоречия (contradiction). Вероятность логического следования нормализуется с помощью функции Softmax, формируя точный скоринг уверенности для каждого кандидата интента.

Преимущества NLI-классификации перед наивной векторной близостью

  • Управляемая таксономия: вместо неконтролируемых кластеров от алгоритмов сжатия размерности и k-means, аналитик получает распределение по строго заданным бизнес-классам.
  • Высокая точность на коротких текстах: формулировка задачи через логическое следование позволяет учитывать синтаксическую структуру даже в запросах из двух-трех слов.
  • Калибровка уверенности: наличие скалярного скора (от 0 до 1) позволяет отсекать сомнительные классификации и отправлять на дополнительный контроль только пограничные случаи.

Практическая реализация конвейера на Python

Для построения локального пайплайна классификации используется библиотека трансформеров с поддержкой пакетного инференса. Решение работает без вызова внешних закрытых API, сохраняя конфиденциальность коммерческой семантики и обеспечивая стабильную скорость обработки на локальном сервере или рабочей станции с ускорителем.

Архитектура конвейера классификации

Конвейер состоит из четырех этапов: нормализация входных фраз, пакетная передача в NLI-пайплайн, парсинг вероятностных весов и распределение по классам с проверкой порога достоверности.

import logging
from typing import List, Dict, Any
from transformers import pipeline

logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")

class IntentClassifierPipeline:
    def __init__(self, model_name: str, candidate_labels: List[str], hypothesis_template: str, device: int = -1):
        """
        Инициализация конвейера Zero-Shot классификации.
        device: -1 для CPU, 0 или выше для вычислений на GPU.
        """
        self.candidate_labels = candidate_labels
        self.hypothesis_template = hypothesis_template
        logging.info("Инициализация модели классификации: %s", model_name)
        self.classifier = pipeline(
            "zero-shot-classification",
            model=model_name,
            device=device
        )

    def classify_batch(self, queries: List[str], batch_size: int = 32, threshold: float = 0.5) -> List[Dict[str, Any]]:
        """
        Пакетная классификация поисковых запросов с контролем порога уверенности.
        """
        results = []
        cleaned_queries = [q.strip() for q in queries if q and q.strip()]
        
        logging.info("Начало обработки %d запросов (размер батча: %d)", len(cleaned_queries), batch_size)
        
        predictions = self.classifier(
            cleaned_queries,
            candidate_labels=self.candidate_labels,
            hypothesis_template=self.hypothesis_template,
            batch_size=batch_size,
            multi_label=False
        )

        for item in predictions:
            query = item["sequence"]
            top_label = item["labels"][0]
            top_score = float(item["scores"][0])
            
            # Формирование словаря всех вероятностей для анализа смешанного интента
            score_distribution = {
                label: round(float(score), 4)
                for label, score in zip(item["labels"], item["scores"])
            }
            
            assigned_intent = top_label if top_score >= threshold else "unclassified_low_confidence"
            
            results.append({
                "query": query,
                "primary_intent": assigned_intent,
                "confidence": round(top_score, 4),
                "is_confident": top_score >= threshold,
                "distribution": score_distribution
            })

        return results

if __name__ == "__main__":
    INTENT_LABELS = [
        "информационный поиск знаний и инструкций",
        "сравнение продуктов и выбор решения",
        "транзакционный заказ и коммерческая покупка",
        "навигационный поиск конкретного бренда или сервиса"
    ]
    
    TEMPLATE = "Пользователь ввел этот поисковый запрос с целью: {}."
    
    classifier = IntentClassifierPipeline(
        model_name="cointegrated/rubert-tiny-bilingual-nli",
        candidate_labels=INTENT_LABELS,
        hypothesis_template=TEMPLATE,
        device=-1
    )
    
    sample_queries = [
        "скачать чек-лист по внутренней оптимизации сайта",
        "сравнение облачных crm систем тарифы и функционал",
        "заказать аудит семантического ядра агентство",
        "вход в личный кабинет аналитики"
    ]
    
    classified_data = classifier.classify_batch(sample_queries, batch_size=4, threshold=0.45)
    for record in classified_data:
        print(f"Запрос: {record['query']} -> Интент: {record['primary_intent']} (Уверенность: {record['confidence']})")

Методика калибровки порогов и обработка пограничных запросов

Надежность промышленного конвейера зависит от правильной фильтрации результатов. При внедрении следует придерживаться следующих правил валидации:

  • Порог безусловного доверия (Confidence >= 0.65): запрос автоматически относится к выявленной категории и передается на этап группировки внутри посадочной страницы.
  • Зона смешанного интента (0.45 <= Confidence < 0.65): проверяется дельта между первым и вторым скором в распределении. Если разрыв составляет менее 0.15, запрос помечается как гибридный (например, «коммерческо-сравнительный»).
  • Зона низкой уверенности (Confidence < 0.45): фразы направляются в буфер ручной верификации или отсеиваются как нецелевой шум.

Маппинг классов интентов на структуру сайта и типы страниц

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

1. Информационный интент: обучающие статьи и документация

Цель пользователя — получить исчерпывающий, структурированный ответ на вопрос или пошаговое руководство.

  • Целевые типы страниц: экспертные статьи в блоге, страницы базы знаний, пошаговые инструкции (How-To), глоссарий терминов.
  • Обязательные элементы шаблона: вводный абзац с прямой сутью ответа (для быстрого считывания краулерами и сниппетами), иерархическое оглавление, маркированные списки, микроразметка Article и FAQPage.
  • Критерий успешности посадочной: глубина дочитывания, отсутствие возвратов в выдачу, переход к сопутствующим материалам.

2. Сравнительно-исследовательский интент: матрицы выбора и обзоры

Пользователь осознает проблему и находится на этапе взвешивания альтернатив перед заключением сделки.

  • Целевые типы страниц: посадочные страницы сопоставления продуктов, сводные рейтинги, обзоры «Сервис А против Сервиса Б», калькуляторы подбора.
  • Обязательные элементы шаблона: структурированные списки плюсов и минусов, критерии сопоставления по пунктам, резюме редакции с четким вердиктом, призыв к консультации или демо-доступу.
  • Критерий успешности посадочной: кликабельность элементов выбора, переход в карточки услуг или регистрацию.

3. Транзакционный интент: конверсионные страницы и листинги услуг

Пользователь готов к совершению целевого действия: заказу, расчету стоимости, покупке или отправке заявки.

  • Целевые типы страниц: продуктовые лендинги, карточки услуг, страницы тарифов, листинги каталога с фасетной фильтрацией.
  • Обязательные элементы шаблона: прозрачное ценностное предложение (УТП), блок стоимости или калькулятор цены, короткая форма лидогенерации, гарантии, микроразметка Service или Product.
  • Критерий успешности посадочной: процент конверсии в заявку, низкий процент отказов при первом переходе.

4. Навигационный интент: бренд и служебные разделы

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

  • Целевые типы страниц: главная страница, контакты филиалов, страница «О компании», страницы входа в личный кабинет.
  • Обязательные элементы шаблона: микроразметка Organization, точные адреса, ссылки на регламенты, понятная навигационная цепочка.

Оптимизация под генеративные поисковые движки (GEO, SearchGPT, Perplexity)

Внедрение Zero-Shot классификации напрямую влияет на видимость ресурса в поисковых системах нового поколения, работающих на базе больших языковых моделей и RAG (Retrieval-Augmented Generation).

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

  • Точность извлечения пассажей: если пользователь формулирует сложный сравнительный запрос, поисковый агент ищет страницы, где сравнение представлено дискретными, логически завершенными блоками. Страница, перегруженная агрессивным транзакционным текстом без сравнительной конкретики, отбрасывается на этапе вторичного ранжирования.
  • Семантическая чистота URL: кластеризация на базе NLI исключает смешение несовместимых интентов на одной странице, что позволяет поисковому краулеру однозначно атрибутировать документ нужной ветке знаний.
  • Формирование авторитетных цитат: страницы, точно отвечающие на информационную часть запроса, становятся источниками прямых ссылок в диалоговых ответах поисковых систем.

Пошаговый регламент внедрения методики в рабочие процессы

Для перехода на автоматизированную классификацию рекомендуется следующий порядок действий:

  1. Сбор и нормализация семантического массива: экспорт ключевых фраз из систем веб-аналитики и панелей вебмастеров, удаление дубликатов, нормализация регистра и спецсимволов.
  2. Фиксация таксономии и разработка шаблонов гипотез: формулировка от 3 до 6 непересекающихся бизнес-интентов с однозначным описанием в шаблоне NLI.
  3. Пакетная обработка семантики: прогон выборки через конвейер классификации на Python с сохранением детального вектора вероятностей.
  4. Сегментация по уровням уверенности: авторазведение уверенных кластеров (скор от 0.65 и выше) по посадочным страницам и экспертная выборочная проверка пограничной зоны.
  5. Интеграция с контентным планом: автоматическая генерация технических заданий копирайтерам с жестко заданным списком элементов под каждый тип интента.
Автоматизация этапа классификации сокращает цикл проектирования архитектуры крупного ресурса в 10 раз, гарантируя при этом отсутствие смысловых разрывов между пользовательским намерением и содержанием страницы.

Cobalt Media проведет предварительный аудит, определит приоритетные направления роста и подготовит прозрачную оценку работ без обещаний гарантированного места в выдаче.

по теме