高级知识图谱 RAG
课程简介
复杂关系推理、时序图谱、多跳检索在 RAG 中的应用。
高级知识图谱 RAG 技术
一、基础知识图谱的局限
在之前的学习中,我们掌握了知识图谱的核心概念和基础查询方法。但实际业务场景往往比基础知识图谱能够处理的要复杂得多。主要面临以下挑战:
- 时间维度缺失:基础知识图谱中的关系和状态是静态的,无法回答「2020 年的时候谁在管理这个团队」这类涉及时间变化的问题
- 多跳检索效率:虽然知识图谱天然支持多跳查询,但如何在 RAG 场景中高效地执行多跳检索是个挑战
- 不确定性处理:现实世界中的很多关系并非确定无疑,而是带有概率性的
二、时序知识图谱
2.1 为什么需要时间维度?
理解时序知识图谱的价值,最好的方法是看一个实际例子。假设我们有一个企业知识图谱,包含「某人担任某公司 CEO」的关系。在基础图谱中,我们可能这样表示:
(库克, 担任CEO, 苹果公司)
但现实情况是,库克是在 2011 年才成为 CEO 的,在此之前苹果的 CEO 是乔布斯。如果我们没有时间信息,就无法回答「2010 年苹果公司的 CEO 是谁」这个问题。
2.2 时间信息的建模方式
方式一:关系属性——在边上附加时间属性:
(p:Person {name: '库克'})-[r:CEO {from: 2011, to: null}]->(c:Company {name: '苹果'})
(p:Person {name: '乔布斯'})-[r:CEO {from: 1997, to: 2011}]->(c:Company {name: '苹果'})
方式二:事件节点——将时间作为独立的节点:
(p:Person {name: '库克'})-[:APPOINTED_AS]->(role:Role {title: 'CEO'})-[:AT_COMPANY]->(c:Company {name: '苹果'})
(role)-[:EFFECTIVE_FROM]->(date:Date {value: '2011-08-24'})
方式三:属性图时间建模——使用专门的时序图扩展。
2.3 时序查询示例
// 查询 2010 年苹果公司的 CEO
MATCH (p:Person)-[r:CEO]->(c:Company {name: '苹果'})
WHERE r.from <= '2010' AND (r.to IS NULL OR r.to >= '2010')
RETURN p.name
// 某人在某段时间内的所有任职记录
MATCH (p:Person {name: '库克'})-[r:WORKED_FOR]->(c:Company)
RETURN c.name, r.from, r.to
ORDER BY r.from
// 公司管理层的变更历史
MATCH (p:Person)-[r:CEO]->(c:Company {name: '苹果'})
RETURN p.name, r.from, r.to
ORDER BY r.from
2.4 时序图谱的应用场景
- 企业组织架构演变:追踪部门重组、人员变动
- 供应链历史追踪:分析供应商合作关系的时间变化
- 市场趋势分析:将产品销售数据与时间关联,分析市场变化趋势
- 事件推演:构建事件链条,分析因果关系
三、多跳关系检索优化
3.1 为什么多跳检索很关键?
知识图谱在 RAG 中的最大优势就是多跳推理能力。但多跳检索也面临挑战:盲目扩展会导致信息爆炸(2 跳可能涉及数千个节点),选择合适的跳数和检索路径需要精心设计。
3.2 检索策略优化
受限路径检索——限制检索路径的类型和方向:
// 只检索特定类型的路径
MATCH p = (c:Company {name: 'Samsung'})-[r:USES|:PRODUCES|:DESIGNED_BY*1..3]-(related)
RETURN p
基于图中心性的裁剪——优先检索重要的节点(度中心性高的节点)。
分层检索——先宽后窄:第一轮检索扩展范围,第二轮在关键路径上深入。
基于 LLM 的动态路径选择——LLM 分析问题后,只选择与问题最相关的路径类型:
def smart_multi_hop_retrieval(question, kg_client):
# 1. LLM 分析问题需要的路径
path_analysis = llm.analyze(f'''
分析以下问题:{question}
需要从知识图谱中检索什么类型的路径?
返回关系类型的列表,按重要性排序。
''')
# 2. 基于分析结果构建 Cypher
cypher = build_focused_cypher(question, path_analysis)
# 3. 执行检索
results = kg_client.run(cypher)
return results
3.3 多跳检索的性能优化
// 参数化查询(预编译,避免重复解析)
MATCH (n:Company {name: $company_name})-[r*1..$max_hops]-(m)
RETURN m.name, type(r) AS rel_type
// 使用索引加速节点查找
CREATE INDEX company_name_index FOR (n:Company) ON (n.name)
// 限定结果数量
MATCH (c:Company {name: 'Samsung'})-[*1..3]-(related)
RETURN DISTINCT related
LIMIT 50
3.4 多跳检索的质量评估
多跳检索的评估指标:
- 准确率:返回的节点中与问题相关的比例
- 召回率:与问题相关的节点中被检索到的比例
- 路径效率:每条路径的「信息增益/检索成本」比
- 断链率:路径在中间断开(缺失关系)的比例
四、概率知识图谱
4.1 为什么需要概率?
现实世界中的许多关系并非确定无疑的。例如,从新闻中抽取的「某公司与某公司正在洽谈收购」——这个关系是可能发生的,但并非确定。概率知识图谱允许为每个关系附加置信度分数。
(公司A, 可能收购, 公司B) 置信度: 0.75
(公司A, 意向收购, 公司C) 置信度: 0.3
4.2 概率传播
概率知识图谱支持沿关系路径传播概率:
// 创建概率关系
MATCH (a:Company {name: 'A'}), (b:Company {name: 'B'})
CREATE (a)-[r:POSSIBLE_ACQUISITION {probability: 0.75}]->(b)
概率传播的示例:如果 A 可能收购 B(概率 0.75),B 的 CEO 是 C(确定性 1.0),那么 A 可能与 C 产生业务往来的概率为 0.75。
4.3 不确定性处理
在实践中,处理概率知识图谱的推荐方法:
- 阈值的设定:低于某个置信度(如 0.6)的关系,除非特别要求,否则不参与检索
- 置信度累加:多条路径指向同一结论时,使用概率公式计算综合置信度
- 显式传递:在结果中明确标注置信度,让用户或下游系统自行判断
五、高级索引技术
5.1 图分片(Graph Partitioning)
对于超大规模的知识图谱(超过 10 亿节点),需要进行图分片。常用的分片策略:
- 哈希分片:基于节点 ID 的哈希值将节点分配到不同分片
- 关系感知分片:将密集连接的子图放在同一分片,减少跨分片查询
- 领域分片:按领域(如金融、医疗、科技)自然分片
5.2 向量-图混合索引
结合向量索引和知识图谱的优势:
class HybridIndex:
'''向量-图混合索引'''
def __init__(self, vector_index, graph_db):
self.vector_index = vector_index # 语义搜索索引
self.graph_db = graph_db # 图结构索引
def search(self, query, top_k=10):
# 1. 向量搜索找到语义相似的候选节点
candidates = self.vector_index.search(query, top_k*2)
# 2. 在图数据库中扩展候选节点
expanded = []
for node_id in candidates:
neighbors = self.graph_db.get_neighbors(node_id, depth=2)
expanded.extend(neighbors)
# 3. 融合排序
results = self.fuse_and_rank(query, candidates, expanded)
return results[:top_k]
六、实际应用:金融知识图谱 RAG
假设我们构建一个金融领域的高级知识图谱 RAG 系统:
- 时序维度:存储公司季度财报数据的时间序列,可查询「某公司过去 5 个季度的营收变化」
- 多跳维度:从客户问题出发,2-3 跳内找到所需信息。如「三星芯片供应商的客户有哪些竞争对手」
- 概率维度:为市场传闻和分析师预测附加置信度
七、总结
高级知识图谱通过引入时间维度、优化多跳检索策略和处理不确定性,极大地扩展了知识图谱在 RAG 系统中的应用空间。时序图谱能够回答带时间条件的问题,多跳检索优化揭示了深层关联,概率图谱处理了现实世界的不确定性。结合高级索引技术,这些能力可以部署在超大规模的工业级系统中,支撑复杂的业务场景。
五、时序知识图谱
5.1 为什么需要时间维度?
传统知识图谱假设知识是静态的。但现实世界中,绝大多数知识都有时效性:
- “特斯拉的 CEO” 在 2022 年是马斯克
- “苹果的市值” 每天在变化
- “美国总统” 每隔几年变更
时序知识图谱(Temporal KG)给三元组附加时间戳,支持“某个时间点的知识”查询。
5.2 时序图谱的表示
(特斯拉, CEO, 马斯克) [2008-2022]
(特斯拉, CEO, 新CEO) [2023-]
5.3 时序查询
// 查2020年特斯拉的CEO
MATCH (t:Tesla)-[r:CEO]->(ceo)
WHERE r.from <= 2020 AND (r.to IS NULL OR r.to >= 2020)
RETURN ceo.name
六、概率知识图谱
概率知识图谱(Probabilistic KG)为三元组附加置信度分数:
(某药物, 治疗, 某疾病) 置信度: 0.85
(某基因, 关联, 某疾病) 置信度: 0.72
置信度可以来自:
- 实验数据的统计显著性
- 多个信息源的共识度
- 自然语言处理模型的置信度
七、多跳检索策略优化
多跳检索是 KG-RAG 的核心差异化优势。优化策略包括:
- 路径长度控制:根据问题复杂度动态调整跳数
- 路径剪枝:实体太多时优先探索高关联度的路径
- 路径重排序:多条路径返回时按相关度排序
- 增量扩展:先检索一跳,再根据结果决定是否扩展
八、总结
高级知识图谱 RAG 通过引入时间和概率维度,大幅扩展了传统 RAG 的能力边界。
关键要点回顾:
- 时序图谱支持基于时间的知识查询
- 概率图谱表达知识的不确定性
- 多跳检索需要路径优化策略
- 时序模型和知识图谱结合实现时序推理
五、时序知识图谱
5.1 为什么需要时间维度?
传统知识图谱假设知识是静态的。但现实世界中,绝大多数知识都有时效性:
- “特斯拉的 CEO” 在 2022 年是马斯克
- “苹果的市值” 每天在变化
- “美国总统” 每隔几年变更
时序知识图谱(Temporal KG)给三元组附加时间戳,支持“某个时间点的知识”查询。
5.2 时序图谱的表示
(特斯拉, CEO, 马斯克) [2008-2022]
(特斯拉, CEO, 新CEO) [2023-]
5.3 时序查询
// 查2020年特斯拉的CEO
MATCH (t:Tesla)-[r:CEO]->(ceo)
WHERE r.from <= 2020 AND (r.to IS NULL OR r.to >= 2020)
RETURN ceo.name
六、概率知识图谱
概率知识图谱(Probabilistic KG)为三元组附加置信度分数:
(某药物, 治疗, 某疾病) 置信度: 0.85
(某基因, 关联, 某疾病) 置信度: 0.72
置信度可以来自:
- 实验数据的统计显著性
- 多个信息源的共识度
- 自然语言处理模型的置信度
七、多跳检索策略优化
多跳检索是 KG-RAG 的核心差异化优势。优化策略包括:
- 路径长度控制:根据问题复杂度动态调整跳数
- 路径剪枝:实体太多时优先探索高关联度的路径
- 路径重排序:多条路径返回时按相关度排序
- 增量扩展:先检索一跳,再根据结果决定是否扩展
八、总结
高级知识图谱 RAG 通过引入时间和概率维度,大幅扩展了传统 RAG 的能力边界。
关键要点回顾:
- 时序图谱支持基于时间的知识查询
- 概率图谱表达知识的不确定性
- 多跳检索需要路径优化策略
- 时序模型和知识图谱结合实现时序推理
五、时序知识图谱
5.1 为什么需要时间维度?
传统知识图谱假设知识是静态的。但现实世界中,绝大多数知识都有时效性:
- “特斯拉的 CEO” 在 2022 年是马斯克
- “苹果的市值” 每天在变化
- “美国总统” 每隔几年变更
时序知识图谱(Temporal KG)给三元组附加时间戳,支持“某个时间点的知识”查询。
5.2 时序图谱的表示
(特斯拉, CEO, 马斯克) [2008-2022]
(特斯拉, CEO, 新CEO) [2023-]
5.3 时序查询
// 查2020年特斯拉的CEO
MATCH (t:Tesla)-[r:CEO]->(ceo)
WHERE r.from <= 2020 AND (r.to IS NULL OR r.to >= 2020)
RETURN ceo.name
六、概率知识图谱
概率知识图谱(Probabilistic KG)为三元组附加置信度分数:
(某药物, 治疗, 某疾病) 置信度: 0.85
(某基因, 关联, 某疾病) 置信度: 0.72
置信度可以来自:
- 实验数据的统计显著性
- 多个信息源的共识度
- 自然语言处理模型的置信度
七、多跳检索策略优化
多跳检索是 KG-RAG 的核心差异化优势。优化策略包括:
- 路径长度控制:根据问题复杂度动态调整跳数
- 路径剪枝:实体太多时优先探索高关联度的路径
- 路径重排序:多条路径返回时按相关度排序
- 增量扩展:先检索一跳,再根据结果决定是否扩展
八、总结
高级知识图谱 RAG 通过引入时间和概率维度,大幅扩展了传统 RAG 的能力边界。
关键要点回顾:
- 时序图谱支持基于时间的知识查询
- 概率图谱表达知识的不确定性
- 多跳检索需要路径优化策略
- 时序模型和知识图谱结合实现时序推理
延伸阅读
- 📺 B 站播放列表:Knowledge Graphs for RAG — 知识图谱增强检索
- 📚 更多学习资源,请访问 deeplearning.ai 官网