Автоматическое построение графа знаний из текстов под ключ

Вступление

Направления 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. Свяжитесь с нами для предварительного анализа вашего проекта — оценим объём и сложность бесплатно. Получите консультацию по автоматическому построению графа знаний для ваших данных.