Knowledge Graph
Граф знаний хранит факты в виде троек «сущность — отношение — сущность», позволяя системам ИИ выполнять запросы, устанавливать связи и рассуждать на их основе. RDF, GraphRAG и код.
Граф знаний — это структурированное представление фактов, где узлами выступают сущности, например люди, места, товары или понятия, а помеченные рёбра обозначают связи между ними. Каждый факт представляет собой тройку «субъект — предикат — объект», например (Мария Кюри, родилась в, Варшава), а схема или онтология определяет допустимые типы сущностей и связей. Поскольку связи хранятся явно, система может отвечать на вопросы, проходя по путям графа, объединять сведения из разных источников об одной сущности и выводить факты, которые нигде не были указаны напрямую. Запущенный в 2012 году Knowledge Graph от Google предоставляет панели с фактами рядом с результатами поиска, а Wikidata — свободный граф знаний, поддерживаемый волонтёрами Wikimedia, — содержит более 100 миллионов элементов.
Сущности, связи и тройки#
- Сущности (узлы): объекты с собственной идентичностью, тип которых задаётся онтологией, например человек, город или химическое соединение.
- Связи (рёбра): ориентированные помеченные связи, например «родился в» или «столица». Метка задаёт смысл, поэтому (Варшава, столица, Польша) и (Польша, столица, Варшава) — разные утверждения.
- Атрибуты: конкретные значения, связанные с сущностью, например дата рождения или численность населения.
- Онтология: схема классов, типов связей и правил, например правило, что любая столица является городом; с её помощью система логического вывода может выводить новые факты из имеющихся.
Преобладают две модели данных. Инфраструктура описания ресурсов (RDF) от W3C присваивает каждой сущности и связи веб-URI и хранит тройки, к которым можно выполнять запросы на SPARQL; такой подход подходит для открытых связанных данных, например Wikidata. Графы свойств, используемые такими графовыми базами данных, как Neo4j, позволяют узлам и рёбрам хранить свойства в формате «ключ — значение». Запросы к ним выполняются на языках вроде Cypher или GQL, который ISO опубликовала в качестве стандарта в апреле 2024 года.
В этом небольшом графе ответ на вопрос «в какой стране родилась Мария Кюри?» находится по пути из двух переходов: от Марии Кюри через Варшаву к Польше. Общие рёбра «получил премию» связывают обеих Кюри с их совместной премией 1903 года.
Создание графа знаний и запросы к нему#
Графы наполняются данными из курируемых баз, из текста посредством распознавания именованных сущностей (NER) и извлечения связей, которые всё чаще выполняются большими языковыми моделями (LLMs), а также из изображений. Затем при разрешении сущностей разные упоминания одного объекта, например «М. Кюри» и «Мария Склодовская-Кюри», объединяются в один узел. Помимо явных запросов, эмбеддинги графа знаний, например TransE, представляют каждую сущность и связь в виде вектора и оценивают кандидатную тройку по тому, насколько близко сумма векторов субъекта и связи оказывается к вектору объекта; это позволяет предсказывать пропущенные связи. Графовые нейронные сети напрямую обучаются на структуре графа.
Компьютерное зрение извлекает сущности и связи из изображений. Результаты работы детектора YOLO26 преобразуются в тройки (изображение, содержит, класс), а объединение этих троек с дополнительными фактами позволяет ответить на вопросы, на которые один лишь детектор ответить не может, например о том, какие типы транспортных средств присутствуют на изображении:
import networkx as nx
from ultralytics import YOLO
# Detect objects in an image
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Each detected class becomes an entity node linked to the image
graph = nx.DiGraph()
for class_id in result.boxes.cls.int().tolist():
graph.add_edge("bus.jpg", result.names[class_id], relation="contains")
# Background knowledge as (subject, relation, object) triples
for subject, relation, obj in [("bus", "is_a", "vehicle"), ("car", "is_a", "vehicle"), ("person", "is_a", "human")]:
graph.add_edge(subject, obj, relation=relation)
# Two-hop query: which detected entities are vehicles?
vehicles = [node for node in graph.successors("bus.jpg") if graph.has_edge(node, "vehicle")]
print(f"Vehicles in bus.jpg: {vehicles}")Графы знаний и большие языковые модели#
БЯМ хранят знания неявно в своих весах, поэтому факты сложно проверять и обновлять, а также существует риск галлюцинаций. Графы знаний хранят факты явно, указывая источники, на которые можно ссылаться, и изменения в которых вступают в силу сразу. GraphRAG объединяет оба подхода: он расширяет генерацию с дополнением извлечённой информацией (RAG), извлекая связанные сущности и пути отношений или сводки сообществ графа вместо отдельных фрагментов текста. Это помогает отвечать на многошаговые вопросы, например о том, какие поставщики задержанной детали также обслуживают другой завод. БЯМ также преобразуют вопросы на естественном языке в запросы SPARQL или Cypher к существующим графам.
Примеры применения в реальных условиях#
- Поиск и ассистенты: панели с данными о сущностях, прямые ответы и голосовые ассистенты находят сведения о людях, местах и организациях в больших курируемых графах.
- Поиск лекарств: биомедицинские графы связывают гены, белки, соединения, заболевания и побочные эффекты, а предсказание связей предлагает потенциальные мишени для лекарств или новые способы применения одобренных препаратов.
- Обнаружение мошенничества: аккаунты, использующие одни и те же устройства, адреса или платёжные карты, образуют связанные группы, которые становятся заметны при обходе графа, даже если каждый аккаунт по отдельности выглядит обычным.
- Понимание сцен: графы сцен описывают изображение как объекты и отношения между ними, например (человек, едет на, лошадь). В наборе данных Visual Genome таким образом размечено более 100 000 изображений для обучения моделей, которые отвечают на вопросы о сценах.
Графы знаний и родственные хранилища данных#
- Реляционные базы данных: хранят записи в таблицах, связанных внешними ключами, что подходит для транзакций с фиксированной схемой. Для многошаговых вопросов, например «друзья друзей, купившие этот товар», требуется по одному соединению на переход, тогда как граф напрямую проходит по сохранённым рёбрам.
- Векторные базы данных: находят элементы по сходству эмбеддингов, выявляя связанный контент без явных связей. Граф знаний точно фиксирует отношения между двумя сущностями, а гибридные системы используют оба подхода.
- Онтологии: онтология — это схема типов и правил, а граф знаний — это схема, наполненная фактами об отдельных объектах, например миллионами конкретных людей, мест и произведений из Wikidata.










