问题 (Problem)

传统的“朴素”检索增强生成(RAG)在处理单个文档时表现良好,但现实世界中的许多数据,如引文网络、社交媒体、知识图谱等,都以相互连接的图(Graph)形式存在。朴素 RAG 的局限性在于:

  • 忽略拓扑信息:它只关注文档的文本内容,忽略了文档之间的连接关系(如引用、链接、关系),而这些连接关系对于深度理解和推理至关重要。
  • 检索单元受限:它以独立的文档作为检索单元,无法检索出一个由多个相关实体及其关系组成的“子图”上下文。

Figure1

因此,核心问题是:如何让大型语言模型(LLM)在执行 RAG 时,能够有效地利用这种网络化的图结构数据,从而同时理解文本内容和拓扑结构,以生成更准确、更具上下文感知能力的答案?

这带来了两个核心挑战:

  1. 检索挑战:如何从一个大规模的文本图中高效地检索出与问题最相关的文本子图(textual subgraph)?穷举搜索所有可能的子图是一个 NP-hard 问题。
  2. 生成挑战:如何将检索到的子图所包含的**联合文本与拓扑信息(joint textual and topological information)**有效地融入到 LLM 中,以指导其生成过程?

方法 (Method)

为了解决上述问题,作者提出了 GRAG(Graph Retrieval-Augmented Generation)框架。该框架包含两个核心阶段:文本子图检索文本图增强生成

文本子图检索 (Textual Subgraph Retrieval)

为了避免 NP-hard 的穷举搜索,GRAG 采用了一种创新的“分治”(divide-and-conquer)策略来近似寻找最优子图。其核心思想是,一个重要的子图是由一些重要的“关键节点”及其邻域组成的。

该过程可以分解为三个步骤,如下图 a 部分所示:

Figure2
(图例参考:原论文 Figure 2)

  1. 索引 (Indexing)

    • 思想:将对整个图的子图搜索问题,简化为对每个节点的“自我中心图”(ego-graph)的搜索问题。
    • 实现:对于图中的每一个节点 v,提取其 K-hop 邻域内的所有节点和边,构成一个 K-hop ego-graph,记为 G[NK(v)]G[\mathcal{N}_{K}(v)]
    • 使用预训练语言模型(PLM,如 SentenceBERT)将每个 ego-graph 中所有节点和边的文本属性编码为向量,然后通过平均池化(mean pooling)操作,为每个 ego-graph 生成一个唯一的图嵌入向量 zgz_g

      zg=POOL(PLM({Tn}nVg,{Te}eEg))z_{g}=POOL(PLM(\{T_{n}\}_{n\in V_{g}},\{T_{e}\}_{e\in E_{g}}))

    • 所有 ego-graph 的嵌入向量被存储起来,建立索引。
  2. 排行 (Ranking)

    • 使用相同的 PLM 将用户查询 q 编码为查询向量 zqz_q
    • 计算查询向量 zqz_q 与索引中所有 ego-graph 嵌入向量 zgz_g 之间的余弦相似度。
    • 选出相似度最高的 Top-N 个 ego-graphs,作为候选子图。

      SN(G)=Top_NgS(G)cos(zq,zg)\mathcal{S}_{N}(G)=Top\_N_{g \in S(G)} cos(z_{q},z_{g})

  3. 软剪枝 (Soft Pruning) 与合并 (Merging)

    • 动机:检索到的 ego-graphs 中可能仍包含与查询不相关的节点和边,这些冗余信息会干扰 LLM 的生成。
    • 实现:引入一个可学习的“软剪枝”机制。使用两个多层感知机(MLP)分别计算每个节点/边与查询 q 之间的距离,并生成一个缩放因子 α\alpha(值域 0-1)。

      zn=PLM(Tn),αn=MLPϕ1(znzq)z_{n}=PLM(T_{n}), \alpha_{n}=MLP_{\phi_{1}}(z_{n}\ominus z_{q})

      ze=PLM(Te),αe=MLPϕ2(zezq)z_{e}=PLM(T_{e}), \alpha_{e}=MLP_{\phi_{2}}(z_{e}\ominus z_{q})

      其中 \ominus 表示用于测量逐元素距离的运算符
    • 这个因子 α\alpha 可以理解为一个“重要性”或“相关性”权重。距离查询越远的实体,其 α\alpha 值越接近 0,在后续处理中其影响力会被减弱。
    • 最后,将这 N 个经过软剪枝“加权”的 ego-graphs 合并起来,形成最终提供给 LLM 的近似最优子图 g^\hat{g}

