imgreencucumber's picture
Upload from https://github.com/imgreencucumber/ru-ner/commit/3da1f09c15be1c18a1907fba2b72f800c6e49d0e
bf9a7fa verified
|
Raw History Blame Contribute Delete
6.27 kB
---
language: ru
license: other
library_name: transformers
pipeline_tag: token-classification
base_model: DeepPavlov/rubert-base-cased
datasets:
- RCC-MSU/collection3
tags:
- ner
- onnx
- russian
metrics:
- f1
- precision
- recall
model-index:
- name: rubert-ner-collection3
results:
- task:
type: token-classification
name: Named Entity Recognition
dataset:
type: RCC-MSU/collection3
name: Collection3
split: test
metrics:
- type: f1
value: 0.976
name: F1 (entity-level, seqeval)
- type: precision
value: 0.972
- type: recall
value: 0.980
---
# rubert-ner-collection3
NER для русского языка: PER (люди), LOC (места), ORG (организации).
`DeepPavlov/rubert-base-cased`, дообученный на Collection3 (новости).
Кроме весов PyTorch в репозитории есть квантизованная ONNX-версия для CPU (`onnx/`, 170 МБ).
Код обучения, сравнение с CRF, Natasha и LLM, сервис на FastAPI: https://github.com/imgreencucumber/ru-ner
## Качество
Тест Collection3: 1922 предложения, 4001 сущность. Метрики на уровне сущностей (`seqeval`):
сущность засчитывается, только если совпали обе границы и тип. В скобках 95% bootstrap-интервал.
| | Precision | Recall | F1 |
|---|---|---|---|
| Все сущности | 0.972 | 0.980 | **0.976** (0.970–0.981) |
| PER | | | 0.998 |
| LOC | | | 0.981 |
| ORG | | | 0.943 |
| Сущности, которых не было в train | | | 0.957 |
ONNX int8 по качеству не отличается от исходной модели: F1 0.977 (0.971–0.982), разница с PyTorch в пределах шума
(парный bootstrap).
Цифры выше получены с декодированием, которое не допускает некорректных BIO-последовательностей
(Витерби с запретом `O → I-X`). Если выбирать метку каждого слова независимо (argmax), F1 0.974.
Стандартный `pipeline` из `transformers` тоже выбирает метки независимо, хотя части слов обрабатывает немного иначе.
Для сравнения на том же тесте: Natasha 0.935, CRF 0.901, GigaChat-3-Ultra с примерами в промпте 0.828.
**Другой домен.** На тесте WikiNEuRal-ru (Википедия) F1 0.799. Разметка WikiNEuRal автоматическая и содержит класс MISC,
которого нет в Collection3, так что цифра занижена: часть «ошибок» приходится на MISC-сущности.
## Использование
С `transformers`:
```python
from transformers import pipeline
ner = pipeline("token-classification", model="imgreencucumber/rubert-ner-collection3", aggregation_strategy="simple")
ner("Глава Минфина Антон Силуанов встретился в Москве с представителями МВФ.")
```
ONNX-версия на CPU, без PyTorch, через пакет из репозитория проекта:
```python
# pip install git+https://github.com/imgreencucumber/ru-ner
from huggingface_hub import snapshot_download
from ru_ner.inference import OnnxBertNER
path = snapshot_download("imgreencucumber/rubert-ner-collection3", allow_patterns=["onnx/*"])
ner = OnnxBertNER(f"{path}/onnx")
ner.extract("Глава Минфина Антон Силуанов встретился в Москве с представителями МВФ.")
# [{'text': 'Минфина', 'type': 'ORG', 'start': 6, 'end': 13}, ...]
```
## Скорость
Одно предложение за вызов, медиана, Intel Core i3-8100 (4 ядра):
| Вариант | Задержка |
|---|---|
| ONNX int8, CPU | 15.9 мс |
| ONNX fp32, CPU | 25.6 мс |
| PyTorch, CPU | 35.9 мс |
| PyTorch, GTX 1060 | 12.8 мс |
## Обучение
- Данные: Collection3, официальные сплиты train / validation / test (9301 / 2153 / 1922 предложения).
- 4 эпохи, learning rate 3e-5, batch 16, linear warmup 10%, weight decay 0.01, `max_length=128`, seed 42.
- Лучшая эпоха выбиралась по F1 на validation, тест в выборе не участвовал.
- GTX 1060 6GB, 11 минут.
- ONNX: экспорт через `torch.onnx` (dynamo), оптимизация графа ONNX Runtime, динамическая int8-квантизация
(`per_channel=True`, `reduce_range=True`).
## Ограничения
- Обучена на новостях 2010-х. На текстах другого стиля (соцсети, документы, Википедия) качество ниже.
- Только три типа сущностей. Даты, суммы, должности и т. п. не размечаются.
- Модель повторяет соглашения разметки Collection3: например, кавычки иногда входят в название организации,
а должность в сущность не входит никогда.
- Около 58% сущностей теста встречались в train, поэтому F1 на тесте частично отражает запоминание.
F1 на новых сущностях (0.957) — более честная оценка обобщения.
## Лицензия
У базовой модели `DeepPavlov/rubert-base-cased` лицензия не указана, у Collection3 указана `other`,
поэтому и здесь `other`. Перед коммерческим использованием проверьте условия базовой модели и датасета.
Код проекта распространяется по лицензии MIT.