Knowledge Graph
知识图谱将事实存储为“实体-关系-实体”三元组,使 AI 系统能够查询、关联并推理这些事实。内容涵盖 RDF、GraphRAG 和代码。
知识图谱是一种结构化的事实表示,其中节点是实体,例如人物、地点、产品或概念;带标签的边则表示实体之间的关系。每条事实都是由主语、谓语和宾语组成的三元组,例如(Marie Curie,出生于,Warsaw);模式或本体则定义允许使用哪些类型的实体和关系。由于关系会被显式存储,系统可以通过沿图中的路径回答问题,合并不同来源中关于同一实体的事实,并推断从未被直接陈述的事实。Google 的 Knowledge Graph 于 2012 年推出,为搜索结果旁边的事实信息面板提供支持;Wikidata是由 Wikimedia 志愿者维护的免费知识图谱,包含超过 1 亿个条目。
实体、关系与三元组#
- 实体(节点):具有明确身份的事物,由本体对每个实体进行类型定义,例如人物、城市或化合物。
- 关系(边):带有标签的有向链接,例如“出生于”或“首都是”。标签承载含义,因此(Warsaw,首都是,Poland)和(Poland,首都是,Warsaw)代表不同的陈述。
- 属性:附加到实体上的字面值,例如出生日期或人口数量。
- 本体:由类别、关系类型和规则构成的模式,例如“每个首都都是一座城市”;推理引擎可以据此从现有事实推导出新事实。
目前主要有两种数据模型。W3C 的资源描述框架(RDF)使用 Web URI 标识每个实体和关系,并存储可通过 SPARQL 查询的纯三元组,适用于 Wikidata 等开放关联数据。图数据库(例如 Neo4j)所使用的属性图则允许节点和边携带键值属性,并可使用 Cypher 或 GQL 等语言查询;ISO 于 2024 年 4 月将 GQL 发布为标准。
在这个小型图谱中,“Marie Curie 出生于哪个国家?”这个问题对应一条两跳路径:从 Marie Curie 经过 Warsaw 到达 Poland;共享的“获奖”边则将两位 Curie 与她们共同获得的 1903 年奖项连接起来。
构建和查询知识图谱#
图谱的数据来自经过整理的数据库、通过命名实体识别(NER)和关系抽取处理的文本(这些任务越来越多地由大型语言模型(LLM)完成),以及图像。随后,实体解析会将指向同一事物的不同提及合并为一个节点,例如将“M. Curie”和“Marie Skłodowska-Curie”合并。除了显式查询外,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}")知识图谱与大型语言模型#
LLM 会将知识隐式存储在其权重中,因此事实难以检查或更新,也容易出现幻觉。知识图谱会显式存储事实,并提供可引用的来源;修改也会立即生效。GraphRAG结合了两者:它扩展了检索增强生成(RAG),检索相互关联的实体和关系路径,或图社区的摘要,而不是彼此孤立的文本片段,因此更擅长回答多跳问题,例如某个零件延迟交付时,哪些供应商还为另一家工厂供货。LLM 也可以将自然语言问题转换为针对现有图谱的 SPARQL 或 Cypher 查询。
实际应用#
- 搜索与助手:实体信息面板、直接答案和语音助手会在经过整理的大型图谱中查找有关人物、地点和组织的事实。
- 药物发现:生物医学图谱会关联基因、蛋白质、化合物、疾病和副作用;链接预测可提出候选药物靶点,或发现已批准药物的新用途。
- 欺诈检测:共享设备、地址或支付卡的账户会形成相互连接的团伙;遍历图谱时,这些团伙会显现出来,即使单独看每个账户都很正常。
- 场景理解:场景图会将图像描述为物体及其关系,例如(人,骑着,马)。Visual Genome 数据集以这种方式标注了 10 万多张图像,用于训练能够回答场景相关问题的模型。
知识图谱与相关数据存储的比较#
- 关系型数据库:将记录存储在通过外键关联的表中,适合使用固定模式的事务。对于“购买了此产品的朋友的朋友”等多跳问题,每跳都需要一次联接;而图数据库可以直接遍历已存储的边。
- 向量数据库:根据嵌入相似度检索项目,无需显式链接即可查找相关内容。知识图谱会明确记录两个实体之间的关系,而混合系统会同时使用这两种方式。
- 本体:本体是类型和规则组成的模式,而知识图谱则是在该模式中填入实例事实,例如 Wikidata 中数百万个具体的人物、地点和作品。










