Реалізація витягування іменованих сутностей (NER)

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Реалізація витягування іменованих сутностей (NER)
Середній
~3-5 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Реалізація розпізнавання імених сутностей (NER)

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-pipeline.

BERT-based (DeepPavlov, Hugging Face): DeepPavlov/rubert-base-cased-ner—для високої якості на складних текстах.

Fine-tuning для кастомних сутностей

При кастомних типах сутностей потрібен власний корпус та fine-tuning:

  1. Розмітка: Prodigy, Label Studio, або Doccano. Мінімум 200–500 прикладів на тип сутності
  2. Формат: IOB2 (BIO-tagging)—NER стандарт
  3. Навчання: 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. Частковий збіг вважається помилкою.

Типові показники на російських текстах:

  • PER: F1 95–97% (легко розпізнавані паттерни)
  • ORG: F1 88–93% (багато скорочень, абревіатур)
  • LOC: F1 90–95%
  • Кастомні доменні сутності: 80–90% після fine-tuning на 1K+ прикладах

Складні випадки

  • Вкладені сутності: «Міністерство фінансів Росії»—(ORG + LOC). Більшість стандартних моделей не підтримують вкладеність; для цього потрібні спеціалізовані архітектури (Span-BERT, biaffine NER)
  • Рознесені сутності: «ООО... (далі—Компанія)»—кореференція потребує окремого модуля
  • Омонімія: «Apple»—компанія чи фрукт? Розв'язується контекстом (трансформери справляються)

Деплой

spaCy: експорт у формат .spacy, serving через FastAPI. BERT: ONNX export для CPU, TorchServe для GPU. Latency: spaCy CPU ~5ms/речення, BERT ONNX CPU ~30ms/речення.