Что такое Named Entity Recognition и как оно реализуется?
Named Entity Recognition (NER) — это задача в области обработки естественного языка (NLP), направленная на автоматическое выявление и классификацию именованных сущностей в тексте. Именованные сущности — это конкретные объекты реального мира, такие как имена людей, организации, географические названия, даты, временные интервалы, валюты, произведения искусства и т.д.
Цель NER
Извлечь и отнести фрагменты текста к определённым категориям, например:
Пример:
_“Apple Inc. was founded in Cupertino by Steve Jobs in 1976.”_
→
- "Apple Inc." → **ORG
** - "Cupertino" → **LOC
** - "Steve Jobs" → **PER
** - "1976" → **DATE
**
Категории сущностей
Категории могут отличаться в зависимости от задачи, но наиболее распространённые:
Категория | Описание |
---|---|
PER | Person — имена людей |
--- | --- |
ORG | Organization — организации |
--- | --- |
LOC | Location — географические места |
--- | --- |
GPE | Geo-Political Entity — города, страны |
--- | --- |
DATE | Даты |
--- | --- |
TIME | Время |
--- | --- |
MONEY | Суммы денег |
--- | --- |
PERCENT | Проценты |
--- | --- |
PRODUCT | Продукты |
--- | --- |
EVENT | События |
--- | --- |
WORK_OF_ART | Книги, фильмы и т.п. |
--- | --- |
Как работает NER: архитектура
1. Токенизация
Текст разбивается на токены — слова, подслова, знаки препинания.
2. Векторизация
Каждому токену присваивается векторное представление:
-
Word embeddings (Word2Vec, GloVe)
-
Subword embeddings (FastText)
-
Contextual embeddings (BERT, RoBERTa)
3. Последовательная модель
Для обработки контекста используются:
-
Bi-LSTM / GRU
-
CRF (Conditional Random Field)
-
Transformer-based (BERT и др.)
4. Предсказание меток
Модель предсказывает для каждого токена категорию. Распространённая схема аннотации — BIO:
-
B-ORG — начало организации
-
I-ORG — внутри сущности
-
O — не сущность
Пример BIO-аннотации:
Токен | Метка |
---|---|
Steve | B-PER |
--- | --- |
Jobs | I-PER |
--- | --- |
founded | O |
--- | --- |
Apple | B-ORG |
--- | --- |
Inc. | I-ORG |
--- | --- |
Реализация NER
A. Классическая модель: BiLSTM + CRF
-
BiLSTM обрабатывает последовательность слов слева и справа.
-
CRF поверх — для согласованного выбора меток с учётом переходов (например, I-PER не может идти после B-ORG).
Плюсы:
-
Хорошая структурная согласованность
-
Работает с небольшими наборами данных
Минусы:
-
Требует ручной подготовки признаков (если без эмбеддингов)
-
Меньше переносимости
B. NER на основе трансформеров (BERT и др.)
BERT и его аналоги преобразуют каждый токен в контекстный вектор. После этого к каждому вектору применяется линейный классификатор для предсказания метки.
from transformers import AutoTokenizer, AutoModelForTokenClassification
tokenizer = AutoTokenizer.from_pretrained("dslim/bert-base-NER")
model = AutoModelForTokenClassification.from_pretrained("dslim/bert-base-NER")
Особенности:
-
Токенизация на уровне подслов
-
[CLS] и [SEP] — специальные токены
-
Необходимо сопоставлять подслова и метки
Обработка батча:
tokens = tokenizer("Steve Jobs founded Apple Inc.", return_tensors="pt")
outputs = model(\*\*tokens)
predictions = outputs.logits.argmax(dim=-1)
Оценка качества NER
Метрики:
-
Precision: из найденных сущностей сколько верных
-
Recall: из всех верных сколько найдены
-
F1-score: гармоническое среднее precision и recall
-
Entity-level scoring: важна полная правильность всей сущности, не только токенов
from seqeval.metrics import classification_report
Пример:
-
Предсказано: "Steve" — B-PER, "Jobs" — I-PER
-
Истинная разметка совпадает → полное попадание
Корпуса для обучения
-
CoNLL-2003 (EN): классика (PER, LOC, ORG, MISC)
-
OntoNotes (EN): более широкая аннотация
-
WikiANN (многоязычный)
-
Gareev corpus (RU): именованные сущности на русском
Как обучить свою модель NER
-
Собрать датасет с аннотацией в формате BIO
-
Токенизировать текст
-
Сопоставить метки с токенами
-
Обучить модель на токен-классификации
-
Оценить на валидации
HuggingFace Trainer API:
from transformers import Trainer, TrainingArguments
trainer = Trainer(
model=model,
args=TrainingArguments(...),
train_dataset=train_data,
eval_dataset=val_data,
compute_metrics=compute_metrics
)
trainer.train()
Библиотеки для NER
Библиотека | Особенности |
---|---|
spaCy | Быстро, удобно, встроенные модели |
--- | --- |
HuggingFace | Мощные модели, легко настраивать |
--- | --- |
Flair | Эмбеддинги + стек моделей, хорошее качество |
--- | --- |
Stanza (Stanford) | Поддержка многих языков |
--- | --- |
DeepPavlov | Русскоязычные модели, продвинутый функционал |
--- | --- |
Примеры применения NER
-
Извлечение сущностей из медицинских документов (болезни, лекарства)
-
Обработка юридических текстов (организации, статьи)
-
Анализ новостей (персоны, события)
-
Финансовая аналитика (компании, транзакции)
-
Обогащение поисковых систем (именованные фильтры)
Таким образом, NER — это ключевая задача NLP, позволяющая структурировать неструктурированный текст. Текущие state-of-the-art подходы основаны на трансформерах и позволяют достигать высокой точности в реальных задачах.