Обработка естественного языка
Information Extraction
Google Search знает что 'основатель Google - Ларри Пейдж и Сергей Брин'. Это не хранится в базе данных как отдельная запись - это извлечено из миллиардов веб-страниц через Information Extraction. Knowledge Graph Google содержит 70+ миллиардов фактов. Всё это - NER + RE + event extraction на планетарном масштабе.
- **Google Knowledge Graph**: 70B+ фактов о 1B+ сущностей. Строится из Wikidata + автоматическое IE из веб. Питает Knowledge Panels в поиске.
- **Refinitiv (Thomson Reuters)**: Financial knowledge graph. Компании, персоны, события, отношения из финансовых новостей. Обновляется в реальном времени. Используется хедж-фондами.
- **Microsoft GraphRAG**: open-source toolkit для построения KG из корпоративных документов и RAG поверх него. Community summaries + entity resolution + multi-hop QA.
Предварительные знания
- NER: распознавание именованных сущностей как первый шаг IE
- BERT-классификация и fine-tuning под downstream-задачу
- Базовое понимание retrieval и knowledge graph как структуры
От MUC до Open Information Extraction
1987 год. DARPA запускает серию Message Understanding Conferences (MUC), которые шли до 1998 года. Изначально задачей был анализ военных сообщений, но именно MUC формализовали information extraction как поле: ввели задачи named entity recognition, заполнения шаблонов событий (template filling) и метрики precision/recall для их оценки. Подход был основан на закрытых онтологиях - заранее заданном наборе типов сущностей и отношений. В 2007 году Michele Banko с коллегами из University of Washington сломали это ограничение, предложив Open Information Extraction (система TextRunner): извлекать произвольные триплеты (субъект, предикат, объект) из веба без фиксированной схемы. Это открыло путь к автоматическому построению knowledge graphs планетарного масштаба, наследниками которых стали Google Knowledge Graph и современный GraphRAG.
Relation Extraction: связи между сущностями
**Relation Extraction (RE)** - находить связи между парами именованных сущностей. Пример: 'Илон Маск основал Tesla' -> (Илон Маск, FOUNDED_BY, Tesla). После NER находим сущности, RE определяет тип отношения между ними.
**Distant Supervision**: автоматическая разметка для RE. Если в Wikidata есть (Apple, FOUNDED_BY, Steve Jobs) - все предложения упоминающие обе сущности помечаются как FOUNDED_BY. Шумная разметка, но масштабируется на миллионы примеров. Google, OpenAI, Яндекс используют для построения knowledge bases.
Текст: 'Microsoft купила LinkedIn в 2016 за $26B'. NER нашёл Microsoft (ORG) и LinkedIn (ORG). Какой следующий шаг в RE pipeline?
Event Extraction: события и участники
**Event Extraction** - структурирование событий: тип события, триггер (слово-активатор), аргументы (кто, что, где, когда, как). ACE (Automatic Content Extraction) ontology: 8 типов событий (Business, Justice, Conflict...), каждый с набором аргументных ролей.
**Event Coreference**: одно событие может упоминаться в нескольких местах документа. 'Сделка состоялась вчера... транзакция включала... покупка завершила...' - все три описывают одно событие. Разрешение event coreference необходимо для связного knowledge graph.
В event extraction тип события и аргументы критично важны. Для финансовых новостей: 'Apple инвестировала $1B в AI стартап'. Что является event trigger?
Knowledge Graphs из текста
**Knowledge Graph (KG)** - граф знаний: узлы - сущности, рёбра - отношения. Wikidata: 100M+ утверждений. Freebase (Google, до 2016): основа Google Knowledge Panel. Автоматическое построение KG из текста = NER + RE + event extraction.
Knowledge graph нужен для поиска связей между сущностями. Почему граф лучше реляционной БД для этой задачи?
Извлечение триплетов: Subject-Predicate-Object
**Triplet extraction**: автоматическое извлечение (Subject, Predicate, Object) из текста. Основа построения knowledge graphs из неструктурированных источников. OpenIE (открытое извлечение без фиксированного ontology) - альтернатива закрытому RE с предопределёнными типами отношений.
**GraphRAG (Microsoft, 2024)**: RAG поверх knowledge graph вместо vector DB. Текст -> triplet extraction -> KG -> при запросе обходить граф для multi-hop retrieval. Лучше на вопросах требующих связывания нескольких фактов ('Назови всех CEOs компаний приобретших AI стартапы в 2024').
**Качество vs покрытие**: LLM извлекают высококачественные триплеты но медленно и дорого. OpenIE (Stanford, AllenNLP) быстрее но шумнее. Для construction KG из Wikipedia/новостей: hybrid подход - OpenIE для первичной разметки + LLM для disambiguation и quality filtering.
Information Extraction устарела - LLM с промптом 'найди все факты' заменяет весь IE pipeline
LLM-based IE нестабилен для high-volume production: дорого, медленно, нестабильный формат вывода. Специализированные IE модели (REBEL, SpERT) быстрее и дешевле при сопоставимом качестве
Bloomberg обрабатывает 5000 новостей/час. GPT-4 для каждой - $5000/час только на IE. Fine-tuned BERT модель - $50/час. 100x разница в стоимости при 90% качества GPT-4. LLM IE - для прототипов и low-volume.
OpenIE и closed RE: в чём разница подходов?
Ключевые идеи
- **Relation Extraction**: классификация отношений между парами сущностей. Pipeline: NER -> entity pairs -> RE classifier. Distant supervision для масштабной разметки.
- **Event Extraction**: тип события + trigger + аргументы с ролями. ACE/TAC KBP онтологии. Event coreference для связного KG.
- **Knowledge Graph**: узлы-сущности + рёбра-отношения. Neo4j для хранения. Multi-hop queries через Cypher.
- **Triplet extraction**: (S, P, O) из текста. REBEL для closed extraction, OpenIE для open extraction. GraphRAG строит поверх KG.
- **Production**: специализированные модели дешевле LLM для high-volume IE. LLM хорошо для прототипов и edge cases.
Связанные темы
IE строится поверх базовых NLP задач:
- Named Entity Recognition — NER - первый шаг IE pipeline. Сущности нужны для RE и event extraction
- RAG: Retrieval-Augmented Generation — GraphRAG использует KG как structured retrieval вместо vector DB для multi-hop вопросов
Вопросы для размышления
- Distant supervision автоматически размечает данные используя существующий KG. Если KG содержит ошибки - они попадут в обучающие данные. Как оценить и контролировать качество такой разметки?
- Triplet extraction из медицинских текстов: 'Ибупрофен противопоказан при язве желудка'. Субъект - Ибупрофен, предикат - ?, объект - язва желудка. Как описать этот отрицательный предикат в KG?
- GraphRAG vs Vector RAG: для какого типа вопросов каждый подход лучше? Приведи примеры запросов.
Связанные уроки
- nlp-08 — NER - первый этап конвейеров извлечения
- nlp-18 — Структурированные триплеты отвечают на фактические вопросы
- nlp-12 — BERT-классификаторы отношений извлекают связи сущностей
- aie-41-knowledge-graphs — Извлеченные триплеты наполняют графы знаний
- rec-08 — Графы знаний питают рекомендации на основе графов
- stat-08-correlation