- 作者:Yilin Wen, Zifeng Wang, Jimeng Sun
- 单位:University of Illinois Urbana Champaign
- 发表在:ACL2024
核心内容
- 大模型 QA 具有思考过程不透明、可解释性低、更新知识成本极高的特点;而现有的 RAG 等方案又往往会在引入大量噪音的同时无法检索到关键信息;
- 本文提出了 MindMap,其在提出了一种同时检索知识图谱中的路径结点和相邻结点的知识图谱检索方法,并且将其合并之后,要求 LLM 据此生成 MindMap 的方法。这一方法一方面激发了其推理能力,另一方面通过生成的 MindMap 使得思考过程透明化;
- 本文设计了一个新指标来衡量幻觉程度并且采纳了一组指标对思考过程进行评分,最后在一组医学数据集和知识图谱上进行了实验,证明了框架的优越性。
背景
- 微调训练大模型有很多坏处:
- 不灵活:微调工作比较困难,而且过多的微调会导致对知识的灾难性遗忘
- 幻觉
- 不透明:无法解释,无法证实
- 知识图谱是一个很好的知识表示方法,天然支持生成推理路径,而且知识图谱库可以很方便地往里面添加或者移除知识,所以我们经常将其和大模型结合起来进行协同推理(synergistic inference)
- 过去针对这个问题的解决方案主要分两类:
- RAG:很难检索到精准的信息,不能很好利用知识图谱的逻辑结构
- LLM 图挖掘:很少被用于文本生成任务(现在已经不一样了)
- 本文目标:
- 激发 LLM 的图推理能力,生成有证据支持的内容
方法论
MindMap 的方法主要分三个部分:
- 证据图挖掘:识别输入 $q$ 中的实体 $V_{q}$,并且分别用两种方案(路径查询和邻居查询)查询知识图谱 $G$ 来构建多个证据子图 $G_{q}$
- 证据图合并:将各种方案查询得到的子图分别汇总为一组推理图 $G_{m}$
- LLM 推理:合并构建的推理图,让 LLM 基于此以及自己的内在知识推理出答案,并且将推理过程用思维图(mindmap)展现出来

证据图挖掘
首先需要识别输入 $q$ 中的实体 $V_{q}$:
- 用 few-shot 提示的方法,要求大模型从 $q$ 中识别出一组关键词实体
- 将关键词实体和知识图谱中的实体用 BERT 分别编码为向量 $H_{M},H_{G}$,用 Bi-Encoders 的方法,使用关键词实体查询出一组真正的实体组成 $V_{q}$
接下来需要用 $V_{q}$ 从知识图谱中查询出两组证据子图:
- 基于路径的子图 $G_{q}^{\text{path}}$:
- 将 $V_{q}$ 中的实体排成一列,从前往后每次按顺序取前面两个实体去知识图谱中检索路径(如果有多条路径,也只取 5 个)
- 如果后面的实体出现在了前面两个实体之间的路径中,则只选择这条路径,后面的这个实体可以从后面的序列中移除
- 基于邻居的子图 $G_{q}^{\text{neighbor}}$:查询 $V_{q}$ 中所有实体的邻居构成子图,如果这些邻居在语义上和问题 $q$ 高度相关,则也递归地查询其邻居

