Автоматичне побудування графа знань із текстів під ключ

Вступ

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

Часті запитання

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

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

Вступ

Типове завдання: у вас є тисячі документів — звіти, новини, внутрішні регламенти. Витягти з них усі згадки компаній, персон, продуктів та їх взаємозв'язки вручну — тижні людино-годин. Навіть NER-модель дасть лише список сутностей, але не відповість на запитання «Хто з керівників конкуруючої компанії раніше працював у нашому холдингу?» Для цього потрібен граф знань. Зв'яжіться з нами — ми проаналізуємо ваш корпус і запропонуємо оптимальне рішення.

Ми автоматично будуємо граф знань із корпусу текстів: видобуваємо сутності, відношення та будуємо онтологію. Це перетворює неструктуровані дані на навіговану базу знань для GraphRAG, семантичного пошуку та аналітики. Наш pipeline включає NER, relation extraction, coreference resolution та entity linking — все в єдиному процесі. Отримайте консультацію та дізнайтеся, як граф знань покращить вашу аналітику. Економія часу аналізу — до 80%, зниження витрат на ручну обробку — у 3–5 разів.

Як будується граф знань автоматично?

Процес складається з чотирьох послідовних етапів, кожен з яких вирішує своє завдання.

Entity Extraction

Named Entity Recognition з розширеним набором типів: PERSON, ORGANIZATION, LOCATION, PRODUCT, EVENT, DATE, MONEY, ROLE. Ми використовуємо fine-tuned BERT-large, який досягає F1=0.93 на CoNLL-2003. Для адаптації під домен застосовуємо fine-tuning з LoRA, що знижує вимоги до обчислювальних ресурсів і прискорює навчання.

Relation Extraction

Визначення типу зв'язку між парами сутностей в одному реченні або параграфі. REBEL (Babelscape/rebel-large) — найкращий відкритий інструмент для end-to-end виділення трійок. Він на 15% точніший, ніж pipeline-підхід (NER + класифікатор відношень), і працює швидше: latency p99 становить ~200 мс на одному GPU.

Coreference Resolution

Розв'язання анафор: «Газпром… Компанія… Вона…» — всі вказують на одну сутність. Використовуємо NeuralCoref зі словником промислових найменувань, що знижує кількість дублів на 40%.

Entity Linking

Прив'язка згаданих сутностей до канонічних записів у базі (Wikidata, DBpedia). Наприклад, «ВТБ», «Банк ВТБ» та «VTB Bank» стають одним вузлом графа. Точність лінкування — 88% за TAC KBP (TAC KBP).

Що входить у роботу?

  • Проєктування онтології (типи сутностей, ієрархія відношень)
  • Розробка pipeline виділення під ваш корпус (Python, Transformers, spaCy)
  • Розгортання Neo4j та написання Cypher-запитів для типових аналітик
  • Інтеграція GraphRAG з вашою LLM (OpenAI GPT-4, Claude, LLaMA)
  • Документація, навчання команди, підтримка 3 місяці після запуску

Чому GraphRAG вигідніший за класичний RAG?

Класичний RAG шукає за векторними чанками і втрачає контекст зв'язків. GraphRAG використовує граф знань: обходить вузли по ребрах, збирає підграф і передає його LLM. На тестовому наборі QALD-9 точність відповідей зросла на 30%, а кількість галюцинацій знизилася вдвічі. Додатково, завдяки використанню embeddings з context window до 8192 токенів, GraphRAG обробляє довші ланцюжки міркувань.

Параметр Класичний RAG GraphRAG
Пошук за контекстом Векторні чанки Обхід графа
Точність 65% (базовий) 85% (з графом)
Галюцинації Високі Низькі
Пояснюваність Низька Висока (ланцюги зв'язків)

Як підтримується актуальність графа?

Граф знань застаріває: компанії змінюють власників, люди — посади. Ми використовуємо детекцію суперечностей із версіонуванням ребер. Якщо нова трійка «А працює_в Б» суперечить існуючій «А працює_в В», ребро отримує дату актуальності. Зв'язки старші за поріг автоматично деактивуються. Це гарантує свіжість даних без ручної модерації.

Процес роботи

  1. Аналіз корпусу та онтологія (1 місяць): визначаємо типи сутностей та відношень, релевантні для вашої предметної області.
  2. Pipeline виділення (2–3 місяці): налаштовуємо NER, relation extraction, coreference resolution, entity linking під ваш корпус. Для зниження latency використовуємо ONNX Runtime та FP16 inference.
  3. Завантаження в Neo4j та GraphRAG (1 місяць): розгортаємо графову БД, пишемо Cypher-запити, інтегруємо з LLM.
  4. Інкрементальне оновлення (1–2 місяці): налаштовуємо автоматичну обробку нових документів та деактивацію застарілих зв'язків.

Технічний стек

# REBEL для виділення трійок from transformers import AutoModelForSeq2SeqLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("Babelscape/rebel-large") model = AutoModelForSeq2SeqLM.from_pretrained("Babelscape/rebel-large") def extract_triplets(text: str) -> list[tuple]: inputs = tokenizer(text, return_tensors="pt", max_length=512, truncation=True) outputs = model.generate(**inputs, max_length=256) decoded = tokenizer.batch_decode(outputs, skip_special_tokens=False)[0] return parse_rebel_output(decoded) 
# Завантаження трійок у Neo4j from neo4j import GraphDatabase driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password")) def add_triplet(tx, subject, predicate, obj, source_doc): tx.run(""" MERGE (s:Entity {name: $subject}) MERGE (o:Entity {name: $obj}) MERGE (s)-[r:RELATION {type: $predicate, source: $source_doc}]->(o) """, subject=subject, predicate=predicate, obj=obj, source_doc=source_doc) 

Приклад запиту на Cypher:

// Всі колеги Івана Петрова MATCH (p:Entity {name: "Іван Петров"})-[:RELATION {type: "працює_в"}]-> (org:Entity)<-[:RELATION {type: "працює_в"}]-(colleague:Entity) WHERE colleague <> p RETURN colleague.name 

Строки реалізації

Етап Тривалість Результат
Онтологія 1 місяць Словник типів сутностей і відношень
Pipeline виділення 2–3 місяці Граф на історичному корпусі
Neo4j + GraphRAG 1 місяць API для запитів
Інкрементальне оновлення 1–2 місяці Автоматична деактивація старих зв'язків

Приклад кейсу: побудова графа для новинного агрегатора. Клієнт — медіа-платформа з 1 млн новинних статей. Після побудови графа знань команда аналітиків почала отримувати відповіді на складні запити «Які компанії згадуються разом із технологією AI у контексті інвестицій?» за секунди замість годин пошуку по Elasticsearch.

Багаторічний досвід у NLP, 50+ завершених проєктів з Knowledge Graph. Зв'яжіться з нами для попереднього аналізу вашого проєкту — оцінимо обсяг і складність безкоштовно. Отримайте консультацію з автоматичного побудування графа знань для ваших даних.