RuModernBERT, родная токенизация, двухэтапное обучение (лучшая модель)

Ветка main репозитория hfvladkon/bert_token_classification_detector.

Разметчик дефектов в ответах Qwen3.8-Flash-Next. Модель помечает токены ответа Qwen, в которых есть языковой дефект: иероглифы среди русского текста, латинские и прочие иностранные вставки, смешение алфавитов внутри слова, транслитерация, ошибки согласования, управления, морфологии, орфографии и пропуски слов.

  • Вход: текст ответа (декодированные без потерь токены Qwen) в родной токенизации энкодера; вероятности усредняются обратно на токены Qwen.
  • Выход: метка на каждый токен ответа Qwen: O, BAD-script, TAIL-script, BAD-grammar, TAIL-grammar. BAD — первый дефектный токен ошибки, TAIL — продолжение той же ошибки.
  • Пороги (config.defect_threshold, [алфавит, грамматика]): [0.5, 0.9]. Токен считается дефектным, если сумма вероятностей BAD+TAIL его группы не меньше порога. Пороги подобраны по предсказаниям вне фолдов кросс-валидации (или на val, где CV нет); порог, подобранный на val основного сплита, лежит в config.defect_threshold_val.

Как запустить

import sys
from huggingface_hub import snapshot_download
path = snapshot_download("hfvladkon/bert_token_classification_detector", revision="main")
sys.path.insert(0, f"{path}/code")
from tag import Tagger

t = Tagger(path)
# ответ текстом (токенизируется токенизатором Qwen3.8), либо готовые id Qwen: t.tag_ids(ids, answer_start, query)
ids, answer_start, probs, spans = t.tag_text("текст ответа", query="вопрос пользователя")
print(spans)   # [{'tokens': [s, e], 'text': ..., 'p': ..., 'group': 'script'|'grammar'}]

Из командной строки: python code/tag.py --model <path> --query "..." --answer-file answer.txt. Нужны torch и transformers 5.x.

Обучение

Данные: 1000 ответов Qwen3.8-Flash-Next, размеченных вручную агентом по токенам (1129 ошибок; схема O / BAD / TAIL, зависимые, спорные и неуверенные места в обучении не участвуют), плюс исправленные версии тех же ответов как негативы и синтетические ошибки (pymorphy3: согласование, управление, морфология, орфография, пропуски; вставки иероглифов, латиницы и смешение алфавитов) на русской Википедии. Сплит 800 / 100 / 100 ответов.

Этап 1: только синтетика на русской Википедии и Викитеке (8000 документов, около 15 тыс. ошибок). Этап 2: реальная разметка плюс грамматическая синтетика с весом 0.3, 6 эпох, lr 3e-5, лучшая эпоха по F1 на пересечении спанов.

Качество

Метрика — совпадение спанов по пересечению: эталонная ошибка найдена, если её пересекает предсказанный спан той же группы; предсказанный спан верен, если пересекает эталонный. Спаны извлекаются из BIO так же, как в seqeval.

оценка P R F1 F1 алфавит F1 грамматика
кросс-валидация, 1000 ответов (кросс-валидация той же схемы (CV-G)) 0.79 0.58 0.669 0.930 0.278
test основного сплита, 100 ответов 0.70 0.56 0.622 0.962 0.251

Test содержит 114 ошибок, разброс между сидами там до ±0.07 F1, поэтому модели сравниваются по кросс-валидации. Если грамматику нужно ловить чаще: порог грамматики 0.5 даёт по CV F1 грамматики 0.311 (P 0.38, R 0.26) при общем F1 0.658.

Все ветки

ветка CV F1 CV P CV R CV F1 алфавит CV F1 грамматика test F1
main 0.669 0.79 0.58 0.930 0.278 0.622
xlm-roberta-large-qwen-tokens-2stage 0.661 0.84 0.54 0.920 0.204 0.635
rumodernbert-qwen-tokens-2stage 0.642 0.86 0.51 0.903 0.138 0.597
mrt5-small-bytes-2stage 0.622 0.88 0.48 0.903 0.011 0.584
byt5-small-bytes – – – – – 0.573

Ограничения: разметка агентская и неполная, часть «ложных» срабатываний — настоящие непомеченные ошибки. Грамматику все модели находят заметно хуже, чем алфавитные дефекты (иероглифы находятся почти всегда, английские вставки — примерно в 95% случаев).

Downloads last month
24
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 hfvladkon/bert_token_classification_detector

Finetuned
(17)
this model