kwtopic-pairs — одна страница или разные

Кросс-энкодер, который отвечает на один вопрос: эти два поисковых запроса должны попасть на одну страницу сайта или на разные?

A cross-encoder that answers a single question: should these two search queries land on the same page of a website, or on different ones? Trained on 25 797 human-labelled query pairs from six niches, mostly Russian and Ukrainian. It is a layer inside a keyword-clustering pipeline, not a general-purpose reranker — see the limitations, they are specific and they matter.

Зачем она нужна

Семантику обычно кластеризуют эмбеддингами: похожие по вектору запросы падают в одну группу. Но «похожи» и «одна страница» — разные вещи. Модель учили именно на этой границе, по группировкам, которые человек сделал руками.

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

Что показала на тесте

Тест — 2475 пар из тех же ниш; запросы с обучающими не пересекаются, утечка между частями проверяется отдельно.

точность полнота F1 верных
эмбеддинги базовой модели + подобранный порог 75,7% 79,1% 77,4% 77,1%
этот кросс-энкодер 82,9% 84,0% 83,4% 83,4%

Обучение — 87 секунд на RTX 4090.

Вклад в готовый контент-план, попарная сверка с ручной группировкой человека:

  • разделение групп моделью: F1 плана на медицинской нише 59% → 83,7%;
  • слияние групп моделью: полнота 37,5% → 57,4%.

Как пользоваться

from sentence_transformers import CrossEncoder

model = CrossEncoder("Krasovskiy/kwtopic-pairs", max_length=64)

print(model.predict([
    ("мрт головного мозга", "мрт головного мозга цена"),
    ("мрт головного мозга", "мрт коленного сустава"),
    ("замовити лендінг", "лендінг під ключ"),
    ("seo продвижение сайта", "seo продвижение интернет магазина"),
]))
# [0.97 0.03 0.95 0.06]

Ответ — вероятность от 0 до 1: единица означает «одна страница».

Что она видит и где ошибается

Настоящие ответы модели, не придуманные:

пара ответ верно?
мрт головного мозга · мрт головного мозга цена 0.97 да, одна страница
мрт головного мозга · мрт коленного сустава 0.03 да, разные
логотип на заказ · визитка на заказ 0.03 да, разные
seo продвижение сайта · seo продвижение интернет магазина 0.06 да, разные — тонкий случай
замовити лендінг · лендінг під ключ 0.95 да, одна
доставка пиццы киев · доставка пиццы харьков 0.98 нет, это разные гео-страницы
купить iphone 15 · купить iphone 16 0.94 нет, разные товары
5 dollar deposit casino · 50 dollar deposit casino 0.96 нет, разные суммы
bonus code · promo code 0.09 нет, это одна страница

Закономерность видна: пары, различающиеся только числом, гео или брендом внутри одинакового шаблона, модель сливает. Она смотрит на форму запроса, а разницу здесь несёт значение переменной, а не форма.

Отсюда правило применения: переменные вынимаются из запроса до модели. Сумма, город, модель товара, имя компании — это отдельный слой, факт из текста запроса, и он сильнее любой догадки. Модель зовут после него, на то, что осталось.

Обратный случай (bonus code · promo code — синонимы в незнакомой нише) закрывается фактом с другой стороны: если конкурент держит оба запроса на одном адресе, решение уже принято поисковиком.

Пороги

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

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

Как применять к ядру

Всех пар в ядре из 30 тысяч запросов больше четырёхсот миллионов — гонять модель по ним нельзя. Только по кандидатам:

  • внутри собранной группы — каждый запрос против главного запроса группы;
  • на границах соседних групп — их главные запросы между собой.

Порядка сотни тысяч пар, считается за минуты.

Как обучалась

База: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, 12 слоёв, 384 измерения. Вход обрезан до 64 токенов — запросы короткие. Две эпохи, батч 64, BinaryCrossEntropyLoss.

Данные: kwtopic-pairs-dataset — 25 797 пар из шести ниш — веб-студия, биржа фриланса, новостной портал, две медицинские тематики, B2B-сервис. Кириллицей написаны 18 360 пар, латиницей 7437. Деление: 20 563 обучение, 2759 проверка, 2475 тест.

Положительные пары — запросы, которые человек своей рукой положил в одну группу. Отрицательные — из разных групп, причём 65% трудные: у пары есть общее слово (цена, заказать, online, мрт, jobs), и по пересечению слов их не различить.

Датасет проходит десять проверок, и обучение не стартует, пока все десять не зелёные:

  • нет утечки запросов между частями — сплит назначается запросу, а не группе (на этом уже обжигались: утекало 81% теста);
  • классы сбалансированы в каждой части;
  • нет пар запроса с самим собой, противоречиво размеченных и повторов;
  • больше половины отрицательных — трудные;
  • ни одна ниша не занимает больше половины выборки;
  • все ниши есть в обучающей части.

Ограничения

  • Числа, гео и бренды внутри одинакового шаблона сливаются — см. таблицу выше. Выносите их отдельным слоем.
  • Не знает вашей ниши. Обучающие ниши — услуги, медицина, B2B, медиа. На товарных каталогах с артикулами и размерами проверьте на своём эталоне прежде, чем ставить в работу.
  • Не заменяет факты. Есть выдача — какая страница конкурента ранжируется по запросу — она весомее модели: там решение принял поисковик. Модель нужна там, где фактов нет.
  • Вложенные имена (northstar и northstar bets) различает плохо.
  • Работает по паре, а не по группе: не скажет, на сколько частей резать группу, только относится ли запрос к её ядру.
  • Языки за пределами обучающих (арабский, греческий, романская группа) наследуются от базовой модели и на этой задаче не мерились.

Лицензия и происхождение

Apache 2.0, как у базовой модели. Обучающие пары выложены отдельно: Krasovskiy/kwtopic-pairs-dataset — 25 797 пар, шесть ниш, десять проверок качества, CC BY 4.0. Названия проектов там обобщены до типа ниши.

Модель — слой инструмента kwtopic, который собирает контент-план из выгрузок ключевых слов и у каждой группы записывает основание: по факту она собрана или по догадке.

Downloads last month
14
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Krasovskiy/kwtopic-pairs

Dataset used to train Krasovskiy/kwtopic-pairs