Named Entity Recognition (NER) ідентифікує та класифікує іменовані сутності в тексті у заздалегідь визначені категорії: імена людей, організації, локації, дати та доменно-специфічні сутності. Продакшн NER системи повинні обробляти зашумлений input, доменну лексику та вимоги високої пропускної здатності.
Де використовується
NER забезпечує екстракцію інформації в різних галузях:
- Фінанси: Екстракція компаній, сум, дат з фінансових документів
- Медицина: Ідентифікація ліків, хвороб, симптомів з клінічних записів
- Юриспруденція: Екстракція сторін, дат, клаузул з контрактів
- E-commerce: Екстракція атрибутів продуктів, розпізнавання брендів
- Підтримка клієнтів: Екстракція номерів замовлень, назв продуктів
- Медіа: Екстракція персон, організацій, локацій для аналізу новин
Типові дані
| Аспект | Типові значення |
|---|---|
| Типів сутностей | 4 до 50+ категорій |
| Документів | 10K до 1M розмічених прикладів |
| Довжина послідовності | 50 до 512 токенів |
| Сутностей на документ | 0 до 50+ |
| Схема анотації | BIO, BIOES, IOB2 |
Формат анотації (BIO схема):
Іван B-PER
Петренко I-PER
працює O
в O
Google B-ORG
у O
Києві B-LOC
. O
Що робимо на практиці
- Визначити типи сутностей - Які сутності важливі для вашого випадку?
- Створити гайдлайни анотації - Чіткі правила для анотаторів
- Зібрати та розмітити дані - Якість важливіша за кількість
- Обрати схему анотації - BIO, BIOES або span-based
- Обрати архітектуру - Transformer + CRF або span extraction
- Навчити baseline - Pre-trained модель з fine-tuning
- Адаптація до домену - Continue pre-training або few-shot
- Ретельна оцінка - Per-entity метрики, аналіз помилок
- Деплой з моніторингом - Відстеження розподілу сутностей
- Ітерація гайдлайнів - Уточнення на основі помилок
Baseline спочатку
Почніть з pre-trained transformer з fine-tuning:
from transformers import AutoTokenizer, AutoModelForTokenClassification
from transformers import pipeline
# Завантажити pre-trained NER модель
model_name = "dslim/bert-base-NER"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)
# Створити pipeline
ner_pipeline = pipeline("ner", model=model, tokenizer=tokenizer)
# Запустити інференс
results = ner_pipeline("Іван Петренко працює в Google у Києві.")
Поширені моделі
| Модель | Підхід | Найкраще для |
|---|---|---|
| BERT + Linear | Token classification | Baseline, збалансовані дані |
| BERT + CRF | Sequence labeling | Валідні послідовності |
| SpanBERT | Span extraction | Вкладені сутності |
| BioBERT | Domain pre-training | Медичний текст |
| spaCy | Rule + ML гібрид | Швидкий інференс |
Метрики оцінки
| Метрика | Опис | Застосування |
|---|---|---|
| Entity-level F1 | Exact match span + type | Стандартна NER оцінка |
| Token-level F1 | Per-token класифікація | Дебагінг |
| Precision | Правильні екстракції / всі | Висока ціна false positives |
| Recall | Правильні екстракції / всі сутності | Важливе покриття |
Типові проблеми та дебагінг
- [ ] Помилки меж: Span сутності off by one token
- [ ] Плутанина типів: Person vs Organization
- [ ] Рідкісні сутності пропущені: Недостатньо прикладів
- [ ] Domain shift: Модель навчена на новинах, деплой на медичні
- [ ] Tokenization mismatch: Subword splits сутність неправильно
- [ ] Вкладені сутності: Внутрішня сутність перезаписана зовнішньою
Чекліст продакшену
Перед деплоєм: - [ ] Типи сутностей відповідають бізнес-вимогам - [ ] Per-entity F1 вище threshold - [ ] Модель протестована на production-like даних - [ ] Латентність інференсу прийнятна - [ ] Confidence thresholds налаштовані
Після деплою: - [ ] Розподіл сутностей моніториться - [ ] Low-confidence екстракції позначаються - [ ] Human review семплювання - [ ] Feedback loop до навчання
Інструменти
| Категорія | Інструменти |
|---|---|
| Навчання | Hugging Face Transformers, spaCy, Flair |
| Анотація | Prodigy, Label Studio, Doccano |
| Оцінка | seqeval, nervaluate |
| Serving | FastAPI, TorchServe, Triton |
Пов'язані сторінки
- Індекс: ML Field Guide
- Класифікація тексту
- Патерни інтеграції LLM
- RAG системи
Додаткове читання
Спробуйте наживо
Дослідіть пов'язану модель на практиці: відкрийте Named Entity Recognition (NER) - Interactive NLP Demo і змінюйте параметри під час роботи. Усе лишається у вашому браузері.
▶ Відкрити симуляцію Named Entity Recognition (NER) - Interactive NLP Demo