Реалізація розпізнавання імених сутностей (NER)
NER (Named Entity Recognition)—завдання розпізнавання та класифікації сутностей, згаданих у тексті: персон, організацій, місць, дат, грошових сум, продуктів. Фундаментальний компонент більшості систем обробки тексту.
Стандартні типи сутностей та розширення
Базові типи (CoNLL-2003 стандарт): PER (персони), ORG (організації), LOC (місцезнаходження), MISC (інше).
Для бізнес-застосувань стандартного набору недостатньо. Типові розширення:
-
Фінанси:
MONEY,PERCENT,DATE,TICKER,FINANCIAL_INSTRUMENT -
Медицина:
DISEASE,DRUG,DOSAGE,PROCEDURE,ANATOMY -
Юриспруденція:
LAW,COURT,CASE_NUMBER,LEGAL_ENTITY -
Логістика:
ADDRESS,POSTAL_CODE,VEHICLE_ID,CARGO
Інструменти для російського NER
natasha—найкращий вибір для базових завдань на російській:
from natasha import Segmenter, MorphVocab, NewsEmbedding, NewsNERTagger, Doc
segmenter = Segmenter()
emb = NewsEmbedding()
ner_tagger = NewsNERTagger(emb)
doc = Doc("Газпром підписав контракт з німецькою компанією Wintershall у Берліні.")
doc.segment(segmenter)
doc.tag_ner(ner_tagger)
# [(Газпром, ORG), (Wintershall, ORG), (Берліні, LOC)]
spaCy з російською моделлю (ru_core_news_lg): хорошо збалансована швидкість та якість, інтеграція в production-pipeline.
BERT-based (DeepPavlov, Hugging Face): DeepPavlov/rubert-base-cased-ner—для високої якості на складних текстах.
Fine-tuning для кастомних сутностей
При кастомних типах сутностей потрібен власний корпус та fine-tuning:
- Розмітка: Prodigy, Label Studio, або Doccano. Мінімум 200–500 прикладів на тип сутності
- Формат: IOB2 (BIO-tagging)—NER стандарт
- Навчання: HuggingFace TokenClassification з претренованим RuBERT
from transformers import AutoModelForTokenClassification, TrainingArguments
model = AutoModelForTokenClassification.from_pretrained(
"DeepPavlov/rubert-base-cased",
num_labels=len(label_list),
id2label=id2label,
label2id=label2id
)
Оцінка якості NER
Entity-level F1 (strict)—основна метрика. «Strict» означає: правильний тип І правильні межі span. Частковий збіг вважається помилкою.
Типові показники на російських текстах:
- PER: F1 95–97% (легко розпізнавані паттерни)
- ORG: F1 88–93% (багато скорочень, абревіатур)
- LOC: F1 90–95%
- Кастомні доменні сутності: 80–90% після fine-tuning на 1K+ прикладах
Складні випадки
- Вкладені сутності: «Міністерство фінансів Росії»—(ORG + LOC). Більшість стандартних моделей не підтримують вкладеність; для цього потрібні спеціалізовані архітектури (Span-BERT, biaffine NER)
- Рознесені сутності: «ООО... (далі—Компанія)»—кореференція потребує окремого модуля
- Омонімія: «Apple»—компанія чи фрукт? Розв'язується контекстом (трансформери справляються)
Деплой
spaCy: експорт у формат .spacy, serving через FastAPI. BERT: ONNX export для CPU, TorchServe для GPU. Latency: spaCy CPU ~5ms/речення, BERT ONNX CPU ~30ms/речення.







