Кросс-энкодер (англ. cross-encoder) — архитектура нейронной сети, применяемая в обработке естественного языка (NLP) для задач сравнения пар текстовых входных данных, таких как определение семантической близости или релевантности. В отличие от двунаправленных кодировщиков (би-энкодеров), кросс-энкодер обрабатывает оба входных текста совместно, пропуская их через модель одновременно, что позволяет модели учитывать тонкие взаимодействия между токенами обоих текстов.
Кросс-энкодер принимает на вход пару текстов (например, поисковый запрос и документ), объединяя их в одну последовательность, и пропускает через трансформерную сеть. На выходе модель выдаёт числовое значение (обычно от 0 до 1), указывающее на степень схожести или релевантности входной пары.
Ключевая особенность кросс-энкодера заключается в том, что он не создаёт векторных представлений (эмбеддингов) отдельных текстов. Это означает, что:
каждую пару «запрос—документ» необходимо обрабатывать отдельно;
невозможно предварительно вычислить эмбеддинги документов для быстрого поиска;
все вычисления выполняются в реальном времени для каждой пары.
Сравнение с би-энкодером
Характеристика
Би-энкодер
Кросс-энкодер
Обработка
Кодирует каждый текст отдельно
Кодирует оба текста совместно
Выход
Векторное представление (эмбеддинг)
Оценка релевантности (0–1)
Скорость
Высокая (возможно предварительное кодирование)
Низкая (каждая пара обрабатывается заново)
Точность
Средняя
Высокая
Масштабируемость
Высокая
Низкая
Би-энкодеры кодируют запрос и документ независимо, а затем сравнивают полученные эмбеддинги, например, с помощью косинусного расстояния. Это позволяет предварительно вычислить и сохранить эмбеддинги всех документов, что делает би-энкодеры идеальными для массового поиска. Однако при раздельном кодировании теряются тонкие семантические взаимосвязи между словами запроса и документа.
Кросс-энкодеры, напротив, благодаря механизму перекрёстного внимания (cross-attention) позволяют каждому токену запроса «взаимодействовать» с каждым токеном документа, что даёт значительно более точную оценку релевантности.
Применение в семантике и SEO
Двухэтапная архитектура поиска
В современных поисковых системах и системах генеративной выдачи ответов (RAG) широко применяется двухэтапная схема:
Этап 1: Быстрый поиск (retrieval). Би-энкодер или другой быстрый метод отбирает несколько сотен или тысяч потенциально релевантных документов из индекса. Этот этап должен быть максимально быстрым, чтобы охватить большой объём данных.
Этап 2: Реранжирование (re-ranking). Кросс-энкодер принимает отобранных кандидатов и для каждого вычисляет точную оценку релевантности относительно запроса, после чего документы пересортировываются.
Исследования показывают, что реранжирование с использованием кросс-энкодеров повышает точность поиска на 33–42% по сравнению с оценкой только на этапе поиска.
Сбор семантического ядра
В SEO-практике кросс-энкодеры используются для определения того, должны ли два разных поисковых запроса вести на одну страницу сайта или на разные.
Традиционный «отраслевой» способ заключается в анализе пересечения выдачи: если у двух запросов 7 и более общих адресов в топ-10 результатов, то этим запросам соответствует одна страница. Однако этот подход требует платных обращений к поисковой выдаче для каждого запроса, что при десятках тысяч запросов становится дорогостоящим.
Кросс-энкодер обучается на данных о реальном поведении поисковых систем — какие запросы действительно ведут на одни и те же страницы у уже ранжирующихся сайтов. После обучения модель может определять необходимость разделения страниц без обращения к поисковой выдаче.
Пример из практики: запросы «casino ohne lizenz» и «casino ohne einzahlung» почти дословно похожи, но требуют разных страниц. Напротив, «one dollar deposit» и «1 dollar deposit» отличаются по написанию, но должны вести на одну страницу. Кросс-энкодер способен улавливать такие нюансы, которые недоступны при простом сравнении текстов или эмбеддингов.
Оптимизация контента для реранжирования
Понимание принципов работы кросс-энкодеров позволяет SEO-специалистам целенаправленно оптимизировать контент. При реранжировании кросс-энкодер оценивает:
Прямоту ответа — насколько непосредственно контент отвечает на конкретный вопрос, а не на тему в целом;
Извлекаемость ключевых точек — насколько легко модель может выделить чёткий ответ из текста;
Структурированность информации — использование чётких заголовков, FAQ-схемы, формата «ответ в начале».
Страницы с FAQ-схемой получают примерно в 3 раза больше цитирований в AI-выдачах по сравнению с аналогичными страницами без неё. Причина – фрейминг, а не особая структура вёрстки или использование соответствующей микроразметки Schema.org.
Преимущества и ограничения
Преимущества
Высокая точность — кросс-энкодеры моделируют сложные взаимодействия между запросом и документом, недоступные би-энкодерам;
Глубокое семантическое понимание — способность различать ситуации, где тексты похожи по форме, но различны по смыслу, и наоборот;
Гибкость — могут быть обучены на специфических для ниши данных.
Ограничения
Высокая вычислительная стоимость — совместная обработка каждой пары требует значительных ресурсов;
Отсутствие эмбеддингов — невозможность предварительного индексирования документов;
Низкая скорость — не подходят для массового поиска в реальном времени;
Ограниченная масштабируемость — обработка больших наборов данных становится непрактичной.
Гибридные подходы
На практике наиболее эффективной стратегией является комбинирование би- и кросс-энкодеров:
Би-энкодер выполняет быстрый начальный поиск, возвращая топ-N кандидатов (обычно 50–100);
Кросс-энкодер выполняет точное реранжирование только этих кандидатов.
Такой подход сочетает масштабируемость би-энкодеров с точностью кросс-энкодеров, что делает его стандартом в современных поисковых системах, RAG-приложениях и рекомендательных системах.
Реализации
Наиболее популярной библиотекой для работы с кросс-энкодерами является Sentence-Transformers от Hugging Face. Пример использования:
from sentence_transformers.cross_encoder import CrossEncoder
model = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
scores = model.predict([["запрос", "документ"]])
Модель возвращает оценку релевантности для каждой пары.
Существуют также специализированные модели, обученные для конкретных задач и ниш, например, для гемблинг-тематики или электронной коммерции.