Уявіть: ви аналізуєте медичні статті, де «Аспірин» — не бренд, а діюча речовина; «ІНН 7701234567» — не просто число, а ідентифікатор. Без кастомного NER вся аналітика перетворюється на ручну працю. Стандартні моделі (CoNLL-2003) розпізнають лише персони, організації, локації — цього явно недостатньо для доменної лексики. Типові бізнес-завдання: вилучення фінансових показників зі звітів, ідентифікація ліків у рецептах, розпізнавання юридичних сутностей у договорах. Кожна вимагає індивідуального підходу.
Ми реалізуємо NER під ключ: від вибору архітектури до деплою у вашу інфраструктуру. Розберемо, як налаштувати розпізнавання сутностей російською мовою, порівняємо інструменти та покажемо, чому донавчання окупається. Витрати на розмітку стартують від $450–650, а економія від автоматизації сягає $2.7k–3.9k на рік.
Що таке NER? Named Entity Recognition — задача вилучення іменованих сутностей з тексту.
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-пайплайни. BERT-based (DeepPavlov, HuggingFace): максимальна точність на складних текстах, але вища latency.
Порівняємо інструменти в таблиці:
| Інструмент | Точність (F1) | Швидкість (ms/реч.) | Кастомні сутності |
|---|---|---|---|
| natasha | 85–90% | ~2 ms | ні (тільки базові) |
| spaCy | 88–93% | ~5 ms | донавчання через prodigy |
| ruBERT | 92–97% | ~30 ms (CPU) | fine-tuning через HF |
Чому fine-tuning покращує точність?
Fine-tuning на вашому корпусі прибирає омонімію та піднімає F1 на 10–15%. Готова модель плутає «Яблоко» (фрукт) та «Яблоко» (компанія). Після донавчання модель враховує контекст, що критично для доменної лексики. Процес включає розмітку, IOB2-форматування та навчання через HuggingFace.
| Сценарій | F1 до fine-tuning | F1 після fine-tuning |
|---|---|---|
| Медичні терміни | 75% | 91% |
| Юридичні сутності | 68% | 88% |
Fine-tuning для кастомних сутностей
Процес:
- Розмітка: Prodigy або Label Studio. Мінімум 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. Partial match вважається помилкою.
Типові показники на російських текстах:
- PER: F1 95–97% (легко розпізнавані патерни)
- ORG: F1 88–93% (багато скорочень, абревіатур)
- LOC: F1 90–95%
- Кастомні доменні сутності: 80–90% після fine-tuning на 1K+ прикладах
Як ми реалізуємо NER під ваш домен?
Наш підхід — інженерний, без чорних ящиків. Етапи роботи:
- Аналіз даних: вивчаємо ваші тексти, визначаємо цільові сутності, оцінюємо складність (вкладеність, омонімія, рознесені сутності).
- Розмітка та аугментація: готуємо корпус у IOB2, контролюємо якість через крос-валідацію розмітників.
- Вибір архітектури: порівнюємо natasha/spaCy/BERT на вашому корпусі, вибираємо за F1 та latency.
- Fine-tuning та тестування: навчаємо модель, домагаємося F1 > 90% за цільовими типами.
- Деплой: упаковуємо в ONNX (CPU) або TorchServe (GPU), latency — від 5 до 30 мс на речення.
- Передача: документація, код пайплайну, доступ до моделі, навчання вашої команди.
Що входить у роботу
У результаті ви отримуєте:
- Навчену модель з кастомними сутностями
- Код інференсу (Python, Docker-образ)
- Інструкцію з перенавчання на нових даних
- Гарантійну підтримку на 3 місяці
Для кожного проекту ми готуємо guideline для розмітників, проводимо тестовий раунд з контролем якості IAA (inter-annotator agreement > 0.9). Після затвердження схеми починаємо повну розмітку.
Складні випадки
- Вкладені сутності: «Міністерство фінансів Росії» — ORG + LOC. Більшість моделей не підтримують вкладеність; використовуємо Span-BERT або biaffine NER.
- Рознесені сутності: «ТОВ… (далі — Компанія)» — потрібен модуль кореференції.
- Омонімія: вирішується контекстом (трансформери справляються краще CRF).
Деплой та надійність
Ми гарантуємо стабільну роботу моделі під навантаженням. Досвід — понад 50 проектів з NLP, сертифіковані інженери PyTorch. Зв'яжіться з нами для оцінки вашого завдання — надішлемо план робіт та терміни (від 2 до 6 тижнів залежно від обсягу розмітки).
Замовте розробку NER-системи під ваш домен. Отримайте консультацію щодо вибору інструментів та оцінки необхідного обсягу даних. Для попередньої оцінки вашого кейсу напишіть нам — ми підготуємо детальний план робіт.







