Представьте: вы анализируете медицинские статьи, где «Аспирин» — не бренд, а действующее вещество; «ИНН 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-системы под ваш домен. Получите консультацию по выбору инструментов и оценке необходимого объёма данных. Для предварительной оценки вашего кейса напишите нам — мы подготовим детальный план работ.







