问题 (Problem)

大语言模型(LLM)在应用中存在两大核心痛点:内容幻觉 (Hallucination) 和推理过程不透明 (Lack of Interpretability)。将知识图谱(KG)作为外部知识源与LLM结合,是解决这些问题的有效途径。然而,现有的KG增强LLM方法在处理知识图谱问答(KGQA)任务时存在以下局限:

  • 单轮检索-回答模式 (Retrieve-then-Answer):这类方法一次性从KG中检索所有可能相关的事实,然后全部喂给LLM进行推理。这严重依赖检索结果的质量,限制了LLM在推理过程中的灵活性和主动性。
  • 多轮多跳推理模式 (Multi-Round LLM-KG Interaction):这类方法让LLM在KG上进行多步(hop)的探索式推理。但效率低下,因为每一步只检索一跳(one-hop)的邻居节点,且整个过程始终基于原始的复杂问题,没有针对当前推理步骤进行更具针对性的信息检索。

核心问题:现有方法都直接处理原始的复杂问题,而没有显式地分析和分解问题内部的逻辑结构,导致检索不够精准、推理效率低下。

方法 (Method)

为解决上述问题,论文提出了KELDaR框架(KG-Enhanced LLM based on question Decomposition and atomic Retrieval)。

核心思想:模仿人类解决复杂问题的思路——“分而治之”。首先将一个复杂问题分解成一棵由多个简单的、原子级别(atomic-level)的子问题组成的问题分解树(Question Decomposition Tree),然后针对每个原子子问题在KG上进行精准的原子化检索(Atomic Retrieval),最后综合所有子问题的答案,生成最终答案。

整体框架流程

整个框架的工作流程如下图所示,它是一个递归调用的过程。

