Instructions to use hfvladkon/bert_token_classification_detector with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use hfvladkon/bert_token_classification_detector with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="hfvladkon/bert_token_classification_detector")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("hfvladkon/bert_token_classification_detector") model = AutoModelForTokenClassification.from_pretrained("hfvladkon/bert_token_classification_detector", device_map="auto") - Notebooks
- Google Colab
- Kaggle
|
Download README.md from hfvladkon/bert_token_classification_detector: direct link, hf CLI and curl.
- Browser
- Download file 6.58 kB
-
https://huggingface.co/hfvladkon/bert_token_classification_detector/resolve/main/README.md
- Command line
-
hf download hf://hfvladkon/bert_token_classification_detector/README.md
-
curl -L -o README.md https://huggingface.co/hfvladkon/bert_token_classification_detector/resolve/main/README.md
6.58 kB
| language: | |
| - ru | |
| library_name: transformers | |
| pipeline_tag: token-classification | |
| base_model: deepvk/RuModernBERT-base | |
| tags: | |
| - token-classification | |
| - qwen | |
| - error-detection | |
| # 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`. | |
| ## Как запустить | |
| ```python | |
| 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`](https://huggingface.co/hfvladkon/bert_token_classification_detector/tree/main) | 0.669 | 0.79 | 0.58 | 0.930 | 0.278 | 0.622 | | |
| | [`xlm-roberta-large-qwen-tokens-2stage`](https://huggingface.co/hfvladkon/bert_token_classification_detector/tree/xlm-roberta-large-qwen-tokens-2stage) | 0.661 | 0.84 | 0.54 | 0.920 | 0.204 | 0.635 | | |
| | [`rumodernbert-qwen-tokens-2stage`](https://huggingface.co/hfvladkon/bert_token_classification_detector/tree/rumodernbert-qwen-tokens-2stage) | 0.642 | 0.86 | 0.51 | 0.903 | 0.138 | 0.597 | | |
| | [`mrt5-small-bytes-2stage`](https://huggingface.co/hfvladkon/bert_token_classification_detector/tree/mrt5-small-bytes-2stage) | 0.622 | 0.88 | 0.48 | 0.903 | 0.011 | 0.584 | | |
| | [`byt5-small-bytes`](https://huggingface.co/hfvladkon/bert_token_classification_detector/tree/byt5-small-bytes) | – | – | – | – | – | 0.573 | | |
| Ограничения: разметка агентская и неполная, часть «ложных» срабатываний — настоящие непомеченные ошибки. Грамматику все модели | |
| находят заметно хуже, чем алфавитные дефекты (иероглифы находятся почти всегда, английские вставки — примерно в 95% случаев). | |