Что такое RE (Relation Extraction)? Приведите пример: как извлечь пары «(сущность_1, отношение, сущность_2)» из предложения?
Краткий тезис
RE (Relation Extraction) — это задача извлечения семантических отношений между сущностями из текста. Она превращает неструктурированный текст в структурированные триплеты вида (сущность_1, отношение, сущность_2), которые ложатся в основу графов знаний, вопросно-ответных систем и RAG-пайплайнов. Современные подходы делятся на pipeline-методы (последовательный NER + классификация отношений) и joint-модели (одновременное распознавание сущностей и отношений).
2. Pipeline: NER → кандидаты → классификатор
Классический pipeline-подход разбивает задачу на три последовательных этапа:
Этап 1: NER (Named Entity Recognition)
Модель находит все именованные сущности в тексте. Для русского языка часто используются BERT-модели (например, RuBERT, Slavic BERT) или spaCy с обученными пайплайнами.
Пример выхода NER:
[Стив_Джобс]PER основал компанию [Apple]ORG в [1976]DATE в [Калифорния]LOC
Этап 2: Генерация кандидатов
Все пары сущностей в предложении становятся кандидатами на отношение. Для предложения с N сущностями получаем N*(N-1)/2 пар.
Кандидаты для примера:
- (Стив_Джобс, Apple)
- (Стив_Джобс, 1976)
- (Стив_Джобс, Калифорния)
- (Apple, 1976)
- (Apple, Калифорния)
- (1976, Калифорния)
Этап 3: Классификатор отношений
Каждая пара подаётся в классификатор (обычно трансформер с head-слоем), который предсказывает тип отношения или no_relation.
Архитектура классификатора:
[CLS] сущность_1 [SEP] контекст [SEP] сущность_2 [SEP]
↓
BERT-encoder
↓
[CLS]-вектор
↓
Linear + Softmax → {relation_type, no_relation}
Проблемы pipeline:
- Ошибка на этапе NER распространяется на RE (каскад ошибок)
- Вычислительная сложность: O(N²) для каждого предложения
- Потеря контекста между сущностями при раздельной обработке
3. Joint models: CasRel, SpERT
Современные подходы решают RE как единую задачу, избегая каскадных ошибок.
CasRel (Cascade Relation Extraction)
Метод, предложенный Wei et al. (2020), использует каскадную архитектуру:
- Head-encoder находит все возможные субъекты (сущность_1)
- Для каждого субъекта tail-encoder предсказывает объекты (сущность_2) и отношения
Принцип работы:
Текст → BERT → [субъекты]
↓
Для каждого субъекта:
BERT + субъект-вектор → [объекты и отношения]
Преимущества: O(N) сложность, высокая точность на перекрывающихся отношениях.
SpERT (Span-based Entity and Relation Transformer)
Модель от Eberts и Ulges (2020) работает с span-представлениями:
- Все возможные span-ы (непрерывные подпоследовательности токенов) кодируются
- Классификатор сущностей определяет тип span-а
- Классификатор отношений работает с парами span-ов
Архитектура:
Токены → BERT → span-представления
↓
Entity classifier → {PER, ORG, LOC, ...}
↓
Relation classifier → {founder, located_in, ...}
Преимущества: одновременное обучение, поддержка вложенных сущностей.
4. Оценка: точное совпадение сущностей + отношения
Метрики для RE строже, чем для NER, так как требуется точное совпадение всех трёх компонентов триплета.
Основные метрики
| Метрика | Формула | Описание |
|---|---|---|
| Precision | TP / (TP + FP) | Доля правильных триплетов среди всех предсказанных |
| Recall | TP / (TP + FN) | Доля найденных триплетов среди всех истинных |
| F1-score | 2 * P * R / (P + R) | Гармоническое среднее |
Критерии совпадения
Триплет считается True Positive, если:
- Сущность_1 совпадает по тексту и типу (строгое совпадение границ)
- Отношение совпадает по классу
- Сущность_2 совпадает по тексту и типу
Пример оценки:
Истинный: (Илон_Маск, основатель, Tesla)
Предсказанный: (Илон_Маск, основатель, Tesla_Motors)
→ False Positive (сущность_2 не совпадает)
Дополнительные метрики
- Strict F1: полное совпадение границ всех сущностей
- Relaxed F1: допускается частичное перекрытие сущностей
- Micro/Macro F1: усреднение по всем типам отношений
5. Пет-проект для закрепления
Задача: Реализовать простой RE-пайплайн для извлечения отношений из новостей на русском языке.
Инструменты:
- Python 3.10+
- transformers (RuBERT)
- spaCy с моделью
ru_core_news_sm - PyTorch для классификатора
- Датасет: ReLOD (русский) или RuREBus
Шаги:
- Загрузите предобученный NER (spaCy или RuBERT)
- Реализуйте генератор пар сущностей для каждого предложения
- Обучите классификатор отношений на основе [CLS]-вектора BERT
- Протестируйте на 10 случайных предложениях из новостей
- Посчитайте Precision/Recall/F1 для каждого типа отношения
Ожидаемый результат:
- Рабочий скрипт, который из предложения «Газпром поставил газ в Германию в 2023 году» извлекает:
(Газпром, поставщик, Германия)(Газпром, год_поставки, 2023)
- Отчёт с метриками на тестовой выборке (целевой F1 > 0.7)
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 903. Named Entity Recognition (NER) | NER как базовый этап для RE |
Навигация
- Предыдущий: 905
- Следующий: 907
- Индекс: 00. Индекс разборов