Instructions to use Krasovskiy/anchor-words with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Krasovskiy/anchor-words with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="Krasovskiy/anchor-words")# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("Krasovskiy/anchor-words") model = AutoModelForSequenceClassification.from_pretrained("Krasovskiy/anchor-words", device_map="auto") - Notebooks
- Google Colab
- Kaggle
anchor-words
Определяет, чем является слово в поисковом запросе: заведение, игра, способ оплаты, регион, предложение или обычное слово. Нужна затем, что страницу задаёт названная в запросе сущность, а не близость текстов: «betway bonus» и «casumo bonus» похожи почти дословно, но это две разные страницы.
Полное дообучение xlm-roberta-base, 278 млн параметров, шесть классов. На
RTX 4090 размечает 7825 слов в секунду — сорок тысяч слов ядра считаются за
секунды.
Что на входе
Слово в отрыве ничего не значит: «quatro» читается как числительное, «delta» как буква. Поэтому рядом идут запросы, в которых слово встречается, самые частотные первыми. Формат обязан совпадать до символа:
слово: betway
запрос: betway casino | betway login | betway canada | betway app | betway bonus
from transformers import AutoModelForSequenceClassification, AutoTokenizer
tok = AutoTokenizer.from_pretrained("Krasovskiy/anchor-words")
model = AutoModelForSequenceClassification.from_pretrained("Krasovskiy/anchor-words")
текст = "слово: betway\nзапрос: betway casino | betway login | betway canada"
метка = model.config.id2label[
model(**tok(текст, return_tensors="pt", truncation=True, max_length=64))
.logits.argmax(-1).item()]
Классы и качество
Отложенная четверть, деление хешем от слова.
| класс | что это | F1 |
|---|---|---|
| WORD | обычное слово ниши | 0,906 |
| BRAND | заведение | 0,872 |
| GEO | страна, регион, город | 0,826 |
| PAY | способ оплаты | 0,824 |
| OFFER | вид предложения | 0,755 |
| PRODUCT | игра или вид игры | 0,538 |
Верных 85,8%, macro F1 0,787.
Пределы, о которых надо знать
PRODUCT слабее всех, и это не случайность. Игра почти всегда называется
формой из нескольких слов — «book of ra», «sweet bonanza», «alaxe in
zombieland», — а модель отвечает про слово. Одиночное book или sweet
обычное, и разметка их таковыми и считает; страницу игры задаёт форма
целиком. Пользуйтесь каталогом игр там, где он есть.
Производителя игр от заведения по запросу отличить нельзя. У habanero,
stakelogic, spinomenal запросы вида «X casino» — ровно как у казино. Класс
PROVIDER в модель намеренно не включён: его закрывает справочник точным
совпадением, и это надёжнее любой догадки.
Модель не знает рынка, она знает текст. Мнение о слове «fun» или «bono» ненадёжно. В работающем инструменте её ответ — третий по старшинству источник после справочников и подсказок Google, а не первый.
Обучающая выборка размечена не человеком. Метки собраны из свидетельств: подтверждение подсказками, кураторские справочники, поведение слова в ядре. При проверке в выборке нашлись отравленные метки — родовые слова ниши стояли брендами из-за того, что составные имена справочника разбирались на слова. Ошибка исправлена, но происхождение меток стоит держать в уме.
Чем мерить не надо
Accuracy при таком дисбалансе врёт: обычных слов в ядре около четырёх пятых, и модель, метящая всё словом, получит 80%. Смотрите на полноту по классам — прежде всего, сколько имён модель не узнала.
Родственная модель
anchor-pairs отвечает на
второй вопрос кластеризации: два запроса — одна страница или разные.
Два замера, и они не равны
Числа выше сняты на отложенной выборке: слова, которых не было в обучении ни из одного источника. Это обычная проверка «умеет ли модель обобщать».
Есть второй замер, на нарочно трудном тесте: все 112 спорных случаев, которые разбирались вручную, плюс пятая часть остальной ручной разметки. Спорные — те, где два размечавших не сошлись, то есть ровно граница задачи. Там:
| baseline (эмбеддинги + логрегрессия) | anchor-words | |
|---|---|---|
| macro F1 | 0,4442 | 0,4632 |
Прибавка +0,019 при заявленном пороге в пять пунктов — то есть на границе задачи модель почти не помогает. Чтение 120 худших ошибок объяснило почему: часть «ошибок» — ошибки самой разметки, а провайдера игр от заведения по одному запросу отличить нельзя в принципе. «netent casino» — это раздел сайта, а не бренд, и понять это можно только из справочника.
Оба числа верны, просто отвечают на разные вопросы. Берите первое, если нужна разметка обычного ядра; второе — чтобы не ждать чуда на трудных случаях.
Где не работает
- Провайдер против заведения — см. выше, закрывается справочником.
- Слово в отрыве от контекста. Без строки
запрос:модель гадает: «quatro» читается как числительное, «delta» как буква. - Ниша. Училась на гемблинге; на других нишах не мерялась.
Где её место в конвейере: честный замер 26 августа 2026
Модель делает то, что заявлено. Но на канадском ядре казино (35 581 запрос) её метки оказались почти не нужны, и это надо знать заранее.
Разметку сущностей можно получить бесплатно, прямо из самих запросов:
| источник | что даёт | забрал запросов |
|---|---|---|
| соседство с родовым словом | spinz casino -> spinz |
12 205 |
| позиция в запросе | имя стоит первым словом, порог 80% | 8 686 |
| поведение | про оператора спрашивают login, bonus, app, withdrawal |
1 971 |
| форма есть и сама, и с родовым | all jackpots + all jackpots casino |
708 форм |
Разница между 7295 метками модели и 2548 метками из справочников составила 7 ключей из 35 581. Конвейер, собранный на правилах выше, дал 11 755 страниц против 14 684 у сборки с моделью, при этом 11 679 групп держатся на 100% плотности. Считается четыре секунды на процессоре.
Отдельно проверен холодный старт — новая ниша, где нет ни справочника брендов, ни кэша подсказок Google. Без них конвейер даёт 11 599 страниц против 11 755: правила подхватывают всё сами.
Значит модель осмысленна там, где правил построить нельзя: ядро без устойчивых родовых слов, ниша без повторяющихся имён, разметка отдельного слова вне контекста ядра. В типовой задаче «собрать контент-план по выгрузке» она проигрывает скрипту по всем измерениям, кроме одного — ей не нужен корпус, она размечает слово сразу.
- Downloads last month
- 24
Model tree for Krasovskiy/anchor-words
Base model
FacebookAI/xlm-roberta-base