文本图增强生成 (Textual Graph Augmented Generation)

为了让 LLM 全面理解检索到的子图 g^\hat{g},GRAG 设计了两种互补的视图来向 LLM 传递信息,如上图 b 部分所示

  1. 文本视图 (Text View) - 硬提示 (Hard Prompts)

    • 目标:将图的拓扑结构用文本形式描述出来,作为 LLM 能够直接阅读的硬提示。
    • 实现:设计了一种算法,将每个检索到的 ego-graph 无损地转换为分层的文本描述 (hierarchical text descriptions)
      • 首先,通过广度优先搜索(BFS)从 ego-graph 中提取一个生成树结构 Tg\mathcal{T}_g
      • 然后,对树 Tg\mathcal{T}_g 进行前序遍历,按照层级关系和预设的模板(如“节点 A 引用了节点 B”)生成文本。
      • 最后,将图中剩余的非树边(如跨层连接)作为补充关系插入到文本描述中。
    • 这个过程将图的结构信息编码为 LLM 善于处理的层级化文本,最终的硬提示是 [查询 q, 分层文本描述 D_g]
    • 下图是一个将引文网络的 2-hop ego-graph 转换为分层文本描述的例子。
      Figure4
      (图例参考:原论文 Figure 4)
  2. 图视图 (Graph View) - 软提示 (Soft Prompts)

    • 目标:将图的拓扑信息直接编码为嵌入向量(即图令牌),作为软提示,补充文本视图无法完全捕捉的结构信息。
    • 实现:使用一个图神经网络(GNN,如 GAT)来编码经过软剪枝的子图。
    • 在 GNN 的消息传递过程中,使用之前计算出的缩放因子 α\alpha 来加权节点和边的特征,从而控制信息流,让与查询更相关的实体传递更多的信息。

      mu(l)=MSG(l)(αuhu(l1),αuveuv)m_{u}^{(l)}=MSG^{(l)}(\alpha_{u}\cdot h_{u}^{(l-1)},\alpha_{uv}\cdot e_{uv})

    • GNN 输出的图嵌入 hg^h_{\hat{g}} 经过一个 MLP 对齐到 LLM 的词嵌入空间,成为软提示。

最终,LLM 的生成过程同时由硬提示(文本嵌入 hTh_T)和软提示(图嵌入 hg^h_{\hat{g}})共同引导,其联合输入形式为 [hg^;hT][h_{\hat{g}}; h_T]

Baseline

为了验证 GRAG 的有效性,论文与以下几类方法进行了对比:

  • LLM Baselines:
    • Frozen LLM: 直接使用 Llama2-7b 模型回答问题,不进行任何微调或检索。
    • Fine-tuned LLM: 使用 LoRA 对 Llama2-7b 模型在任务数据上进行微调。
  • RAG-based Retrievers:
    • 经典方法: BM25 (基于词频的统计模型)。
    • 基于稠密向量的检索器:
      • MiniLM-L12-v2
      • LaBSE
      • mContriever
      • E5
    • 专门针对图的检索器: G-Retriever (先检索节点和边,再用 Prize-Collecting Steiner Tree 方法构建子图)。

数据集 (Datasets)

