anchor-pairs

Отвечает на один вопрос: закрываются ли два поисковых запроса одной страницей или им нужны разные.

Это не мера похожести. «casino ohne lizenz» и «casino ohne einzahlung» похожи почти дословно, но это разные страницы. «one dollar deposit» и «1 dollar deposit» не похожи по написанию, а страница у них одна.

Модель заточена под гемблинг-нишу. Там она обучалась, там и мерялась; цифры ниже относятся к ней.

Зачем

При сборке семантического ядра ключевые слова надо разложить по будущим страницам сайта. Отраслевой способ — смотреть пересечение выдачи: если у двух запросов 7+ общих адресов в топ-10, это одна страница. Способ рабочий, но платный: на каждый запрос нужен вызов к выдаче, а запросов десятки тысяч.

Здесь модель обучена на решениях, которые выдача уже приняла, и дальше работает без неё.

Чем меряли

Порог выбран по PR-AUC, а не по доле верных ответов: классы неравные, и «доля верных» на них лжёт.

Три модели на одной оценочной выборке (20 000 пар, 42% положительных, сплит по группам-страницам, пересечение ноль), порог у всех подобран на обучающей половине:

модель PR-AUC точность при полноте 0.8
bge-m3, косинус эмбеддингов 0,9129 0,8670
bge-reranker-v2-m3, готовый реранкер 0,9234 0,8749
anchor-pairs 0,9636 0,9637

Сравнение именно с обученным реранкером, а не только с эмбеддером: побить эмбеддер кросс-энкодером — слабое достижение, они разного класса.

Разброс между тремя сидами 0,0084 при прибавке 0,04 — прибавка в пять раз больше шума. Обучение занимает две минуты на одной 4090.

MCC не приводим, и вот почему. У модели он выходит 0,5136 против 0,7183 у готового реранкера — хуже, хотя PR-AUC заметно выше. Причина не в качестве разделения, а в пороге: он подбирается на обучающей половине, которую модель видела при обучении, и оценки там завышены. У необученных моделей такого расхождения нет. Честный порог требует третьей части, отложенной и от обучения, и от теста; у нас её нет.

Прежняя редакция карточки приводила MCC 0,8065. Это число снято: оно было получено подбором порога на самой оценочной выборке, то есть подглядыванием в ответ. PR-AUC и точность при полноте от порога не зависят и остаются в силе.

На чём училась

1,2 млн пар, собранных из поведения конкурентов: какие запросы реально стоят на одной странице у тех, кто уже ранжируется. Не чьё-то мнение и не разметка по образцу.

  • Сплит по группам-страницам, а не по парам. Иначе один и тот же запрос попадает и в обучение, и в проверку, и метрика показывает память, а не умение. Пересечение между частями — ноль.
  • Тяжёлые негативы: пары из соседних страниц, а не случайные. На случайных задача вырождается — их отличает и мешок слов.
  • Серая зона выдачи (2-6 общих адресов) выброшена: там нет ответа «да» или «нет», там ответ «соседние темы».

Где не работает

На чужих нишах она хуже базовой: PR-AUC 0,8723 против 0,9004 у bge-m3 на золоте из шести ниш (медицина, фриланс, B2B, веб-студия, медиа). Это не изъян, а следствие задачи: её растили под гемблинг. Для другой ниши берите базовую или переучите на своих данных.

Отдельно: провайдера игр от заведения по одному запросу отличить нельзя в принципе — «netent casino» это раздел, а не бренд. Эту границу закрывают справочники, а не модель.

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

from sentence_transformers import CrossEncoder

model = CrossEncoder("Krasovskiy/anchor-pairs")
pairs = [
    ["1 dollar deposit casino", "one dollar deposit casino canada"],
    ["best online casino ontario", "netent slots free play"],
]
print(model.predict(pairs))

Выше 0,5 — одна страница. Порог можно поднять, если важнее не склеить лишнего.

Родня

  • Krasovskiy/anchor-words — разметка слов запроса по типам (имя, гео, оплата, игра, оффер, провайдер);
  • Krasovskiy/kwcluster-variables — код кластеризатора и справочники.

Где её место в конвейере: честный замер 26 августа 2026

PR-AUC 0,9641 не отменяется — на своей задаче модель работает. Но на канадском ядре казино вопрос «одна страница или разные» удалось закрыть дешевле и точнее точным вхождением формы: если запрос содержит другой запрос ядра целиком (mgm casino ontario содержит mgm casino), это одна страница, и вызывать модель незачем.

Конвейер на таких правилах дал 11 755 страниц, из них 11 679 с плотностью 100% — каждый запрос группы содержит её главное слово. Считается четыре секунды на процессоре, без видеокарты.

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

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

Model tree for Krasovskiy/anchor-pairs

Finetuned
(4192)
this model