多条路径和多组邻居构成了多个证据子图,在经过修剪筛去无意义重复子图后,供后续继续处理。
具体的修剪算法在文章中未找到。
证据图合并
之前构建的证据子图都被简单格式化之后就放到了提示词中,紧接着就被喂给大语言模型将之转换为自然语言描述。作者将这样的自然语言描述称之为推理图 $G_{m}$(包括 $G_{m}^{\text{path}},G_{m}^{\text{neighbor}}$)。
相比于转化为文本的结构化知识图谱,将其转换为自然语言描述会更加简练,逻辑也更加连贯。更重要的是,转换为自然语言的过程中大模型会直接合并语义相同的实体,并且消除潜在的歧义。
使用 MindMap 推理
作者设计了一套提示词模板来让大模型基于 $G_{m},q$ 生成 MindMap。这些提示词是通过 langchain 来使用的:
SystemMessage(content="You are an excellent AI doctor, and you can diagnose diseases and recommend medications based on the symptoms in the conversation.")
HumanMessage(content="Patient input:" + Question)
AIMessage(content=f """Combine the knowledge you already have, you have some extra medical knowledge information in the following:\n\n ### """+ path_reasoning_graph + """\n\n###""" + neighbor_reasoning_path)
HumanMessage(content="""What disease does the patient have? What tests should patient take to confirm the diagnosis? What recommended medications can cure the disease? Think step by step.\n\n\n
Output1: The answer includes disease and tests and recommended medications.\n\n
Output2: Show me inference process as a string about extract what knowledge from which Path-based Evidence or Neighbor-based Evidence, and in the end infer what result. \n
Transport the inference process into the following format:\n
Path-based Evidence number('entity name'->'relation name'->...)->Path-based Evidence number('entity name'->'relation name'->...)->Neighbor-based Evidence number('entity name'->'relation name'->...)->Neighbor-based Evidence number('entity name'->'relation name'->...)->result number('entity name')->Path-based Evidence number('entity name'->'relation name'->...)->Neighbor-based Evidence number('entity name'->'relation name'->...).\n\n
Output3: Draw a decision tree""")
- 任务的输入:
- SystemMessage:定义角色
- HumanMessage:患者症状(query)
- AIMessage:加入之前处理好的推理图文本
- HumanMessage:引导大模型生成三个输出
- 任务的三个输出:
- Output 1:直接回答患者的疾病、所需测试和推荐药物。
- Output 2:展示推理过程,描述从哪些证据(Path-based 或 Neighbor-based)中提取了哪些知识,并以特定格式(路径序列)输出推理链。
- Output 3:绘制决策树,展示推理的逻辑结构。
生成的推理链+决策树即所谓的 MindMap。由于作者在提示词中加了一句「Combine the knowledge you already have」,所以作者认为自己的模型可以做到内外知识协同推理,胜过他人的模型。
实验
数据集
实验均在医学数据集上进行,作者构建了一组医学数据集:
- 问答集:
- GenMedGPT-5 k:医患问答
- CMCQA:多轮问答
- ExplainCPE:多项选择(源自中国国家许可药剂师考试)
- 知识图谱:
- EMCKG:作者用 chatdoctor 5 k 的表数据制作的图谱,规模较小,共 5802 个三元组,作为 GenMedGPT-5 k 的知识库
- CMCKG:作者用 QASystemOnMedicalKG 的数据制作,规模较大,共 506490 个三元组,作为 CMCQA 和 ExplainCPE 的知识库
基线
- 纯模型: GPT-3.5、GPT-4
- 提示词工程:CoT, ToT
- RAG(gpt-3.5-turbo-0613 backbone):BM25、Dense Retrieval(word2vec)、知识图谱检索
评估指标
- BERTScore:语义相似度
- GPT-4:根据二者相似度打分,或者比较两个生成结果的好坏;比较标准:
- 多样性
- 完整性
- 事实准确性
- 诊断正确性
- 推荐药物/疗法的正确性
- 提出的幻觉指标:
- 用第一步生成的关键词实体数据在 mT 5-large 的基础上训练一个关键词提取模型 NER-MT 5
- 将预测得到的文本和参考答案都用 NER-MT 5 提取关键词,并且分别拼接为序列
- 计算生成文本和参考答案各自产生的序列之间的 TF-IDF相似度
- 提取的关键词越多相似,得分越高,说明幻觉越低
这个方法的效果非常可疑,因为实际上其只是计算了关键词相似度而已。

生成质量对比:




消融实验:不同模块对幻觉的影响:
结论
- 本文提出的方法提供了一种帮助 LLMs 理解知识图谱的方法,LLMs 可以有效利用知识图谱提升回答质量和推理能力
- 可以将 LLMs 的内部知识和知识图谱提供的外部知识结合起来进行协同推理,并且在生成答案的同时生成决策过程(MindMap)
- 通过在三个数据集上的大量的实验证明了 MindMap 在协同推理、可解释性方面的优越性
启发与评价
- 本文提供了一种不错的知识图谱检索方案,允许大模型在知识图谱上进行推理,事实证明效果很好
- 本文在最后一步将结构化文本转化为了自然语言来输出逻辑,这不仅可以自动合并重复的实体,还可以让逻辑结构更加简练并且易于理解。虽然习惯上认为结构化是推理的基础,但是自然语言似乎才是事实上推理的载体;
- 本文设计的幻觉指标仍然是在衡量生成文本和答案的相似度,我认为衡量幻觉指标还是要从生成内容的可靠性和逻辑通顺长度出发
- 本文标题的 MindMap 其实只是最后一步提示生成的内容,本文最核心的部分其实更像是先前的推理部分