实验在 GraphQA 基准上进行,主要使用了两个数据集:

  • WebQSP: 一个大规模的多跳知识图谱问答(QA)数据集。图中节点和边的数量多,结构复杂。
  • ExplaGraphs: 一个专注于常识推理的数据集,图的规模相对较小。
数据集 # Graphs # Nodes (avg) # Edges (avg) # Tokens (avg)
WebQSP 4,700 1370.89 4252.37 100,627
ExplaGraphs 2,766 5.17 4.25 1,396

可复现性 (Reproducibility)

  • 代码: 作者在论文摘要中提供了 GitHub 仓库链接:https://github.com/HuieL/GRAG,代码是开源的。
  • 算力: 实验在一台配备 4 个 NVIDIA A10G GPU 的服务器上进行。
  • 模型与配置:
    • LLM Backbone: Llama-2-7b-hf。
    • 微调方法: LoRA。
    • Graph Encoder: 4 层的 GAT。
    • 优化器: AdamW。
    • Batch Size: 2。

整体来看,由于代码和详细的实验配置都已提供,该研究的可复现性较高。

可改进的几个点 (Potential Improvements)

论文在第 7 节(Limitations)中指出了当前方法的局限性,这些也是未来可以改进的方向:

  1. 对初始排行的依赖性: GRAG 的检索效果在很大程度上取决于初始 ego-graph 排行的质量。如果图的结构复杂或节点重要性难以估计,可能会导致初始检索的 ego-graphs 质量不高,从而影响最终性能。
  2. 剪枝机制的优化: 软剪枝机制虽然有效,但其性能依赖于 MLP 的学习能力。在更复杂的场景下,可能需要设计更先进、更具解释性的剪枝策略。
  3. 超大图的可扩展性: 虽然分治策略提升了效率,但对于节点数以亿计的超大规模图,对每个节点建立 ego-graph 索引的开销(存储和计算)仍然巨大。需要探索更具扩展性的索引和检索方法。
  4. 动态图的处理: 当前模型主要针对静态图。如何将其扩展到能够处理节点和边随时间变化的动态图,是一个有价值的研究方向。
  5. 子图大小 K 的权衡: 增加 K-hop 中的 K 可以包含更多上下文,但也可能引入更多噪声并增加计算成本。如何动态地、自适应地确定最佳的 K 值是一个值得探索的问题。

可以被引用的一些结论 (Key Takeaways)

  1. GRAG 显著优于传统 RAG: 在需要多跳推理的图相关任务上,GRAG 的性能显著超过了所有基于 RAG 的 baseline 和纯 LLM baseline。
  2. 检索比微调更有效: 未经微调的 LLM 加上 GRAG 后,其性能甚至超过了在任务数据上经过 LoRA 微调的 LLM。这表明,为 LLM 提供结构化的外部知识是一种比单纯微调模型参数更有效、更经济的提升其图推理能力的方法。
  3. “软剪枝”至关重要: 消融实验证明,移除软剪枝模块会导致性能大幅下降。这凸显了在将检索到的信息喂给 LLM 之前,过滤掉无关实体的必要性,尤其是在边连接密集的图中。
  4. 文本和拓扑信息缺一不可: 实验表明,同时提供“文本视图”(硬提示)和“图视图”(软提示)是实现最佳性能的关键。只提供其中一种,都会导致性能显著下降,证明了两种视图的互补性。
  5. 更大的 LLM 未必更好: 在没有有效检索机制的情况下,单纯增加 LLM 的参数规模(从 7B 到 13B)并不能在图相关任务上带来性能提升,有时甚至会下降。这强调了先进的检索机制(如 GRAG)对于释放 LLM 在特定领域(如图推理)潜力的重要性。
  6. GRAG 具备良好的迁移学习能力: 在一个大规模数据集(如 WebQSP)上训练的 GRAG 模型,可以被直接用于提升在另一个小规模数据集(如 ExplaGraphs)上的性能,展现了其学习到的图编码和理解能力的通用性。