Figure1
图1: KELDaR (右侧) 与两种主流方法 (左侧) 的对比

  1. 问题复杂度分类器 (Question Complexity Classifier):首先,使用一个少样本提示(few-shot prompt)的LLM判断输入问题 q 的类型,将其分为“简单(Simple)”或“复杂(Complex)”。

    • 判断标准:如果问题包含组合逻辑,需要多步推理,则为“复杂”;否则为“简单”。
  2. 复杂问题处理器 (Complex Question Processor):如果问题被分类为“复杂”,则启动此模块。

    • 分解 (Decomposition):使用一个名为 Decomposer 的LLM,将复杂问题 q 分解为一个有序的子问题序列 Sqq=[sq1q,...,sqlq]Sq^q = [sq_1^q, ..., sq_l^q]。子问题之间可以存在依赖关系,例如,后一个子问题可能会引用前一个子问题的答案,表示为 [#j] 标签。
    • 处理 (Handling):按顺序回答子问题。在回答第 i 个子问题 sqiqsq_i^q 之前,先用前面步骤得到的答案替换掉问题中的 [#j] 标签,形成一个完整的自然语言问题。然后,将这个处理后的子问题递归地输入到 KELDaR 框架中以求解其答案。
    • 整合 (Integration):所有子问题都得到解答后,使用一个名为 Integrator 的LLM,将原始问题、所有子问题及其答案整合在一起,进行最终的推理,并生成原始复杂问题的答案 a^q。这一步的Prompt经过精心设计,能够处理前面步骤中可能出现的错误,增强了框架的鲁棒性。
  3. 简单问题处理器 (Simple Question Processor):如果问题被分类为“简单”(或是由复杂问题分解而来的子问题),则启动此模块。

    • 相关事实搜索器 (Relevant Fact Searcher):调用此模块从KG中检索与简单问题 q 高度相关的事实集合 RefqRef^q
    • 回答器 (Answerer):使用一个名为 Answerer 的LLM,基于问题 q 和检索到的参考事实 RefqRef^q 进行一步推理,生成最终答案。

核心模块详解:相关事实搜索器 (Relevant Fact Searcher)

这是实现“原子化检索”的关键,包含三个步骤:

  1. 主题实体提取 (Topic Entity Extraction):从问题中识别出核心的实体,并将其链接到KG中对应的节点。

  2. 候选子图提取 (Candidate Subgraph Extraction):围绕主题实体,提取一个包含相关事实的候选子图。

    • 提取范围为何是两跳 (2-hop)? 论文使用的Freebase知识图谱中存在大量的“复合值类型”(Compound Value Type, CVT)节点。CVT节点本身没有实际意义,用于表示多元关系。例如,“理查德·尼克松的配偶是谁?”这个问题,在语义上是一步推理,但在KG中可能需要从“理查德·尼克松”出发,经过一个CVT节点,再到“帕特·尼克松”,这实际上是两跳的路径。因此,提取两跳范围的子图是为了确保能够覆盖这类看似简单但需要跨越多条边的查询。
      Figure2
      图2: 知识图谱中的CVT节点示例
    • 两种提取策略
      • 三元组/四元组策略 (Triple/Quadruple-based):提取包含“主题实体-关系1-实体1-关系2-实体2”这样路径的完整事实链。
      • 关系策略 (Relation-based):更侧重于提取关系路径,即“主题实体-关系1-关系2”。检索出的关系链在后续步骤中再补充实体信息。实验证明,这种策略虽然生成的Prompt更长,但效果更好,因为它能为LLM提供更丰富的上下文。
  3. 相关事实检索 (Relevant Fact Retrieval):采用“检索-重排序 (retrieval-then-reranking)”的两阶段方法,从候选子图中筛选出与问题最相关的 Top-KrrK_{rr} 个事实,作为最终的参考信息提供给LLM。

算法伪代码

框架的递归特性通过以下算法清晰地体现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Algorithm 1: KELDAR(q, G, D, depth)
Input: question q, KG G, max_depth D
Output: answer a

1: c <- CLASSIFIER(q)
2: if c == "Simple" or depth == D then
3: Ref <- SEARCHER(q, G)
4: a <- ANSWERER(q, Ref)
5: else
6: Sq <- DECOMPOSER(q)
7: Sa <- []
8: for i in 0 to len(Sq)-1 do
9: sq_i <- replace(Sq[i], Sa)
10: a_sq_i <- KELDAR(sq_i, G, D, depth + 1) // 递归调用
11: Sa.append(a_sq_i)
12: end for
13: a <- INTEGRATOR(q, Sq, Sa)
14: end if
15: return a

其中 D 是最大分解深度,实验中设为1。

Baseline (对比方法)

论文将KELDaR与两类主流方法进行了比较:

  • 基于推理的方法 (Reasoning-based):无需额外训练或微调模型。
    • IO (上下文学习), CoT (思维链), CoT+SC (自洽性思维链)
    • StructGPT, KB-BINDER, ToG (图上思考)
  • 基于训练的方法 (Training-based):需要在特定数据集上进行模型训练或微调。
    • 经典方法: KV-Mem, GraftNet, PullNet, NSM 等。
    • 近期方法: UniKGQA, ReasoningLM, DecAF, RoG 等。

数据集 (Datasets)

  • 知识图谱: Freebase
  • 问答数据集:
    • WebQSP: 包含4,737个相对简单的问题。
    • CWQ (Complex WebQuestions): 在WebQSP基础上构建的更复杂的数据集,包含34,689个问题,涉及组合、连接、比较等复杂逻辑。
  • 评测指标: EM (Exact Match),即模型输出的答案与标准答案完全匹配的比例。

可复现性 (Reproducibility)

  • 代码: 论文未提及开源代码。
  • 算力/模型:
    • LLM: 主要使用 gpt-3.5-turbo API,少量实验使用了 gpt-4-turbo
    • 外部工具: 实体链接器 ELQ,检索器 distilbert,重排序器 ms-marco-MiniLM-L-12-v2。这些都是公开可用的模型。
    • 成本: 框架避免了模型训练,属于“低成本”方案。但其推理成本主要来自LLM API的调用次数时间
      • 一个简单问题需要调用 LLM 2次。
      • 一个分解为 k 个子问题的复杂问题需要调用 2k+2 次。
      • 在测试集上完成推理,WebQSP耗时2.83小时,CWQ耗时14.82小时。
  • 超参数: 论文给出了关键的超参数设置(如few-shot样本数、检索的Top-K值、分解深度等),为复现提供了重要参考。

可改进的几个点 (Points for Improvement)

论文在结尾处也坦诚地指出了框架的局限性,这些是未来可以改进的方向:

  1. 对特定复杂问题的处理能力: 框架在处理某些类型的复杂问题(尤其是“最高级”比较,如“最高的山是哪个?”)时表现不佳,说明其问题分解策略仍有提升空间。
  2. 分解过程的可控性: 完全依赖LLM进行问题分解,其结果有时不可靠。需要研究更可控、更鲁棒的分解方法,以保证子问题的质量。
  3. 对不同LLM的普适性: 由于API成本限制,在GPT-4上的实验不够充分。框架在其他(尤其是开源)LLM上的表现有待进一步验证。
  4. 错误传播问题: 尽管整合模块设计得比较鲁棒,但从分类、分解到子问题解答,任何一步的错误都可能被累积和放大,影响最终结果。

可以被引用的一些结论 (Citable Conclusions)

  1. 问题分解的有效性: 在与知识图谱交互之前,对复杂问题进行显式的逻辑分解,可以显著提升KGQA任务的性能。这种“分解-原子化检索-整合”的范式是处理复杂推理任务的有效途径。
  2. 两跳原子化检索的必要性: 针对包含CVT节点等特殊结构的知识图谱,将原子检索的范围扩展到修剪后的两跳子图,是确保检索到关键事实的有效策略。
  3. 低成本实现SOTA性能: 在无需额外训练或微调的低成本设置下,KELDaR框架的表现优于所有基于推理的SOTA方法,并能与多数基于训练的方法相媲美甚至超越,展示了其强大的实用性和竞争力。
  4. 参考事实并非越多越好: 简单地增加提供给LLM的参考事实数量不一定能提升性能。过长的上下文可能导致LLM“忘记”从少样本示例中学到的推理模式,从而对最终效果产生负面影响。