Реалізація видобування фактів з тексту (Information Extraction)
Information Extraction (IE) — це автоматичне видобування структурованої інформації з неструктурованого тексту. Мета: перетворити вільний текст на заповнені поля бази даних.
Компоненти системи IE
Повнофункціональна IE-система включає кілька пов'язаних завдань:
Named Entity Recognition → знаходить сутності (особи, організації, дати, суми)
Relation Extraction → визначає відносини між сутностями ("Іван працює в Газпромі")
Event Extraction → видобує події з учасниками, часом, місцем
Attribute Extraction → заповнює атрибути сутностей ("Газпром, виручка 10 трлн рублів, 2024 рік")
LLM-базоване видобування (сучасний підхід)
Для більшості завдань IE сьогодні LLM зі структурованим виводом — оптимальний вибір:
from pydantic import BaseModel
from openai import OpenAI
class CompanyInfo(BaseModel):
name: str
revenue: float | None
revenue_year: int | None
ceo: str | None
headquarters: str | None
employees_count: int | None
client = OpenAI()
response = client.beta.chat.completions.parse(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": f"Видобути інформацію про компанію з тексту:\n{text}"
}],
response_format=CompanyInfo,
)
result = response.choices[0].message.parsed
Класичний pipeline (для високого навантаження)
Для систем з > 1000 документів/годину та вимогою latency < 100ms:
- spaCy / natasha для базового NER (особи, орг, локації, дати)
- Dependency parsing для видобування простих відносин (субʼєкт-дієслово-обʼєкт)
- Pattern matching (spaCy Matcher) для структурованих паттернів ("ціна X рублів", "ставка X%")
- Нормалізація — приведення до канонічної форми (дати → ISO, суми → float + валюта)
Робота з табличними даними в тексті
Тексти часто містять таблиці в PDF/HTML. Стратегія:
- PDF: Camelot або pdfplumber для видобування таблиць
-
HTML: BeautifulSoup + pandas
read_html - Зображення таблиць: Azure Document Intelligence або Table Transformer (Microsoft)
Оцінка якості
Метрики для IE:
- Precision/Recall/F1 за типами сутностей
- Relation-level F1 (правильна пара сутностей + правильний тип відносини)
- Slot-filling accuracy (відсоток правильно заповнених полів)
Типові результати: 90–95% F1 для чітко структурованих текстів (фінансові звіти, контракти), 75–85% для новин та вільного тексту.







