论文:ChatKBQA: A Generate-then-Retrieve Framework for Knowledge Base Question Answering with Fine-tuned Large Language Models
论文背景
知识库问答(Knowledge Base Question answer, KBQA)旨在通过大规模知识库(知识库)来回答自然语言问题,知识库问答可以概括为两个关键步骤:知识检索和语义解析。然而,仍然存在三个核心挑战:低效率的知识检索,检索错误对语义解析的不利影响,以及以前的KBQA方法的复杂性。
为了解决这些挑战,我们引入了ChatKBQA,这是一个新颖而简单的生成-检索KBQA框架,它提出首先使用微调的llm生成逻辑形式,然后使用无监督检索方法检索和替换实体和关系,以更直接地改进生成和检索。
注意:这里的ChatKBQA和RAG(Retrieval-Augmented Generation)不太相同。RAG是先检索再生成,而ChatKBQA是先生成再检索。
相关工作
现有的知识库问答(KBQA)方法可以大致分为基于信息检索(基于 IR)和基于语义解析(基于 SP)的方法。最近,也有一些基于大型语言模型(基于 LM)的 KBQA 方法。
(1)基于 IR 的 KBQA 方法主要基于自然语言问题从 KB 中检索相关的事实三元组或文本,形成一个子图来确定答案。 (2)基于 SP 的 KBQA 方法专注于将问题翻译成针对 KB 可执行的逻辑形式,例如 SPARQL、查询图和 S 表达式。一些基于 SP 的方法利用逐步查询图生成的策略和搜索语义解析。或者,其他基于 SP 的方法使用 seq2seq 模型完全生成 S 表达式,并为语义解析过程提供各种增强。 (3)基于 LLM 的 KBQA 方法 利用 LLM 的思维能力,通过逐步从图中检索答案。
在本文中,我们提出的 ChatKBQA 是第一个使用微调 LLM 的基于 SP 的 KBQA 方法,它创新性地提出了一种生成然后检索方法来简化 KBQA 方法。并且ChatKBQA框架在LLM生成逻辑形式后以无监督的方式为实体和关系提出了一种短语级检索方法,提高了生成性能和检索效率。
方法论
ChatKBQA 是一个生成然后检索的 KBQA 框架,带有微调的 LLM。首先,ChatKBQA 框架需要通过指令调整有效地基于 KBQA 数据集中的(自然语言问题、逻辑形式)对微调开源 LLM。然后使用微调后的 LLM 通过语义解析将新的自然语言问题转换为根据候选逻辑形式。接着,ChatKBQA 在短语级别检索这些逻辑形式中的实体和关系,并在转换为 SPARQL 后搜索可以针对 KB 执行的逻辑形式。最后,转换后的 SPARQL 生成最终答案集,从而对自然语言问题产生可解释和知识要求的响应。
对llm进行有效的微调以构建指令微调训练数据,ChatKBQA首先将KBQA数据集中训练集自然语言问题对应的SPARQL转换为等价的逻辑形式,然后用相应的实体标签(例如“[Justin Bieber]”)替换这些逻辑形式中的实体id(例如,“m.06w2sn5),让llm比无意义的实体id更好地理解实体标签。然后,我们将自然语言问题(例如“Justin Bieber 的兄弟的名字是什么?”)和处理后的相应逻辑形式(例如“(AND (JOIN [人, 人, 性别 ] [男性]) (JOIN (R [人, 兄弟关系, 兄弟)) (JOIN (R [人, 人, 兄弟 s ]) [ Justin Bieber ])))) 分别作为“输入”和“输出”,并将“指令”添加为“生成逻辑形式查询,检索与给定问题对应的信息。”构成了 LLM 的指令微调训练数据。ChatKBQA 采用参数高效微调 (PEFT) 技术,包括各种有效的微调方法,例如 LoRA、QLoRA、P-tuning v2和 Freeze,以最小化具有大量参数微调 LLM 的成本。ChatKBQA 可以在上述所有微调方法和开源 LLM 之间切换,例如 Llama-2-7B和 ChatGLM2--6B 。
实验结果
在标准KBQA数据集WebQSP和CWQ上的实验结果显示,ChatKBQA在KBQA任务中达到了新的最先进性能。此外,额外的实验也验证了生成-检索方法在生成和检索结果效率上的提升。
知识拓展
知识库问答可以概括为两个关键步骤:知识检索和语义解析。
(1)知识检索:知识检索是知识库问答的第一步,也是非常重要的一步。在这一阶段,系统需要从庞大的知识库中检索出与用户查询最相关的事实或信息。这通常涉及到对用户查询的理解(如通过自然语言处理技术),并将其转换为一种形式,以便在知识库中进行有效搜索。知识库可以是结构化的(如数据库表),半结构化的(如XML文档),或非结构化的(如文本文件)。检索算法需要足够智能,以应对查询的多样性和模糊性,同时尽可能快地找到准确的结果。
(2)语义解析:语义解析是知识库问答的另一个关键步骤。在这一阶段,系统需要深入理解用户查询的意图,并将其映射到知识库中的逻辑表达上。这通常涉及到对用户查询进行语法和语义分析,以构建出一个逻辑表达式(如SQL查询、SPARQL查询等),该表达式能够准确地从知识库中检索出用户所需的信息。语义解析的复杂性在于,自然语言查询往往具有歧义性和模糊性,系统需要能够准确识别用户的真正意图,并将其转换为知识库可以理解的查询形式。
综上所述,知识检索负责从知识库中快速找到与用户查询相关的信息,而语义解析则负责深入理解用户查询的意图,并将其转化为有效的查询语句。这两个步骤相互依存,共同构成了知识库问答系统的核心功能。
举例说明:
假设有一个关于历史人物的知识库,用户想要查询“谁是第一个登上月球的人”。
知识检索:用户输入查询“第一个登上月球的人”。系统在知识库中搜索包含“第一个”、“登上月球”和“人”这三个关键词的记录或文档。检索结果可能包括多个与月球探索相关的条目,但不一定直接指向阿姆斯特朗(Neil Armstrong),因为系统只是根据关键词进行匹配,而没有深入理解查询的语义含义。
语义解析:用户同样输入查询“谁是第一个登上月球的人”。系统首先对用户查询进行语义分析,识别出查询中的关键实体(如“月球”)、关系(如“第一个登上”)和意图(即询问一个人名)。然后,系统将这些信息转化为逻辑表达形式,如“查找与月球相关的、第一个进行登录活动的人类个体”。最后,系统使用这个逻辑表达形式在知识库中进行查询,并准确地返回阿姆斯特朗作为答案。