配音

高级知识图谱 RAG

课程简介

复杂关系推理、时序图谱、多跳检索在 RAG 中的应用。

🎬 本课程视频:Knowledge Graphs for RAG — 知识图谱增强检索


高级知识图谱 RAG 技术

一、基础知识图谱的局限

在之前的学习中,我们掌握了知识图谱的核心概念和基础查询方法。但实际业务场景往往比基础知识图谱能够处理的要复杂得多。主要面临以下挑战:

  1. 时间维度缺失:基础知识图谱中的关系和状态是静态的,无法回答「2020 年的时候谁在管理这个团队」这类涉及时间变化的问题
  2. 多跳检索效率:虽然知识图谱天然支持多跳查询,但如何在 RAG 场景中高效地执行多跳检索是个挑战
  3. 不确定性处理:现实世界中的很多关系并非确定无疑,而是带有概率性的

二、时序知识图谱

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 不确定性处理

在实践中,处理概率知识图谱的推荐方法:

  1. 阈值的设定:低于某个置信度(如 0.6)的关系,除非特别要求,否则不参与检索
  2. 置信度累加:多条路径指向同一结论时,使用概率公式计算综合置信度
  3. 显式传递:在结果中明确标注置信度,让用户或下游系统自行判断

五、高级索引技术

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 系统:

七、总结

高级知识图谱通过引入时间维度、优化多跳检索策略和处理不确定性,极大地扩展了知识图谱在 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 的核心差异化优势。优化策略包括:

  1. 路径长度控制:根据问题复杂度动态调整跳数
  2. 路径剪枝:实体太多时优先探索高关联度的路径
  3. 路径重排序:多条路径返回时按相关度排序
  4. 增量扩展:先检索一跳,再根据结果决定是否扩展

八、总结

高级知识图谱 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 的核心差异化优势。优化策略包括:

  1. 路径长度控制:根据问题复杂度动态调整跳数
  2. 路径剪枝:实体太多时优先探索高关联度的路径
  3. 路径重排序:多条路径返回时按相关度排序
  4. 增量扩展:先检索一跳,再根据结果决定是否扩展

八、总结

高级知识图谱 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 的核心差异化优势。优化策略包括:

  1. 路径长度控制:根据问题复杂度动态调整跳数
  2. 路径剪枝:实体太多时优先探索高关联度的路径
  3. 路径重排序:多条路径返回时按相关度排序
  4. 增量扩展:先检索一跳,再根据结果决定是否扩展

八、总结

高级知识图谱 RAG 通过引入时间和概率维度,大幅扩展了传统 RAG 的能力边界。

关键要点回顾:
- 时序图谱支持基于时间的知识查询
- 概率图谱表达知识的不确定性
- 多跳检索需要路径优化策略
- 时序模型和知识图谱结合实现时序推理

延伸阅读