Named Entity Recognition (NER)
Распознавание именованных сущностей (NER) находит в тексте имена людей, организаций и мест, даты и суммы, а затем присваивает каждой сущности метку её типа.
Распознавание именованных сущностей (NER) — задача обработки естественного языка (NLP), которая находит фрагменты текста, называющие объекты реального мира, и присваивает каждому фрагменту тип, например человек, организация, местоположение, дата или денежная сумма. В предложении «Marie Curie преподавала в Университете Парижа с 1906 года» модель NER помечает «Marie Curie» как человека, «Университет Парижа» как организацию, а «1906» как дату. Так электронные письма, отчеты, договоры и стенограммы превращаются в структурированные записи, которые могут использовать поисковые системы, графы знаний, аналитические инструменты и средства защиты конфиденциальности. Конференции по пониманию сообщений 1990-х годов сделали NER стандартной задачей оценки, а в соревновании CoNLL-2003 были закреплены четыре типа, которые до сих пор используются в качестве ориентира: человек, местоположение, организация и прочее. Более крупные схемы, например OntoNotes 5.0, определяют 18 типов, включая даты, количества, продукты и события.
Как работает NER#
Обычно NER рассматривают как задачу разметки последовательности. Токенизатор разбивает текст на токены, а модель присваивает каждому токену тег по схеме BIO: B- обозначает начало сущности, I- — токен внутри нее, а O — токен вне любой сущности, поэтому многословные имена, такие как «Университет Парижа», остаются единым целым. Этот код преобразует предсказанные моделью теги в фрагменты сущностей:
# Token-level BIO tags, as predicted by an NER model for one sentence
tokens = ["Marie", "Curie", "taught", "at", "the", "University", "of", "Paris", "from", "1906", "."]
tags = ["B-PER", "I-PER", "O", "O", "O", "B-ORG", "I-ORG", "I-ORG", "O", "B-DATE", "O"]
# Merge each B- tag with the I- tags that follow it into one entity span
entities = []
for token, tag in zip(tokens, tags):
if tag.startswith("B-"):
entities.append([token, tag[2:]])
elif tag.startswith("I-") and entities and entities[-1][1] == tag[2:]:
entities[-1][0] += f" {token}"
print(entities)Выводится [['Marie Curie', 'PER'], ['University of Paris', 'ORG'], ['1906', 'DATE']] — структурированный результат, который последующие системы сохраняют и обрабатывают запросами.
За три десятилетия модели, предсказывающие теги, изменились. В ранних системах использовались написанные вручную правила и газеттеры — списки известных имен. Статистические разметчики, например скрытые марковские модели и условные случайные поля, обучались на размеченном тексте с вручную заданными признаками, такими как заглавные буквы и суффиксы слов. В 2016 году двунаправленные сети LSTM с выходным слоем CRF стали самостоятельно изучать эти признаки, а затем появились дообученные трансформеры: BERT достиг значения F1 92,8 на тестовой выборке CoNLL-2003. Механизм самовнимания позволяет этим моделям учитывать все предложение как контекст: так, «Apple» размечается как организация в предложении «Apple выпустила новый телефон» и остается без метки в предложении «Я съел яблоко». Системы оценивают по точности, полноте и мере F1 на уровне сущностей; предсказание засчитывается, только если и его фрагмент, и тип точно совпадают с эталоном.
В более новых моделях фиксированный набор меток отсутствует. GLiNER, компактный двунаправленный трансформер, получает названия типов сущностей на вход и находит соответствующие фрагменты для типов, которые не встречал при обучении; большие языковые модели извлекают сущности, когда им задают схему и просят вернуть структурированные выходные данные.
NER и связанные задачи#
- Связывание сущностей: Связывает каждое распознанное упоминание с конкретной записью в базе знаний, например Wikidata, чтобы «Париж» соотносился с городом или с Пэрис Хилтон.
- Извлечение отношений: Выявляет связи между сущностями, например кто из людей работает в какой организации; часто выполняется поверх результатов NER.
- Анализ тональности: Определяет мнение, выраженное в тексте. NER выявляет, о чем говорится в отзыве, а анализ тональности определяет отношение автора к этому.
- Обнаружение объектов: Аналог NER для изображений: находит в изображении области и присваивает каждой класс.
Идея открытого набора меток GLiNER имеет прямой аналог в компьютерном зрении: YOLOE-26, версия Ultralytics YOLO26 с открытым словарем, получает названия классов в виде текстовых подсказок во время инференса и обнаруживает и сегментирует объекты этих классов, в том числе те, что не входят в обучающие категории.
Примеры применения в реальных условиях#
Обработка документов объединяет NER с оптическим распознаванием символов (OCR): счета, контракты и формы сканируют, OCR считывает текст, а NER извлекает поля, например поставщика, дату и общую сумму, для бухгалтерских систем и систем контроля соответствия требованиям. В производственных конвейерах предсказания с низкой уверенностью передают людям, а затем обучаются на их исправлениях:
- Редактирование персональных данных (PII): Инструменты защиты конфиденциальности, например Presidio с открытым исходным кодом от Microsoft, используют NER вместе с шаблонными правилами, чтобы находить и маскировать имена, адреса и номера счетов до передачи текста или его использования для обучения.
- Извлечение данных из клинических текстов: Клинический NER извлекает из заметок врачей названия лекарств, дозировки, симптомы и диагнозы, чтобы больницы и исследователи могли искать и анализировать записи в больших масштабах.
- Поиск и рекомендации: Новостные сайты и контентные платформы размечают статьи упоминаемыми в них людьми, компаниями и местами. Это обеспечивает поиск по сущностям и рекомендации похожих материалов.










