论文:Empowering GraphRAG with Knowledge Filtering and Integration
解决 GraphRAG 问题:
-
噪音检索:当从外部知识图谱中检索到不相关或误导性的信息时,会干扰模型推理
- 过度依赖外部知识:模型可能忽略其内部已有的正确信息,导致性能下降。
当检索到的信息与问题不匹配、存在大量噪声或冲突时,GraphRAG 会误导模型,从而导致性能下降。
尤其是当知识图谱中的实体/路径数量过多或出现无关三元组时,LLM 在生成答案时会“过度信任”外部信息,最终比单独使用 LLM 还差。
问: “Filtering”(过滤) 在 GraphRAG 中的目的是什么?
-
答:已有研究发现,如果从知识图谱检索到的路径或三元组(即外部信息)里混入了很多“无关”或“错误”信息,反而会干扰模型做出正确回答。
-
于是就需要“过滤机制”(filtering)来把检索到的噪声或无关信息删掉,只保留对问题最有帮助的那部分。
问:为什么要有 “Integration”(整合) 这一步?
-
答:因为有时大模型自己本身就知道答案(内在知识),不一定所有题都要依赖外部的图谱检索。
-
如果盲目依赖检索到的外部信息,可能会“舍近求远”,或者把本来大模型能正确回答的题目给带偏。
-
因此上文提到的 Integration 机制会让系统判断——是该用大模型内在知识,还是用外部检索信息,或者把两者结合起来,得到最优解。
为什么仅靠常规的过滤方法(如 PageRank、相似度)也不够?
-
单纯的“相似度”或“图结构”筛选,无法动态感知 LLM 在具体回答场景下最需要的知识点,也没法实时判断“模型自身已经知道哪些答案,不需要重复信息”。
-
因此需要更灵活、和 LLM 结合更紧密的过滤与整合机制(如作者提出的Attention 分数 + logits 评估)。
解决思路:
GraphRAG-FI
├── 子解法 1:GraphRAG-Filtering
│ ├── 粗过滤:基于注意力
│ └── 细过滤:基于 LLM 评分
└── 子解法 2:GraphRAG-Integration
├── 生成多答案
└── logits 筛选融合
GraphRAG-Filtering:利用注意力和 LLM 评分进行“双阶段过滤”,只保留最相关、最可信的外部检索路径。
-
在检索到的大量路径中先用注意力机制“粗过滤”,再用 LLM 评分“细过滤”,得到高优先级外部知识;
GraphRAG-Integration:基于 logits 分值来融合“外部增强答案”和“模型内部答案”,避免模型盲目信任检索内容。
-
通过 logits 置信度判断来结合“外部增强答案”和“LLM-only 答案”,平衡二者。
问:关于“双阶段过滤”的必要性
作者为什么不直接在“细过滤”阶段就让 LLM 处理全部检索到的路径,而是先做一个“粗过滤”,这样分两步的设计有什么特定优势?难道多调用 LLM 做一次整体过滤不行吗?
论文说明了两阶段过滤的动机——若不先用较轻量级的“注意力阈值”进行粗过滤,LLM 将会在“细过滤”阶段面临过多、甚至成百上千条检索路径,需要计算量大且噪声严重;
此外,一次性让 LLM 处理所有检索结果,成本和复杂度会急剧上升,而“粗过滤”能先把明显无关的信息剔除,再让 LLM 更精细地处理剩余的少量候选,效率和效果都更好。
问:关于“注意力分数”在过滤阶段的依据
作者在使用“注意力分数”进行粗过滤时,选择了中间层(“(middle 2)-th layer”)的注意力,这是否是一种拍脑袋决定?如果换别的层,或是取多层的平均注意力,结果会如何?
作者在文中提到有文献(如 Chuang et al., 2023;Halawi et al., 2023)指出,模型中间层往往对句子级或片段级的关联信息较为敏感,在小规模试验中效果较好。
不过,这并不代表这是唯一正确做法。若取多层平均或取更深层,可能也有竞争力,但会增加计算开销或带来噪声。
作者未在论文中做大规模对比,仅给出提议和小范围实测结果,属于一种经验性选择。
全流程分析
├── GraphRAG-FI【核心方法:融合检索与内在推理】
│ ├── 输入【问题 + 外部图谱检索结果 + LLM 自身知识】
│ │ ├── 问题:自然语言提问【用户需求】
│ │ ├── 检索结果:由外部知识图谱获取的多条路径或三元组【外部支持】
│ │ └── LLM 自身知识:模型内部预训练参数中蕴含的信息【内在认知】
│ │
│ ├── 处理过程【两大模块:GraphRAG-Filtering + GraphRAG-Integration】
│ │ ├── GraphRAG-Filtering【模块 1:过滤外部信息】
│ │ │ ├── 阶段 1:基于注意力的粗过滤【路径重要性判断】
│ │ │ │ ├── 使用 LLM 对检索到的路径或三元组进行注意力评分【提取相关性】
│ │ │ │ └── 筛选得分较高的部分作为高优先级候选【去除低相关内容】
│ │ │ └── 阶段 2:基于 LLM 的细过滤【精细化判断】
│ │ │ ├── 对粗过滤后剩余的高优先级路径,利用 LLM 进一步打分【确认可靠性】
│ │ │ └── 仅保留得分超过阈值的路径,形成最终可用外部知识【确保准确】
│ │ │
│ │ └── GraphRAG-Integration【模块 2:平衡内外部知识】
│ │ ├── logits 筛选【识别高置信度答案】
│ │ │ ├── 分别对“LLM-only 答案”与“外部知识增强答案”计算 logits【评估可信度】
│ │ │ └── 过滤掉低置信度回答,仅保留高分答案【提高鲁棒性】
│ │ └── 动态融合【综合输出】
│ │ ├── 根据最终剩余的高置信度答案,选取或合并【答案整合】
│ │ └── 避免外部信息覆盖模型自身正确答案【防止错误引入】
│ │
│ └── 输出【改进后的问答结果】
│ ├── 最终答案:融合模型自身知识与高质量外部路径【回答精准】
│ └── 附加解释:可选地列出使用到的关键外部证据【可追溯性】
数据来源
论文使用了两个大规模知识图谱问答(KGQA)数据集:
- WebQSP
:包含 2,826 条训练数据和 1,628 条测试数据,问题多为 2-hop 推理。
- CWQ(ComplexWebQuestions)
:包含 27,639 条训练数据和 531 条测试数据,涉及多跳(最多 4-hop)推理。
以 ROG 为例,GraphRAG-FI 相比 PageRank 滤法,大约在 Hit 上有 4 个点的提升;相比相似度过滤也差不多是类似幅度。
三种检索方式都能从 GraphRAG-FI 中收益,但由于检索方式不同,初始噪声水平和子图/路径结构不一样,提升幅度也不同。
相对而言,GNN-RAG 最初命中率就高,提升空间略小;SubgraphRAG 的基线相对弱,整合后收益最大。
没想到 GNN-RAG 方法这么好,比 SubgraphRAG 牛逼太多了。
我之前写的算法就是 SubgraphRAG,现在必须转 ROG、GNN-RAG。