Графы знаний
Knowledge Extraction
2012 год, Google I/O: Amit Singhal объявляет Knowledge Graph. 'Things, not strings'. Поиск 'Тадж-Махал' больше не возвращает страницы со словами 'Тадж' и 'Махал'. Возвращает факты: дата постройки, 1632-1643, архитектор - Устад Ахмад Лахори, адрес - Агра, Индия. За 3 года Google построил Knowledge Graph из 570 миллионов сущностей и 18 миллиардов фактов. Основа - автоматическая extraction из Freebase, Wikipedia и web текстов через NER + RE + Entity Linking.
- **Google Knowledge Panel**: автоматически извлечённые факты о персонах, компаниях, местах - основа featured snippets
- **LinkedIn Economic Graph**: 900M+ профессиональных профилей, компании, навыки, вакансии связаны через KG extraction
- **Amazon Product Graph**: сущности товаров, брендов, характеристик извлечены из миллиардов описаний для поиска и рекомендаций
Надя Вилауела-Массальске (1997)
В 1991 году DARPA запустила MUC (Message Understanding Conference) - первые соревнования по извлечению информации из текстов военных сообщений. Задача: найти имена, локации, организации и события. Команды использовали ручные правила и regex. В 1995 появился первый датасет CoNLL с BIO-разметкой. В 2003 CoNLL-2003 shared task по NER на немецком/английском - появились первые CRF модели. В 2018 Google опубликовал BERT, и precision NER на CoNLL-2003 вырос с 90% до 93%. Сегодня GPT-4 prompting достигает 96%+ без fine-tuning на некоторых benchmarks. 30 лет эволюции: regex -> CRF -> BERT -> LLM. MUC соревнования создали стандартные датасеты и метрики (F1 для NER), которые используются до сих пор; BIO схема стала универсальным стандартом
NER: Named Entity Recognition
NER (Named Entity Recognition) - задача разметки именованных сущностей в тексте: организации (ORG), персоны (PER), локации (LOC), даты (DATE), денежные суммы (MONEY). Современный подход: fine-tuned BERT с CRF или token classification head. Стандартная разметка: **BIO** (Begin-Inside-Outside) схема.
Современные LLM (GPT-4, Claude) выполняют NER через prompting без fine-tuning, но специализированные модели (BERT-NER) быстрее и дешевле при большом объёме данных. Проблема domain adaptation: медицинские сущности (лекарства, диагнозы) требуют fine-tuning на domain-специфических данных.
Почему BIO схема разметки предпочтительна перед простой IOB для NER?
Relation Extraction: связи между сущностями
Relation Extraction (RE) определяет семантические отношения между NER сущностями. Из текста 'Elon Musk founded SpaceX' нужно извлечь тройку (Elon Musk, founded, SpaceX). Современные подходы: **REBEL** (sequence-to-sequence), **PL-Marker** (span-based с BERT), **промптинг LLM**.
RE pipeline страдает от **error propagation**: ошибки NER на предыдущем шаге накапливаются в RE. Joint models (одновременный NER + RE) снижают эту проблему, но сложнее в тренировке. **Distant supervision** (автоматическая разметка через Wikidata) позволяет масштабировать тренировочные данные, но вносит noise.
Почему joint NER+RE модели (REBEL) предпочтительнее pipeline из отдельных моделей?
Coreference Resolution: одна сущность - разные упоминания
Coreference resolution объединяет различные упоминания одной сущности в тексте. 'Elon Musk основал SpaceX. **Он** хотел сделать человечество межпланетным видом. **Компания** первой посадила многоразовую ракету.' Все выделенные слова - одни сущности. Без coreference resolution Knowledge Graph будет фрагментарным.
Coreference resolution критична для построения связного KG из длинных документов. Без неё: 'Он основал Tesla' создаёт вершину 'Он', не связанную с 'Elon Musk'. Современные SOTA: **s2e-coref** (end-to-end), **ASP** (alignment-based). LLM справляются с coreference в промптах лучше специализированных моделей.
Почему coreference resolution необходим для построения качественного Knowledge Graph?
Entity Linking: связь с внешними KG
Entity Linking (EL) сопоставляет упоминания из текста с вершинами в Knowledge Graph (Wikidata, DBpedia). 'Apple выпустила iPhone' - 'Apple' -> Wikidata Q312 (Apple Inc.), не Q89 (фрукт). Процесс: **candidate generation** (найти кандидатов из KG) -> **disambiguation** (выбрать правильного кандидата по контексту).
**BLINK** (Bi-encoder LINKing) - SOTA entity linking: все сущности Wikidata кодируются bi-encoder в FAISS индекс. Для нового упоминания: encode контекст, найти топ-K кандидатов через ANN, переранжировать cross-encoder. Precision@1 на AIDA-B benchmark: 94.2%. Интегрируется с KG через SPARQL API Wikidata.
Knowledge Graph строится автоматически с высокой точностью - достаточно запустить NLP pipeline
Precision автоматического KG extraction редко превышает 85-90%; production KG требуют human-in-the-loop validation для критически важных фактов
NER + RE + Coreference + EL - каждый шаг вносит ошибки; ошибки накапливаются в pipeline. Wikidata содержит >10,000 активных волонтёров для контроля качества
Почему entity linking необходим для объединения Knowledge Graph из нескольких источников?
Ключевые идеи
- **NER**: BIO разметка + fine-tuned BERT, извлечение PER/ORG/LOC/DATE сущностей
- **Relation Extraction**: тройки (субъект, предикат, объект), REBEL для joint NER+RE, error propagation в pipeline
- **Coreference Resolution**: объединение анафор и местоимений с referents для связного KG
- **Entity Linking**: Wikidata QID как универсальный идентификатор, bi-encoder candidate generation + cross-encoder disambiguation
Вопросы для размышления
- Как distant supervision (автоматическая разметка через Wikidata) масштабирует тренировочные данные для RE, и какие noise паттерны она вносит?
- Почему cross-encoder в BLINK точнее bi-encoder для disambiguation, но почему bi-encoder незаменим на этапе candidate generation?
- Как автоматически построенный KG с 90% precision деградирует при итеративном обновлении (новые факты из новых текстов) и как версионирование KG решает эту проблему?