链载Ai

标题: RAG四种进阶方式 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: RAG四种进阶方式

研究背景和动机


数据增强LLMs的优势


查询分层及特点


RAG技术及相关流程


不同级别查询的处理方法


研究结论与展望


1 Introduction

1.1 大型语言模型的能力与部署挑战


1.2 数据增强型LLM应用的优势


1.3 开发面临的困难与挑战


1.4 应对思路与综述目的


2 Problem Definition

数据增强的LLM应用的多样形式

数据增强的大型语言模型(LLM)应用在实际中有着各种各样的呈现方式。比如,我们常常能见到的问答机器人,它是基于特定领域的数据来运行的。像在医疗领域,这种问答机器人可以依据大量的医学知识、病例数据等,来回答患者关于病症、治疗方案等方面的问题;在法律领域,就能依据法律法规条文、过往案例等数据,解答法律咨询相关疑问。


还有复杂数据管道内的语义处理操作符,在一些涉及众多数据流转、处理的复杂系统里,它发挥着对数据进行语义层面分析和操作的作用,确保数据在整个流程中能被准确理解和运用,比如在大数据分析项目中,帮助解析文本数据的语义,以提取有价值的信息。


另外,在多智能体系统里,也会存在负责特定步骤的智能体,不同智能体承担不同任务,其中基于数据增强的LLM的智能体可以利用相关数据完成它所负责的那部分特定工作,例如在一个模拟商业运营的多智能体系统中,某个智能体负责市场调研环节,就可以借助市场相关数据结合LLM的能力来生成调研报告等内容。


应用的一般性表述及任务

从通用的理论角度来看,数据增强的LLM应用可以用公式


这个公式意味着,在整个应用的运行机制里,用户输入的查询内容Q以及给定的相关数据D共同作为输入信息,而应用f的核心任务就是依据给定的数据D,在用户输入的查询Q和期望得到的答案A之间建立起一种映射关系,也就是当接收到某个具体的查询Q,通过参考和运用相应的数据D,从而输出对应的答案A。


与独立LLM系统的区别及外部数据的作用

通常独立的大型语言模型系统,主要是依靠其预先已经学习到的既有知识来应对各种情况,就像是一个装满了之前学到的知识的“知识库”,根据这个“知识库”里的内容去回复用户提问等。


但数据增强的LLM应用不一样,它的关键特性在于依赖外部数据D。正是借助这些外部数据,它才能更精准地去处理用户提出的查询Q。例如,仅靠通用LLM原本的知识储备,可能对某企业最新的内部业务流程相关问题无法准确回答,但如果引入该企业内部的业务流程数据作为外部数据D,那就能很好地解答相关疑问了。


而且外部数据D的加入能极大地强化LLM的能力,让它能够获取当下最新的、特定领域的知识,像掌握某个行业最新的技术动态、发展趋势等。同时还能帮助其理解领域专家思考问题的方式和思路,比如医疗专家判断病症的逻辑、法律专家解读条文的角度等,进而使模型输出的结果更贴合专业领域的实际需求。


查询的复杂度分层依据

根据查询利用外部数据的程度以及方式,可以对查询进行不同复杂程度级别的划分。比如说,有的查询可能只需要简单参考一点外部数据就能解答,那它的复杂程度相对较低;而有的查询可能需要深入挖掘、综合运用大量不同类型的外部数据,并且要按照很复杂的逻辑关系去分析这些数据才能得到答案,那这样的查询复杂程度就很高。这种分层方式其实也反映了不同查询在处理过程中,模型需要参与的深度如何,以及处理这些查询所涉及的本质特点是什么样的,有助于进一步了解和把握不同查询对于数据增强的LLM应用的要求差异。


2.1 Stratification of Queries

整体分层意义

在数据增强的大型语言模型(LLM)应用环境里,之所以要依据查询的复杂程度以及和数据交互的深度来对查询进行分层,是因为这样做能让我们清晰地知晓LLM在面对不同查询时,需要动用何种程度的“思考”能力,也就是认知处理过程,去生成准确又贴合需求的回复。从简单直接获取已知事实,到挖掘深层次、隐含的知识来作答,每一层级的提升都意味着对LLM要求的提高,涉及的任务也变得越发复杂精细。


各层级具体分析





层级间对比与整体意义


应对各层级挑战的后续探索

后续我们会深入到每个层级的具体细节当中,去研究到底有哪些具体的策略和方法,能够让LLM在面对这么多不同类型、不同复杂程度的查询时,游刃有余地处理好数据增强应用中的各种复杂情况,使得整个应用更加完善、高效,不断提升其性能和实用性,跟上领域发展的步伐。


3 Explicit Fact Queries (L1)

3.1 Overview

明确事实查询代表了数据增强查询中最直接的类型。处于这一层级的查询可以通过直接访问特定领域文档或文档集合中的片段来作答。这些问题的答案通常就在文档的纯文本内容里,在生成回复时仅需极少的推理或简单的依据即可。


这一层级的显著特征是对特定外部数据片段有着清晰且直接的依赖关系。


Data Dependency

数据集D可以通过多种方式分割成文档或片段,将其表示为D_1、D_2、……、D_n,如下所示:


每个片段D_i都被认为相对较短,并且包含的内容更加聚焦、更具针对性。


对于给定的查询q ∈ Q,并非D中的每个片段对于构建回复都是必需的。设δ : Q* D ->{0, 1}来表示数据片段d ∈D对于特定查询q的必要性,其中δ(q, d) = 1意味着数据片段d是回答查询q所需要的,而δ(q, d) = 0则表示并非必需。那么,查询q的数据依赖关系(其特征是对于处理查询q而言不可或缺的片段子集)可定义为:


不难理解,Dep(q) ∈P(D),其中P(D)是D的幂集。


Definition

明确事实查询(用Q_1表示)是一类比较特殊的查询方式,它最大的特点就是能够非常直接地从数据集D里的某些特定数据片段中把答案找出来。在数据增强的大型语言模型(LLM)这个大的应用系统环境下,我们可以通过一些规则和组件来对它进行更严谨、准确的定义,以便更好地理解它是如何运作以及和其他类型查询相区别的。


明确事实查询的定义要素


定义所强调的核心要点

整个对明确事实查询的定义着重突出了一点,就是这类查询主要就是依靠直接的数据检索来获取答案。在回答这类查询时,一旦通过检索组件确定好了相关的数据片段,那后续只需要基于这些片段里的内容就能生成答案了,不需要像处理其他更复杂的查询那样,还要去深挖数据背后隐藏的逻辑、进行复杂的推理演绎或者参考更多额外的数据等,它的过程相对来说是很直接、简洁的。


3.2 Challenges and Solutions

在这一层级上,查询主要需要大型语言模型(LLMs)正确地检索数据,以便提供准确的回复。检索增强生成(RAG,Retrieval-Augmented Generation)技术[6]由于其有效性、灵活性以及相对较低的成本,是处理这一层级查询最常采用的技术解决方案。然而,即便采用了RAG技术,要构建一个稳健且高质量的系统仍面临重大挑战。这些挑战包括:


外部数据往往是高度非结构化的,并且包含多种模态的组成部分,例如表格、图像、视频等等。此外,对这类数据进行分割或“分块”的过程中,如何保持原始的语境和含义是个难题。


从大型的非结构化数据集中检索相关的数据片段可能会耗费大量计算资源,而且容易出错。难点在于开发出高效且精准的检索机制。


评估一个RAG系统的性能,尤其是在组件层面进行评估,是一项复杂的任务。这需要制定可靠的指标,以便能够准确地衡量数据检索以及回复生成的质量。


鉴于RAG技术的流行,已经涌现出大量的文献资料和工具来应对这些挑战。在本节的剩余部分,我们将着重介绍一些针对RAG最实用且影响力较大的改进措施。此外,我们还会讨论除RAG之外可以采用的其他技术解决方案。


3.3 Retrieval-augmented Generation (RAG)

检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种方法,指的是语言模型在生成过程中通过动态检索外部信息来增强其自然语言生成能力。这种技术将大型语言模型(LLMs)的生成能力与从大量数据库或文档中进行信息检索的功能相结合。该过程通常通过数据索引构建、检索系统构建以及答案生成这几个环节来实现。


Data Processing Enhancement

在相应层级中,文档解析工作主要是围绕着如何从不同形式的内容(像文本、表格以及各种图表等)里提取出有用信息展开的,并且要保证提取过程有条理、连贯,最终能精准地把和查询相关的那些信息片段找出来,方便后续的检索与使用,以此来为准确回答查询问题奠定基础


多模态文档解析

在实际的文档资料里,往往不只有单纯的文字内容,还会包含像图表、表格,甚至是视频这类多模态的内容。比如一份企业的项目报告文档,可能既有文字描述部分,又有展示项目进度的图表、相关数据统计的表格,或者是项目会议的视频记录等。而如何妥善处理这些不同模态的内容,使其能被有效利用起来,就成了经常要面对的问题。

第一种处理思路就是想办法把这些非文本的多模态内容都转变成文本形式,这样就能更方便地让大型语言模型去处理了。例如,对于表格来说,有专门的“表格转文本”方法(如文献[34]提及的相关技术),可以把表格里的行列数据、表头信息等按照一定逻辑规则转化成文字表述;对于图片、视频等视觉内容,也有相应的技术手段(像文献[35, 36]中提到的那些),可以把其中呈现的画面、场景等信息提取出来,转化成文字描述或者基于属性的说明,像描述画面里物体的颜色、形状、位置关系等属性内容,转化好之后大型语言模型就能像处理普通文本一样对其进行后续的分析、理解等操作了。

另一种方法则是借助多模态嵌入技术(像文献[37, 38, 39]涉及的相关技术),这个技术的核心是先把多模态数据(比如图像、视频等)通过特定的算法处理,得到它们对应的嵌入向量,这些向量能够在一定程度上代表原多模态数据的特征和语义信息。然后把这些检索出来的嵌入向量当作“软提示”,也就是一种辅助输入的信息,提供给模型,帮助模型更好地理解和处理包含多模态内容的文档,让模型在生成回复等操作时能考虑到这些多模态信息所蕴含的意义。


分块优化

当面对长篇的文本内容时,为了便于管理、检索以及后续的处理,通常需要把整个文档分割成一个个相对较小的文本块,这是很常见且必不可少的操作。不过,文本块大小的选择是有讲究的。如果文本块划分得比较大,好处是它能保留更多的上下文语义连贯性,也就是能让文本中的语义逻辑、前后关系等保持得更完整,不会因为分割而被破坏得太厉害;但与此同时,大块的文本里面往往会夹杂着很多和核心内容关联不大的“干扰信息”或者说“噪声”,这可能会给后续的检索、分析等操作带来一定麻烦。


Data Retrieval Enhancement

信息检索(IR)技术能应用到检索增强生成(RAG)应用里,其包含建立数据索引、处理查询、检索与匹配、重新排序以及评估这几个主要步骤。下面分别对各步骤涉及的具体内容和相关方法展开介绍。


建立数据索引(Indexing)


查询文档对齐(Query Document Alignment)


重新排序和修正(Re-ranking and Correction)

在检索出排名前k的文本块后,RAG系统要对其筛选和重新排序。多数系统以检索器提供的相关性分数为排序依据,也有研究采用困惑度、困惑度增益等特定指标作为排序标准。此外,还有利用LLMs评估文本块可信度和实用性、训练奖励驱动的上下文适配器优化检索器输出,或者预训练小型事实核查语言模型过滤不正确文本块等不同方式,来提高召回文本的质量。


递归检索或迭代检索(Recursive Retrieval or Iterative Retrieval)

鉴于单次检索准确性存在固有局限,有效的应对策略是进行多次检索来逐步解决可能遗漏的问题。比如金等人(2023)提出树状递归检索方法,结合剪枝策略把有歧义的问题逐步分解为无歧义问题以得到接近正确的答案;SEATER则利用k - 均值算法构建待检索项目的层次树结构,迭代地召回树结构内的节点



Response Generation Enhancement

生成回复需要判断检索到的信息是否充足,或者是否还需要额外的外部数据。处理检索到的知识与模型内部先验知识之间的冲突同样至关重要[84, 85, 86]。有监督微调是提升检索增强生成(RAG)系统生成性能的一种有效方法。


当检索到的上下文信息存在不相关或错误的内容时,预训练的大型语言模型往往很容易被误导,进而产生错误的回复。许多研究表明,通过巧妙地为RAG系统设计训练数据,进行微调或预训练能够有效地缓解这一问题[87, 88, 89]。通过实验分析,RAAT(检索增强微调)[89]证明了无关检索噪声、相关检索噪声以及反事实检索噪声对RAG模型的不利影响是逐渐递增的。通过将这些因素融入训练过程,这些方法能够让大型语言模型(LLM)从内部识别出存在噪声的上下文,即便在检索结果存在噪声的情况下,也能使回复生成的质量得到显著提升。


此外,为确保RAG系统内检索器和生成器之间的性能更加一致,一些研究在训练阶段对检索器和生成器进行联合训练[90, 91, 92]。


4 Implicit Fact Queries (L2)

4.1 Overview

二级查询的总体特点


二级查询的定义要素

对于任意一个二级查询q以及它对应的答案a,首先要知道存在一组属于一级查询(Q_1)的明确事实查询,比如{q_1, q_2, ......, q_m}。这些一级查询都有个特点,就是能够直接从数据集D里的特定数据片段中检索到答案,也就是比较简单直接的那种查询类型。而且它们之间存在这样一种关系:r_D(q)=U_{i = 1}^{m} r_D(q_i)。这意味着,用来识别回答二级查询q所需要的数据片段的操作r_D(q),其实就是把回答各个一级子查询q_i所需要的数据片段(通过r_D(q_i)来识别)合并起来。换个角度说,把这些一级查询对应的相关数据片段都找全了,汇总在一起,就包含了回答二级查询q所必备的全部信息了。

还有一个重要的部分就是回复生成器θ,它通常是基于大型语言模型进行推理的,不过会按照一定的规则来生成答案。具体来说,它先是分别针对每个一级子查询q_i,通过θ(r_D(q_i))得到相应的回复,然后把这些回复汇总起来,再运用常识推理进一步加工处理,最终推导出一个完整的答案a,而这个答案在原始的数据集中并不是直接写明了的,是经过这样一系列处理才得出来的。并且要求最终生成的回复θ(r_D(q))要和正确答案a比较接近,以此来证明二级查询q确实可以通过先拆解成一级查询,再汇总这些一级查询的回复这种方式来有效得到解答。


定义所强调的核心要点

整个对二级查询的定义重点在于突出它的处理方式,也就是依赖于一种能力——把比较复杂的查询分解成多个简单的、属于一级的明确事实查询,然后利用这些简单查询能够直接获取信息的优势,把它们的答案组合起来,经过进一步的常识推理等操作,最终生成针对原始复杂的二级查询的正确回复。这种分层定义和处理逻辑,有助于更清晰地理解在不同复杂程度下查询是如何依托数据和相应机制来得到答案的


4.2 Challenges and Solutions

在这一层级,查询仍然围绕事实性问题展开,但答案并不会在任何单个文段中明确呈现出来。相反,它们需要通过常识推理将多个事实结合起来才能得出结论。二级查询面临的挑战主要包括:


不同的问题可能需要检索不同数量的上下文信息,而且具体需要检索的上下文数量取决于问题本身以及数据集的情况。固定数量的检索可能会导致信息噪声(检索到过多无关信息)或者信息不足的问题。


推理能够引导确定需要检索内容的重点,而从检索到的信息中获得的见解又可以迭代性地优化推理策略。应对这些复杂情况需要对外部数据进行智能整合以及有选择性地利用,充分发挥大型语言模型(LLMs)内在的推理能力。


应对这一层级挑战的方法包括迭代式检索增强生成(RAG)、基于图/树的检索增强生成(RAG)以及结合结构化查询语言(SQL)的检索增强生成(RAG)等等。


4.3 Iterative RAG

隐含事实查询和多跳检索增强生成(RAG)任务有着相似之处,它们都不是能一步到位获取答案的简单情况,而是需要经过多个步骤、多次操作来不断完善信息,最终才能得到正确答案。在这个过程中,有不同类型的方法来对多步骤的RAG流程进行动态控制,下面分别介绍基于规划的方法和基于信息差距填补的方法。


基于规划的方法

这类方法重点在于通过生成检索计划来让整个检索过程更有条理、更高效。具体来说,它会在开始检索之前的预检索阶段,或者在实际检索正在进行的过程中,动态地制定出一个按步骤进行的检索计划。这个计划就像是一个导航,能够明确每一次检索应该重点关注什么内容,从而让迭代式的RAG系统知道朝着哪个方向去收集信息,避免盲目检索,使得整个检索过程更加有的放矢,有助于更高效地获取到最终回答问题所需的全部信息。


基于信息差距填补的方法

这类方法聚焦于在检索和生成答案的过程中,不断发现还存在的知识空白、信息不足的地方,然后针对性地去填补这些空缺,从而让答案越来越完整、准确。它是基于一种认识,即在每一轮生成答案的时候,可能由于现有知识有限,答案并不完美,会存在一些未知的部分,那就需要继续去检索更多信息,然后基于新获取的信息再次生成答案,不断重复这个过程,逐步把答案完善起来。


4.4 Graph/ Tree Question Answering

隐含事实查询需要整合多方面参考信息,而图或树结构因其能很好地展现文本间的关系,所以在解决这类查询相关的数据检索问题上很有优势。下面分别从传统知识图谱以及数据块图/树这两方面来进一步阐述如何利用它们应对隐含事实查询。


传统知识图谱

传统知识图谱是一种特定的结构化表示形式,里面的每个节点代表一个实际的实体(比如人物、地点、事物等具体的概念),而节点与节点之间的连线(边)则清晰地表明了这些实体之间存在的关系(像“属于”“关联”“因果”等关系)。它对于大型语言模型(LLMs)来说,是一种能提升其效能的重要结构,有助于模型更好地理解和运用知识。

在大型语言模型的整个生命周期里,预训练阶段和推理阶段都引入知识图谱意义重大。在预训练时,结合知识图谱能让模型接触到更有条理、有结构的知识关系,就好像给模型学习知识搭建了一个清晰的框架,帮助它更深入地理解所学内容;到了推理阶段,知识图谱里蕴含的各种实体关系又能辅助模型更准确地分析问题、推导答案,让模型依据已有的知识结构去思考和处理新的查询情况,从而提升其回答问题的质量和准确性。

大型语言模型本身具有强大的语言处理能力,利用它来助力知识图谱相关的各类任务也很有价值。例如在嵌入任务中,能帮助把知识图谱里的实体等元素更好地转化为适合计算机处理、且能体现语义关系的向量表示形式;在知识图谱补全任务上,凭借其对文本语义的理解,可以推测出图谱中缺失的部分关系或实体;在构建新的知识图谱时,利用它来分析文本资料,提取关键信息构建节点和边;还能进行图到文本的生成,把图谱里蕴含的知识用自然语言表述出来,方便人们理解,以及用于问答场景,依据图谱里的知识结构去准确回答关于图谱中实体和关系的各类问题。

这里强调两者相互配合、互为补充。它们之间不是独立运作的,而是通过数据和知识驱动的双向推理过程来让彼此变得更强。比如说,知识图谱可以给大型语言模型提供准确的实体关系知识作为基础,让模型在这个基础上进行推理;反过来,大型语言模型基于其对自然语言的理解和推理能力,能帮助知识图谱进一步完善、拓展,或者在面对具体查询时,更好地挖掘图谱里有用的知识来回答问题。像Rigel - KQGA模型就是这种协作的典型体现,它作为一个问答模型,会先根据查询内容预测在知识图谱里需要用到哪些节点(也就是相关的实体等知识元素),然后把这些和大型语言模型结合起来,综合两者的优势去生成最终的答案。

Think-on-Graph和KnowledgeNavigator这两项研究工作,首先会从查询语句里把涉及的实体提取出来,然后以这些实体为出发点,在知识图谱上按照广度优先搜索(BFS)的方式去遍历图谱,寻找与之相关的其他节点和关系,在这个过程中,把大型语言模型当作一个具有思考能力的“大脑”,依靠它来判断在搜索过程中哪条路径是最优的探索方向,哪些部分可以进行剪枝(也就是去除不必要的搜索分支),从而更高效地在图谱里找到能回答问题的关键信息。而R3则是另一种思路,它借助大型语言模型提出一些可能解决查询问题的常识性公理(也就是大家普遍认可的一些道理、规则等),然后依据这些公理,按照顺序去搜索知识图谱里相关的子图谱部分,每搜索一部分就评估一下当前获取到的信息是不是足够用来回答查询了,如果不够就继续搜索其他相关子图谱,一直重复这个过程,直到最终把问题解决,成功得到答案为止。


数据块图/树

大型语言模型本身阅读理解能力很强,所以有时候不需要把文本拆解到特别细的实体和关系层面,也能理解文本的大致意思。基于这个特点,研究人员想到把文本或者数据按照一定的块状划分,将这些文本块或数据块当作图或者树上的节点,然后通过边来表示它们之间的关系。这些关系可以是比较高层次、概括性的,也可以是经过精心设计、更细致复杂的,以此构建出一种新的结构来辅助处理隐含事实查询问题。

它主要聚焦于三种常见的需要挖掘隐含事实的问题类型。衔接性问题通常需要按照一定的先后顺序进行推理,比如要根据事件发生的先后顺序、因果的先后逻辑等来推导答案;比较性问题则是要在不同的文段内容之间进行并行对比、分析,才能找出差异或者共同点等隐含事实;结构性问题需要依据文档本身的结构特点去获取相应部分的内容来回答问题。为了处理这些不同类型的问题,它会运用像实体识别技术先把文本里涉及的实体找出来,利用词频 - 逆文档频率(TF - IDF)来判断词语的重要性,借助最近邻算法(KNN)寻找相似的内容,同时考虑文档结构的层次关系,通过这些手段综合起来构建文档图,并且从这个图里提取出合适的子图,最终依靠这些子图来回答具体的查询问题。

它把一到两个句子看作是最小的语义单元,将这些单元作为图上的节点,然后根据节点之间语义的相似程度来构建边,也就是把语义相近的句子连接起来。而且它还额外训练了一个预测器,这个预测器的作用是判断回答一个查询问题大概需要多大范围的文本内容,也就是通过确定需要的子图大小,来明确回答问题所需要的文本粒度,使得在查找和整合信息回答问题时更有针对性,避免信息过多或过少的情况。

为了能够捕捉到文本块之间更高级别、更抽象的语义关系,它采用聚类算法对最细粒度的文本块进行分层聚类操作。想象一下,就好像把文本块按照它们的语义相似性一层一层地归类分组,在每一个层次级别上,都会对这些归类后的文本块所蕴含的新的语义信息进行总结提炼,这样当要回答查询问题时,就能从这个像树形结构一样层层折叠起来的节点集合里,快速提取出最关键、最必要的信息,为生成准确答案提供有力支持。

同样也是采用聚类的思路,先是依据文本块之间的语义相似性把最小的文本块连接起来,然后运用社区检测算法把这些连接起来的节点进一步分组,形成一个个类似社区的集合。最后,在面对查询时,通过分析每个节点社区内的相关响应情况,把这些局部的信息综合起来,总结出关于这个查询的全局答案,以此来完成对隐含事实查询的回答。


4.5 Natural Language to SQL Queries

在处理结构化数据时,将自然语言查询转换为结构化查询语言(SQL)(即自然语言转SQL,NL2SQL)会是一种有效的方法。像Chat2DB之类的工具能够通过将用户查询转换为数据库查询来助力这一过程。在大型语言模型时代,文本到SQL(text-to-SQL)领域已经取得了重大进展[105, 106, 107, 108],这使得我们可以利用这些工具从结构化数据库中检索信息。这种能力可作为一种很有价值的外部数据源,用以增强大型语言模型(LLMs)的生成能力。


通过整合文本到SQL工具[109],大型语言模型能够访问并融入结构化数据,提升其生成更准确且契合上下文相关回复的能力。这种整合不仅提高了生成内容的深度和质量,还拓展了大型语言模型应用的范围,使其能够执行需要与数据库内容进行交互及解读的更为复杂的任务。


4.6 Discussion on Fact Queries

是否使用微调部分

大型语言模型(LLMs)在自然语言处理等诸多方面展现出强大能力,但在通过微调来获取新的事实性知识时,却面临不少难题。所谓微调,就是在已经预训练好的模型基础上,利用新的数据进一步调整模型的参数,让它能适应新的任务或者掌握新的知识。然而,一些研究发现,在这个过程中,模型很难真正把新的事实知识融入进去。比如,给模型输入一些新的关于科学常识、历史事件等事实性的数据进行微调,模型并不能很好地理解和吸收这些内容,将其转化为自身可用的知识储备。

这种难以有效获取新知识的情况进而引发了一系列负面效果。一方面,模型整体生成准确回复的性能会受到影响,原本能够相对准确回答的问题,经过微调后,回答的准确性反而下降了。另一方面,还出现了更多“幻觉”现象,也就是模型会生成一些看似合理,但实际上与事实不符的内容。例如,在问关于某个历史人物的生平事迹时,微调后的模型可能会编造出一些不存在的事件或者细节来作为回答。

而且,当用新的事实数据对LLMs进行微调时,模型往往只是机械性地记住了这些事实陈述,就好像死记硬背一样,并没有真正理解其中的内涵。从一个现象就能看出来,只要稍微改变一下这些已经记住的事实的表述方式,模型就没办法正确运用这些知识了,说明它对这些新知识的理解和记忆仅仅停留在很浅的表面层次,没办法灵活运用,一旦形式稍有变化就“失灵”了。这也充分暴露出当前微调这种方式在帮助模型学习新知识方面存在的不足,所以迫切需要探索更巧妙、更有效的方法,来让模型能真正把新信息整合好并且能适应实际应用的需求。


是否区分不同层级的事实查询部分

明确事实查询和隐含事实查询都和事实相关,但它们有着明显的不同特点。明确事实查询相对简单直接,通常能从单个的数据片段里找到答案,比如问“某本小说的作者是谁”,只要在对应的书籍信息数据里找到作者那一项就可以了,一般不需要综合太多其他额外的信息,只需要检索固定的、少量的外部数据就行。而隐含事实查询就复杂得多,它的答案不会直接呈现出来,需要把多个相关的事实结合起来,并且要根据具体的查询上下文动态地整合各种信息才能得出答案。例如问“某部电影在当年上映时为何能获得高票房”,可能就需要综合电影的题材、当时的市场环境、同期竞争影片情况等多方面的信息来分析回答,不是从某一处简单的数据就能直接知晓的。

如果在构建数据增强的大型语言模型应用时,把这两种查询类型弄混了,会产生不少问题。要是把明确事实查询错误地当成隐含事实查询,模型就会去检索大量不必要的信息,以为需要像处理隐含事实查询那样综合很多内容,但实际上那些多检索出来的信息只是表面上和问题相关,对真正回答问题并没有实质帮助,这样不仅会误导模型往错误的方向去思考和生成答案,还白白浪费了计算资源,拖慢整个处理过程。反过来,要是把隐含事实查询误判为明确事实查询,那模型就只会按照简单的、检索少量固定数据的方式去操作,没办法获取到足够全面、足够多的外部辅助数据,也就没办法把需要综合多方面信息的隐含事实查询回答好,最终导致模型生成的答案质量不高,整体性能表现不佳。

所以,基于对要处理的目标任务有清晰、透彻的理解,提前把查询所属的层级区分清楚是非常有好处的,这样才能采取合适的策略去检索数据、生成答案。除此之外,研究人员也在想办法让模型自身具备判断能力,投入了很多精力去训练模型,让它能够自主地评估检索到的信息是不是足够用来回答问题,像self-RAG(自检索增强生成)这种方法就是这方面的一个典型尝试,通过让模型自己去判断信息够不够,进一步提升其应对不同类型查询的能力,提高整体应用的效果。


5 Interpretable Rationale Queries (L3)

5.1 Overview

整体背景与查询分类概述

在特定的应用场景中,存在一些查询,它们在解答时不能仅依靠已有的知识,还需要借助外部数据来提供相应的依据,也就是要依靠外部数据里所蕴含的一些逻辑、思路等内容来支撑答案的合理性。而且这类查询对使用者的要求比较高,不仅要知晓事实本身,还得理解和运用与数据所处领域相关的特定依据,根据这些依据的性质差异,将其划分为基于可解释依据的查询和基于隐含依据的查询这两大类,接下来着重介绍基于可解释依据的查询相关内容。


可解释依据查询的特点

它在依靠外部数据找依据的各类查询里,属于相对容易理解和处理的类型。其关键特点在于辅助解答这类查询的外部数据往往会把解决问题时所运用的思维过程清晰明白地展现出来,让人能够比较直观地明白为什么要这么做、依据是什么,便于使用者参考这些依据去找到查询的答案。


数据组织形式

文本描述是最为常见的用来呈现可解释依据的方式,在实际生活和各专业领域中都广泛存在。像专业领域里的专业手册、官方出台的指南,还有针对特定领域的详细说明书、操作指南等,都属于此类文本。这些文本可不是简单的文字罗列,它们详细地梳理了在面对复杂情况、解决复杂问题时的推理步骤和决策思路。例如,美国食品药品监督管理局(FDA)为制药厂制定的指南,里面会清楚地说明在药品生产的各个环节,依据什么标准、怎么去把控质量、出现问题怎么处理等;而给医生的用药指南,则会阐述针对不同病症、不同患者情况,选择何种药物、用药剂量怎么确定、用药周期如何安排等思维过程,这些文本就相当于把专家们在处理相关专业问题时的“思考路径”呈现了出来,方便其他人学习和参考,以应对类似的情况。

除了纯文本形式,还有一种更具结构化特点的呈现方式,也就是把依据以更明确的推理关系或者决策路径的形式展现出来,这里提到了两种类似的计算理论模型概念,即文本条件摩尔机(Text - Conditioned Moore Machine)和文本条件米利机(Text - Conditioned Mealy Machine)来帮助理解。

摩尔机本身是一种有限状态机,在这种机制下,它的输出值仅仅取决于当前所处的状态。不过这里有个特殊点,控制状态转换的条件是通过文本形式来表达的,不像传统的程序依靠原生代码去运行和判断,这就需要大型语言模型(LLMs)去解读这些文本条件,进而明白状态是怎么转换、输出值怎么确定的。比如说一个客服人员,手里有一本处理用户各种请求的手册,这个手册就类似一个文本条件摩尔机的体现,客服人员所在的当前状态(比如正在处理用户要求更换产品这个阶段),以及手册里规定的对应这个状态下的处理方式(输出值,比如接下来要询问用户产品的相关情况等),都是依据手册里用文字描述的各种条件(比如用户提出更换产品的具体要求、产品的类型等文本描述的情况)来决定状态转换和相应操作的,客服人员通过遵循手册里这种文本形式呈现的规则来完成整个服务流程。

米利机同样是有限状态机,但是它的输出值不是只由当前状态决定,而是由当前状态以及输入值共同决定。具体来说,在执行一些操作(比如进行应用程序编程接口调用,即API calls)时,不仅要看当前处于什么状态,还要看从之前状态转换过来时关联的文本消息内容(也就是输入值的一部分),综合这些因素来确定要采取的动作。在实际的专业领域中,像很多特定领域的工作流程、决策树或者伪代码等格式都可以用来表示这种依据。例如,一个软件开发项目的流程管理中,用决策树来呈现不同阶段(不同状态)下,根据用户反馈(输入值里的文本消息部分)、项目进度等情况,决定是进行代码修改、功能测试还是进入下一阶段开发等操作,这就是一种基于文本条件米利机概念的依据呈现方式,通过这种结构化且结合文本条件的形式,清晰地展示出整个决策和操作的逻辑链条。


5.2 Challenges and Solutions

在可解释依据查询这一领域,将特定领域的依据以一种易于理解的方式整合进大型语言模型(LLMs)是一项额外的挑战。主要挑战如下:


提示优化成本

提示优化的过程在时间和计算资源方面有着较高的要求。不同的查询需要专门定制的背景知识以及决策标准,这就意味着需要各种各样的示例。虽然人工设计的提示可能会非常有效,但这种方式耗费人力且耗时。而且,训练模型使其能够针对各类不同的查询生成定制化提示,还会产生大量的计算开销。


可解释性有限

提示对大型语言模型的影响是不透明的。在很多情况下,通常无法访问大型语言模型的内部参数,这使得确定不同提示对这些模型产生的影响变得复杂起来。这种缺乏透明度的情况,阻碍了我们持续理解并验证大型语言模型针对不同提示所做出回复的可解释性的能力。


5.3 Prompt Tuning

可解释依据查询与外部依据整合的关键问题

在处理可解释依据查询时,核心要点在于怎样把外部数据里包含的各种依据顺利融入大型语言模型(LLMs),并且要保证模型能够精准地依照这些依据去开展后续的运算、生成合适的回复等操作,就好像让模型“读懂”并严格遵循这些外部依据所设定的规则一样


相关示例展示整合思路与成果

Text2MDT [112] 为解决上述关键问题给出了一个实际可行的例子。它聚焦于医学领域,提出了两种专门的方法,用于从医学指南以及医学教材这类外部资料里自动提取出医疗决策树。要知道,医学资料往往篇幅很长、内容繁杂,而决策树这种形式能够把其中隐藏的逻辑关系清晰地梳理出来,将复杂的诊断、治疗等流程以一种更直观、有条理的结构展示,让人们更容易明白医学决策背后的逻辑链条,也有助于模型更好地理解和运用这些医学依据。

MedDM [113] 在医学领域也有重要贡献,它开发出了一种特别的格式,也就是临床指导树(CGTs)格式,并且这个格式是能够被大型语言模型执行的。在此基础上,它还进一步提出了针对这些可执行临床指导树进行推理的具体方法,以及构建了一个用于患者和大型语言模型之间开展多轮对话的框架。这意味着在实际应用中,患者可以和模型围绕病情等问题进行多轮交流,模型依据临床指导树里的依据来回复患者,模拟专业医疗场景下的沟通与决策过程,让医学依据通过模型更好地服务于实际的医疗咨询场景。

InstructRec [114] 的关注点则放在推荐系统领域,它充分挖掘大型语言模型在这方面的能力优势。通过设计一种通用的格式,这个格式能够用自然语言去详细描述用户的各种偏好(比如喜欢什么类型的商品、服务风格等)、意图(是想要购买、了解还是对比等意图)、任务形式(是单纯查询信息、进行商品筛选还是完成交易等)以及所处的具体上下文环境(比如在什么平台、什么时间段等)。借助这样的格式,打造出一个基于语言的推荐系统,使推荐过程更加贴合用户的实际情况,提高推荐的准确性和有效性,也就是把相关的推荐依据通过自然语言的形式整合进模型,让模型依据这些依据来做合理推荐。


提示微调技术的重要性及应用

仅仅把外部依据简单地以自然语言指令的形式直接放进大型语言模型里,实际效果可能不太理想,很难让模型达到最佳的性能表现。而且要是靠人工去设计提示语(也就是给模型的引导信息,帮助它理解如何运用依据),那会耗费大量的时间和人力成本,效率很低。所以,为了让模型能更好地遵循这些特定的外部依据,采用提示微调技术就变得非常关键了,它能够帮助改善模型运用依据的能力。

强化学习在这个过程中发挥了重要作用,像TEMPERA框架[115]就是很好的例子。它在强化学习所设定的动作空间里进行提示语的设计,这个提示语里包含了有限的指令(告诉模型大概要做什么)、示例(给出一些类似情况的示范)以及表述词(规范回复的表述形式等)等内容。在这个框架里,把大型语言模型能够生成正确回复的概率当作一种奖励机制,就好比模型做对了题目就能得到奖励一样,通过这样的奖励引导,模型会不断去尝试不同的提示配置,在不同的数据集上寻找最能让自己表现好、生成正确回复的那种最优提示配置组合,从而更好地依据外部依据来回答问题。

Rlprompt [116] 同样运用了强化学习的手段,不过它的侧重点在于训练一个适配器。这个适配器主要是为了帮助那些相对较小的语言模型,让它们能够根据大型语言模型回复的相对准确性反馈信息,来生成最佳的提示语。比如说,小模型一开始生成的提示可能不太准确,导致大型模型回复不太理想,通过这个适配器分析反馈回来的准确性情况,不断调整小模型生成的提示语,让其越来越合适,进而提升整个系统运用依据回答问题的能力。

还有一种创新的策略叫定向刺激提示,它把大型语言模型在下游任务(也就是具体应用场景下执行的各种任务)中的表现当作奖励机制。具体操作是训练模型去提取和利用一些定向刺激元素,这些元素其实就是针对每一个具体实例专门定制的特定线索或者关键词,把它们作为提示语提供给模型。这样一来,模型接收到这些很有针对性的提示后,其后续的行为(比如生成回复、做决策等)就能和预期的结果更加吻合,更符合依据所设定的要求,有效提升了模型依据外部依据开展工作的准确性。


离散提示空间内的优化方法

在离散提示空间(也就是提示语可以进行离散变化的一种设定空间,比如通过增减字词、替换字词等操作改变提示语)的优化方面,像GrIPS [117] 这样基于编辑的方法就派上用场了。它的做法是先选取一个小数据集当作评分集,然后针对提示语开展各种各样的编辑修改操作,这些操作包括删除一些字词看看效果、把某些字词进行替换、用同义表述进行转换或者添加一些新的字词等,通过不断尝试这些不同的修改方式,再依据评分集里的数据反馈来快速且有效地判断出哪种提示语的配置是最有效的,从而找到最优的提示语形式,帮助模型更好地依据外部依据来运作。


利用大型语言模型自身助力提示优化的进展

近期的发展中出现了利用大型语言模型自身来让提示优化变得更便捷的情况,比如OPRO [120] 就是这样一个例子。它借助大型语言模型,一方面可以依据过往的历史数据以及和这些数据相关联的性能指标(比如之前根据某些提示语回答问题的准确率等情况)来生成新的提示解决方案,也就是创造出新的提示语可能性;另一方面,还能对这些新生成的提示语进行评分,判断它们的好坏,通过这样的方式把整个提示优化的过程变得更加高效、简洁,让模型能更快地找到适合依据外部依据来回答问题的提示语形式。

Reflexion框架[121] 提出了一种很新颖的基于语言反馈的提示优化方法。它利用语言模型去分析大型语言模型的输出内容,然后把对这些输出内容的反思(比如哪里回答得好、哪里不符合依据要求、下次怎么改进等思考内容)存储在一个情节记忆缓冲区里。这个缓冲区就像是一个经验积累的仓库,在后续的交互过程中,模型可以利用里面存储的这些历史积累下来的见解,去完善自己的决策过程,对新的输出结果进行更合理的评估,从而不断优化依据外部依据回答问题的表现,让模型越来越贴合外部依据的要求来生成回复和做决策。


5.4 CoT Prompting

复杂依据与推理方法

在面对需要处理复杂依据的情况时,大型语言模型(LLMs)不能像处理普通事实查询那样简单地对分散的事实信息进行推理,而是要构建起较长的推理链条,进行更深入、连贯的思考过程。在这个过程中,像思维链(Chain-of-Thoughts)、思维树(Tree-of-Thoughts)以及思维图(Graph-of-Thoughts)这类方法被实践证明是行之有效的,它们能帮助模型更好地梳理逻辑,应对复杂的推理场景


人工设计思维链提示语的作用与案例

对于那些学界已经深入研究、且在很多场景下都通用的问题,人工去设计思维链(CoT)提示语是一个不错的办法。通过精心设计提示语,可以引导模型按照我们期望的逻辑和思路去思考问题,进而生成准确的答案。

季等人(2023年)提出的方法着重于将知识获取和答案生成联系起来。他们借助外部工具,同时巧妙地设计提示语,构建了三种很关键的自我反思循环。其中,事实知识获取循环能够帮助模型去主动获取相关的事实知识,让模型知道要从哪些方面去收集信息;知识一致性回答循环则确保模型在生成答案时,所运用的知识是相互协调、不矛盾的,符合知识体系的内在逻辑;问题蕴含回答循环促使模型去深入挖掘问题中蕴含的各种逻辑关系,更全面地考虑如何作答。通过这三种循环,成功地把外部的依据融入到模型处理问题的整个流程当中,使得模型能够更好地依据这些依据来生成合理的答案。

吴等人(2024年)针对临床记录这一特定领域展开研究,先是仔细分析了其中可能出现的各种错误类型,然后基于这些分析结果,专门为GPT - 4模型打造了三种不同的思维链(CoT)提示语。这三种提示语分别引导模型去关注干预、诊断以及管理这几个环节中可能存在的错误。例如,在干预方面,提示语可以引导模型去思考治疗手段是否合理、用药剂量是否恰当等;在诊断环节,提示语能让模型检查诊断依据是否充分、诊断结论是否准确;在管理方面,提示语有助于模型审视医疗流程安排、患者后续跟进等是否存在问题。借助这些有针对性的提示语,就能实现对临床记录中错误的自动检测,还能准确找出错误所在的范围,并且进行相应的纠正,大大提高了临床记录的准确性和规范性。


人工设计思维链提示语的成本问题及应对方法

虽然人工设计思维链(CoT)提示语效果显著,但它也存在明显的弊端,那就是需要投入大量的人力去进行设计、调试,同时耗费很多时间,效率相对较低,很难满足大规模、快速应用的需求。

为了解决这个成本高昂的问题,自动思维链(Automate-CoT)技术应运而生。它提出了一种很巧妙的思路,即从标记数据量很少的数据集出发,去生成能够增强模型推理能力的推理链。具体操作时,采用一种降低方差的策略梯度策略,这个策略能够对每一条生成的思维链进行重要性评估,就好像给每条思维链“打分”一样,通过这种方式,模型就能清楚地知道哪些思维链在引导推理、生成答案方面更有效,进而可以从众多的思维链中挑选出最佳的提示语组合,既减少了人工成本,又能保证提示语的有效性。


围绕大型语言模型构建智能体工作流程

还有一种利用思维链提示的方式是围绕大型语言模型构建智能体工作流程。这可不是简单的操作,需要打造一个功能更全面、更复杂的系统,以便应对现实世界中各种各样的实际场景。按照王等人的观点,这样的系统大致可以分为几个重要的模块,包括剖析模块(负责对问题、环境等进行分析拆解)、记忆模块(用于存储相关的信息、过往经验等,方便后续参考调用)、规划模块(制定行动的步骤和策略,明确要做什么以及怎么做)以及行动模块(实际去执行相应的操作,产生具体的行为和结果)。

可解释的依据可以通过多种不同的形式融入到这些不同的模块当中。比如在剖析模块中,依据可以帮助更准确地分析问题的本质和关键要素;在记忆模块里,依据能辅助筛选和整理需要存储的重要信息;在规划模块中,依据可以指导制定出更合理的行动方案等。而且,智能体能够根据所处的环境变化或者接收到的人类反馈,不断调整自己的行为和内部的信息处理方式,实现自适应和迭代优化,从而更好地完成各种任务。


推理链质量评估及相关应用进展

近期在这个领域也有不少新的发展成果,像大型语言模型推理器(LLM Reasoners)和社会推理评估(SocREval)等方面的研究,都着重关注如何自动地对推理链的质量进行评估。通过准确评估推理链的质量,能够知道模型的推理过程是否合理、可靠,进而发现可能存在的问题并加以改进,有助于构建更加稳健、性能更好的数据增强型大型语言模型应用,让模型在实际应用中发挥出更优的效果。

在机器学习领域,协同机器学习(CoML)有着独特的应用方式。它把自动机器学习(AutoML)相关的知识巧妙地转化为提示语,融入到大型语言模型当中。然后,模型可以根据这些提示语,动态地从过往的历史实验记录里检索出对当下任务有用的信息,将AutoML知识和检索到的历史信息相结合,赋予大型语言模型新的能力,使其能够针对一些全新的任务开发出合适的机器学习解决方案,推动机器学习在新问题、新场景下的应用和发展。

在软件开发领域,元编程(MetaGPT)打造了一个很有创意的多智能体系统。在一个软件开发项目里,不同的利益相关者(比如程序员、测试人员、项目经理等)都被表示成一个个独立的智能体。这些智能体之间能够按照现实世界中软件开发的实际工作流程进行协作,就像真实的团队一样,各自发挥自己的作用,共同完成软件从需求分析、设计、编码到测试等一系列复杂的开发任务,有效提高了软件开发的效率和质量。

同样地,在客户服务和医疗问答这些和人们日常生活密切相关的领域,也设计出了功能复杂、针对性强的智能体系统。在客户服务中,智能体可以根据用户提出的各种复杂请求,比如咨询产品功能、反馈使用问题、要求售后服务等,准确理解用户意图,然后提供相应的解答和帮助;在医疗问答领域,智能体能够针对患者或者家属关于病情、治疗、用药等方面的询问,依据专业的医学知识提供准确的医疗信息。这些智能体系统不仅让交互变得更加顺畅、高效,提升了用户的体验,而且还提高了回复的准确性,充分展现出大型语言模型在融入到精心设计的智能体工作流程后所具备的强大功能和应用潜力,能够在不同领域发挥重要作用,解决实际问题。


6 Hidden Rationale Queries (L4)

6.1 Overview

隐含依据查询的整体特点与难度

隐含依据查询在各类查询中属于难度级别最高的类型。对于可解释依据查询来说,它会清晰地把回答问题所需要依据的思路、逻辑等内容呈现出来,让人一看就明白该朝着哪个方向去寻找答案。但隐含依据查询完全不同,它涉及的是特定领域里的推理方法,这些方法往往不会明明白白地写出来让人知晓,而且数量极其多,几乎没办法全部罗列清楚


这些推理依据涵盖的范围十分宽泛,在通常情况下,像语言模型所处理的那种有限的上下文窗口里,根本没办法把它们都梳理明白。同时,它们还缺少明确的指示,不会直白地告诉使用者该怎么用,实际上它们代表的是一种隐藏在数据当中的专业知识,只有深入挖掘、仔细分析才能发现并利用起来,这就使得处理这类查询变得格外困难。


涉及的数据类型及特点

这类数据来自于和查询问题相同的领域,常见的有历史上留存下来的问答记录,或者是通过人工方式生成的相关数据。这些领域内数据可不是简单的信息堆积,它们自身就蕴含着解决当下查询问题所必备的推理技能和方法。比如说在Python编程这个领域,如果遇到了一些编程难题,去查看以往类似问题的解决记录,就会发现里面包含了很多经典的算法应用以及针对不同问题类型的解题策略,这些内容其实就是一种隐含的依据,当再碰到新的编程问题时,就可以参考之前的这些思路和方法,从中获取灵感,尝试去解决新问题,所以说这类领域内数据对于解决相关查询问题有着潜在的重要价值。

基础知识作为隐含依据的另一种表现形式,是由大量且分散在各处的知识库组成的。这些知识库在不同的实际场景中有着不一样的应用方式,而且非常复杂多样。它有可能是一个完整的公理体系,就像在法律领域,各个地方的法律法规综合起来构成了一个庞大的体系,当进行法律判断的时候,这些就是最基础的依据,虽然它们不会针对每一个具体案件都明确给出处理办法,但却是整个法律推理和判断的根基所在。


同时,在一些学术领域比如数学证明中,基础知识还包括那些已经被证明过的中间结论,在推导新的数学问题时,利用这些中间结论能够简化整个推理流程,让复杂的证明过程变得更容易操作。而且在处理现实世界的各种问题时,这种基础知识还可能来源于人们长期积累的各种经验以及对这些经验进行总结提炼后形成的内容,比如在一些行业里,老师傅们口口相传的一些实践经验和窍门,虽然没有形成很规范的理论,但却是解决实际问题时隐含在背后的重要依据。


处理隐含依据查询面临的挑战及示例

由于隐含依据查询的这些特点,要想处理这类查询,就必须运用十分复杂、精细的分析技术,去深入挖掘并利用好藏在不同数据源里的这些潜在智慧。对于检索增强生成(RAG)系统而言,这无疑是一个巨大的挑战,因为它需要准确地解读这些复杂又隐晦的信息,还要能够恰当地把这些信息运用到实际的查询回答过程中,目前要做到这一点是很不容易的。


6.2 Challenges and Solutions

数据增强的大型语言模型(LLM)应用的构建受到隐含依据查询的极大挑战,主要困难体现在以下几个方面:


对于涉及隐含依据的问题,外部数据的有用性并非仅仅取决于实体层面或语义上的相似性,而是取决于逻辑上的一致性或主题上的关联性。标准的检索方法往往难以捕捉到查询的真正目标,也很难依据所呈现的问题去识别出具有逻辑相似性的文本片段。这就需要开发更为复杂精妙的检索算法,此类算法要能够解析并识别潜在的逻辑结构,而不能仅仅依赖表面的文本相似性。


从根本上来说,外部数据可能并不会明确包含与当前查询相关的指导内容或答案。相反,相关信息通常隐含在分散的知识当中,或是通过示例来体现。这种间接的呈现方式要求具备强大的数据解读与整合能力,需要大型语言模型能够从碎片化的或关联性不大的数据源中有效地推导出条理清晰的答案。


这些挑战凸显出在大型语言模型框架内,具备成熟的数据整合与推理能力对于有效应对隐含依据查询的复杂性是至关重要的。


6.3 Offline Learning

在处理相关查询(主要指那些有一定难度、需要深入挖掘依据的查询类型)时,有一种常用的办法,那就是先脱离实时的在线交互场景,在离线状态下对已有的数据集进行分析,从中找出规则以及指南类的内容。这些规则和指南就像是隐藏在数据中的线索,把它们找出来后,再依据这些内容去检索与之相关联的其他数据条目,以此来辅助回答各类查询问题,帮助梳理出合理的推理思路和答案。


生成推理依据的不同方法及示例

这个方法重点运用了迭代的小样本示例手段来生成推理依据。具体来说,最开始是基于一个相对较小的数据集,通过一定的逻辑和大型语言模型(LLM)的能力,生成相应的内容作为依据。然后,不断重复这个过程,逐步扩大数据集的范围,让生成的依据越来越丰富、完善,就好像滚雪球一样,从小的基础慢慢发展壮大,最终得到可以用于更广泛场景、更复杂问题的推理依据,为后续的推理查询工作提供有力支持。

它设计了一种比较独特的、包含两个角色的流程来提取解释作为依据。在这个流程里,有一个学习模型,它的任务是负责生成各种解释内容,尝试从不同角度、用不同方式去阐述相关的逻辑和思路。而另一个评判模型则起到审核的作用,对学习模型生成的这些解释进行评估,判断其是否合理、是否符合实际情况以及对推理有没有帮助等,通过这样的一“生”一“评”的配合,筛选出有效的解释作为可靠的推理依据,确保所提取的依据质量是过关的。

引导学习采用的是情境学习的方式,在面对各种任务时,先去识别其中出现的错误情况。这些错误可不是简单记录一下就完事儿了,而是要对它们进行归纳总结,把它们转化成具有通用性、指导性的指南内容。这样一来,以后再遇到类似的任务时,就可以参考这些从过往错误中提炼出来的指南,避免再次犯错,同时也能依据这些指南更好地进行推理,完成相应的任务,让经验教训变成提升推理能力的宝贵财富。

LEAP的做法是通过多个步骤来形成对推理有帮助的原则。首先,它会主动去生成一些错误情况,这里的错误生成不是随意的,而是有针对性地模拟可能出现的问题场景,然后基于这些错误进一步提炼出低层级的原则,这些原则可能是比较具体、针对局部问题的。接着,再从低层级原则中升华出更具普遍性、抽象性的高层级原则,最后把这些不同层级的原则整合起来,融入到给模型的提示语当中,让模型在进行最终推理时能够参考这些原则,按照合理的逻辑和思路去生成答案,增强推理的准确性和有效性。

RICP主要围绕训练数据里的错误做文章,利用这些错误信息来挖掘更深层次的内容。它先是借助错误来生成高层级的推理思路以及一些具体的见解,让我们能从错误中发现一些隐藏的逻辑和规律。然后,运用层次聚类这种数据分析方法,把各种各样的错误模式按照一定的相似性等特征进行分组,就好像把不同类型的错误归类整理一样。通过这样的分组,分别生成针对不同任务层级以及具体问题层级的原则,最后再把这些原则合并起来,并且根据具体的问题去检索与之匹配的原则内容,从中获取针对具体问题的深刻见解,辅助完成推理查询任务。

它借助一个问题提炼器工具,这个工具的作用是在众多不同的推理任务中进行提炼操作,把各个任务里有价值的内容提取出来,最终汇聚成一个元缓冲器。这个元缓冲器就像是一个知识库,里面存储着从多个推理任务中提炼出来的精华内容,在后续需要进行推理时,可以从中获取相关的依据和思路,帮助更好地完成推理过程。


综合性方法及相关特点

MedPrompt是一种综合性的方法,它把GPT - 4生成的带有自我验证功能的思维链融入进来,作为训练示例的一部分。这里的思维链其实就是一种逻辑链条,展示了思考问题、推理答案的过程,而且还能自我验证其合理性。同时,它还结合了基于近邻检索的情境学习方法,也就是在检索相关数据时,会参考数据之间的相似性(近邻关系),把这些元素整合在一起,让模型在学习和推理过程中能够充分利用多种资源,从不同角度获取依据,提升对医学等相关领域推理查询的处理能力。

智能体医院这个方法在生成依据方面,主要是通过反思的方式来实现的。它会对已有的情况、过往的数据等进行反思,从中挖掘出有用的依据内容。并且,在利用数据方面,它不仅会进行常规的记录检索,也就是查找已有的相关记录信息,还会对生成的数据进行经验检索,也就是从之前生成的数据里总结出有价值的经验作为依据,通过多维度的数据利用和依据挖掘,来更好地服务于推理查询工作,为解决相关问题提供全面的支持。


依据来源及应用特点总结

尽管上述提到的这些概念有着各种各样不同的叫法,像指南、原则、经验、思维模板等等,但它们本质上都是为了达成一个共同的目标,那就是提取出那些通用的、对推理有帮助的依据,以此来强化整个推理查询的过程。


这些依据的来源多种多样,有的是来自模型自行生成的思维链,比如医学提示、思维缓冲器就是通过这种方式获取依据;有的是从训练集里出现的错误中提炼而来,像引导学习、基于错误的推理与原则生成、智能体医院等方法,都善于从错误中总结经验教训,转化为有用的依据;还有的是通过有意去制造一些错误情况,然后进行分析总结得到依据,学习、经验与原则就采用了这样的策略。


而且,这些依据在应用的时候也有不同的特点,有些原则具有很强的通用性,可以适用于所有的任务,例如智能体医院、基于错误的推理与原则生成所生成的原则,在各种相关任务场景下都能发挥作用;而另外一些原则则是根据具体的问题动态地去检索、匹配,就像医学提示、思维缓冲器那样,针对不同的问题去查找最适合的依据内容,更具针对性地辅助推理查询。


最后,众多这方面的研究工作都共同表明了一个事实,那就是通过从一个个具体的案例中学习,不断积累经验,并把这些经验转化为推理依据,对于各种各样的推理任务来说,都是非常有益的做法,能够提升模型在处理复杂问题、进行推理查询时的能力和效果。


6.4 In Context Learning (ICL)

利用示例进行情境学习的基础与问题

在帮助揭示隐含依据方面,利用示例开展情境学习是一种常用且有效的手段。预训练的大型语言模型本身就具备比较可观的情境学习能力,简单来说,就是模型能够依据给定的具体情境(比如提供一些示例作为参考的场景)来学习新知识或者完成相应任务。而通过基于相似性去检索示例,可以进一步强化这种能力,让模型更好地发挥少样本学习能力。少样本学习意味着模型只需少量的示例就能从中总结规律、进行学习,通过相似性检索示例能为其提供更契合的参考,辅助它更好地理解和处理新问题。

不过,这里面存在一个隐患,那就是如果给模型的提示信息(也就是提供给模型作为参考引导的内容,包含示例等)里夹杂了不相关的信息,就很容易让大型语言模型“分心”。就好比一个人在学习时,周围有很多无关的干扰因素一样,模型可能会受到这些无关内容的影响,导致最终给出的回复是错误的,没办法准确地完成相应的推理和回答任务。


相关框架与针对性改进方法

吴等人开发的OpenICL框架有着重要意义,它构建了一个专门的情境学习(ICL)框架,聚焦于研究不同的传统示例检索方法以及推理技术,去探究它们到底会对情境学习的实际效果产生什么样的影响。比如说,不同的检索方法可能会找到不同的示例,这些示例质量参差不齐,对模型最终学习效果影响各异;不同的推理技术在结合示例进行推理时,也会有不同的表现,这个框架就是要把这些影响因素都梳理清楚,以便找到更优的组合方式,提升情境学习的有效性。

还有一种改进思路,那就是基于大型语言模型针对情境示例给出的反馈,来训练相对较小的模型,进而让小模型去挑选出最优的展示示例。打个比方,大模型就像是一个经验丰富但可能会受到各种干扰的“老师”,它能对示例的好坏给出评价反馈,然后利用这些反馈去训练小模型,小模型经过训练后就可以更精准地从众多示例中筛选出对特定任务最有帮助的那些,这样就能更有针对性地完善特定任务的情境构建,让模型在面对具体任务时有更合适的示例作为参考,提升学习和推理的准确性。


解决示例检索范围局限及构建更好示例的方法

在实际应用中,仅仅依靠基于语义相似性的示例检索有时候是不够的,因为它可能没办法涵盖实际测试里需要的更广泛的关联范围。比如在一些复杂的领域问题中,除了语义相似,还可能涉及到逻辑关系、背景知识等多方面的关联,单纯语义相似检索到的示例可能太片面。苏等人提出的Vote-k方法就是为了解决这个问题,它是一种无监督、基于图的选择性标注方法,通过构建图结构,利用数据之间的复杂关系,对示例进行更全面的标注和筛选,最终为少样本学习打造出一个更加多样化、更能代表各种情况的示例数据库,让模型能有更丰富全面的参考资料。

张等人提出的自动思维链(Auto - CoT)方法采取了另一种思路。它先是把众多的示例按照一定的规则聚类成各种各样具有代表性的类型,就好像把杂乱的示例进行分类整理一样。然后通过对问题进行多样化的采样,模拟出不同情况的问题,并且针对这些问题生成相应的推理链,也就是把思考问题、解决问题的逻辑链条梳理出来。通过这样的方式构建出的示例,能够更好地贴合学习过程中不同阶段、不同类型问题的需求,为模型学习提供有力支持,帮助它更顺畅地理解和掌握新知识、新逻辑。


提升模型跨领域推理及解决特定问题的尝试

让大型语言模型通过少样本学习去掌握其训练领域之外的推理能力是一个很难攻克的挑战。王等人尝试通过一种方式来解决这个难题,他们会对各种各样的推理路径进行采样,就好比把所有可能的思考方向、推理路线都罗列出来,然后在这些路径上进行边缘化操作(也就是综合考虑各条路径的情况,权衡利弊后做出选择),最终从中选出最一致的答案,也就是最符合逻辑、最靠谱的那个答案方向。通过这样的操作,能够增加大型语言模型选择正确推理链的概率,让它在面对训练领域之外的新问题时,也能更有可能沿着正确的思路去推理、回答。

阿加瓦尔等人引入了两种可扩展的生成可用示例的方法,分别是强化情境学习(reinforced ICL)和无监督情境学习(unsupervised ICL),它们的目标是取代人工生成示例。因为人工生成示例往往效率低、数量有限,而这两种新方法能够大量地生成可用的示例,从而扩充示例资源库,为模型提供更充足的学习素材,让模型有更多的参考资料可以选择,有助于提升其学习效果和应对各种任务的能力。

在处理像将文本转换为结构化查询语言(SQL)这样的任务时,DIN - SQL采取了一种任务分解的策略。它把复杂的任务拆解成一个个更简单的子任务,然后把这些子问题的解决方案当作提示提供给大型语言模型。这样做的好处是,模型不需要一下子面对复杂的整体任务,而是可以先从简单的子任务入手,逐步积累经验和逻辑,最终显著提高了它从文本生成SQL的性能,让文本到SQL的转换更加准确、高效。

DUP则聚焦于大型语言模型使用思维链方法解决复杂数学应用题时出现的问题,指出了三个主要方面的问题,分别是语义误解(对题目中的词语、表述理解有误,导致整个解题思路跑偏)、计算错误(在具体运算过程中出现失误)以及步骤缺失(解题时遗漏了必要的步骤,导致答案不完整或错误),其中语义误解是最主要的限制因素。所以,要是能鼓励大型语言模型更加深入地去理解数学应用题的题意,准确地提取出解决问题所必需的关键信息,把语义误解这个问题解决好,就能大大增强它解决数学问题的能力,让它在数学应用题这个领域的表现得到明显提升。


情境学习在多领域的应用及重要性

情境学习在如今的多个领域,像数学、法律、医学、金融等,应用得越来越广泛了。在数学领域,可以帮助学生或者相关从业者更好地理解数学概念、解决复杂的数学问题;在法律领域,辅助法律从业者依据过往案例等示例进行推理,做出合理的法律判断;在医学领域,让医护人员参考相似病症案例等示例来分析病情、制定治疗方案;在金融领域,帮助分析师依据过往的市场情况、投资案例等示例来预测市场走势、做出投资决策等。它在数据增强的大型语言模型应用的发展过程中扮演着至关重要的角色,一方面拓展了大型语言模型原本的功能范围,让它能够处理更多类型的任务;另一方面也切实提升了它在不同领域实际应用中的价值,使其能够更好地服务于各个领域的具体需求,发挥出更大的作用。


6.5 Fine-tuning

大型语言模型面临的挑战与微调的作用

尽管大型语言模型(LLMs)有着很强的情境学习能力,能够依据给定的情境去理解和处理不少任务,但在面对那些有着复杂且冗长逻辑链的情况时,要准确地找出其中的依据或者挑选出最优的示例来辅助推理,却不是一件容易的事,这成为了当前的一个重大难题。而且,当给模型提供大量外部先验知识时,这些知识反而可能干扰模型的推理过程,对其推理能力造成挑战,影响模型准确地得出结论。

在这样的背景下,微调就凸显出了它的价值。微调这种方法可以充分利用大型语言模型在预训练阶段已经学到的大量基础知识,这些基础知识就像是一个坚实的根基,在此基础上,通过微调还能让模型快速地去掌握新的、特定领域内的依据和逻辑,让模型能够更好地适应那些更高级、更专业的任务场景,从而在应对这类复杂任务时变得更加有效,所以说它为提升大型语言模型的适应性和任务处理能力提供了一条切实可行的途径。


指令微调及指令数据集的构建方法

指令微调是一种常用的、用于给大型语言模型赋予新能力的手段。具体操作是利用成对的(指令,输出)数据来进行有监督的微调工作。简单来说,就是给模型提供一条指令(比如让它分析一篇文章的主旨、解答一个数学问题等明确的要求),同时给出对应的正确输出(也就是期望模型按照指令生成的准确答案),通过大量这样成对的数据去对模型进行调整,让模型学习到按照指令生成合适结果的能力。

可以从已经存在的一些数据集中提取出符合要求的内容,将其整理成适合指令微调的(指令,输出)数据对形式。例如,在某个自然语言处理相关的现有数据集中,挑选出那些包含提问和对应正确回答的数据,经过适当的格式转换等处理,使其变成能用于指令微调的数据集,这种方式能利用已有的大量数据资源,相对比较便捷地获取一定量的训练数据。

依靠人工去精心地编写指令以及对应的输出内容来构建数据集。专业人员会根据具体想要让模型掌握的能力、应用的场景等,一个一个地去设计指令和答案,这样做的好处是可以非常精准地控制数据的质量和内容,确保指令和输出都符合预期的训练要求,但缺点就是比较耗费人力和时间,效率相对较低,不过在一些对数据准确性和专业性要求很高的情况下,这种方式是很有必要的。

借助那些性能强大的大型语言模型自身的能力来生成所需的数据。比如让一个已经训练好的、能力出色的大型语言模型按照一定的规则和要求,去创造出大量的指令以及相应的输出内容,通过这种方式可以快速生成大量的数据,不过生成的数据质量可能需要进一步验证和筛选,以保证其符合实际训练的标准。


微调成本及降低成本的相关方法

在构建那种需要利用外部数据增强的大型语言模型应用时,虽然微调有诸多好处,但它在时间和计算资源方面的成本是比较高的。因为要处理大量的数据对,进行反复的参数调整和模型训练,这就需要耗费很长的时间以及大量的计算资源,比如占用大量的内存、消耗较高的算力等,从实际应用和成本效益角度来看,这是一个需要解决的问题。

这种方法是在微调的时候,把小型的适配器模型和大型语言模型结合在一起,然后采取一种特殊的策略,就是冻结大型语言模型原本的参数,不让它的这些参数在微调过程中发生变化,只对新添加的适配器模型的权重进行优化调整。这样做的好处是,不需要对整个大型语言模型的所有参数都进行重新计算和调整,大大减少了计算量,同时也能通过适配器模型来为大型语言模型添加新的功能或者调整其部分性能,在一定程度上降低了微调的成本。

它们的思路是在向大型语言模型输入内容之前,额外添加一组可训练的向量。在后续的训练过程中,重点对这些添加的向量进行优化,通过调整这些向量的数值等属性,来影响模型对输入内容的处理,进而提升大型语言模型的整体性能。这种方式相当于在不大量改动模型原有结构和参数的基础上,通过对这些前置向量的优化来达到微调的效果,同样可以减少计算资源的消耗和时间成本。

低秩适应的核心在于对大型语言模型中的每个密集层施加低秩约束,以此来逼近更新矩阵。这样做的目的是减少适应下游任务(也就是具体的各种应用场景下的任务)时所需要的可训练参数数量。因为参数数量减少了,在训练过程中需要计算和调整的量也就相应减少了,从而降低了微调所需的成本,让模型能够更高效地适应不同的任务要求。


微调在各专业领域的应用及成果

近年来,很多研究工作都在利用有监督微调的方式,努力增强大型语言模型在诸如数学推理、金融、法律、医疗保健等各个专业领域的能力,让大型语言模型能够在这些特定领域发挥更大的作用,解决实际的专业问题。

ChatTimeLlama [187]这个项目专门引入了一个很有特点的可解释的时间推理指令微调数据集,然后拿着这个数据集在LLaMA [188]这个大型语言模型上进行微调操作。通过这样的微调,模型在时间推理方面有了显著的提升,比如能够更准确地分析事件在时间线上的先后顺序、推断未来某个时间点可能发生的事件等复杂的时间推理能力变强了,而且模型的可解释性也得到了提高,也就是人们能够更容易理解模型做出推理判断的依据和过程,让模型在涉及时间相关的应用场景中表现得更加出色。

LISA [189]则是利用了一小部分包含推理内容的分段数据样本,用这些样本对多模态大型语言模型LLaVA进行微调。这里的多模态意味着模型可以处理多种类型的数据,比如图像、文字等结合的信息。经过这样的微调后,LLaVA这个模型在推理分段方面的能力有了很大的进步,能够更精准地对不同的信息片段进行推理分析,在处理复杂的多模态数据时可以更好地梳理逻辑、得出结论。

MAmmoTH [190]在数学领域有独特的贡献,它精心构建了一个数学示例数据集,这个数据集的特别之处在于将思维链(Chain of Thought)和思维程序(Program of Thought)这两种推理方式巧妙地结合在了一起,并且覆盖范围很广,涵盖了不同的数学领域,像代数、几何等各个方面。通过用这个数据集对大型语言模型进行微调,使得模型解决一般数学问题的能力大大增强,无论是简单的计算题还是复杂的数学证明题等,模型都能更有效地找到解题思路并得出正确答案。

ReFT [191]提出了一种创新的学习方法,它聚焦于同一个问题对应的多个带注释的推理路径,也就是针对一个数学问题,会收集很多不同的推理思路和过程,并且都带有相应的注释说明(比如每个步骤的依据、合理性等注释)。然后,它会针对给定的数学问题自动去采样众多这样的推理轨迹,再利用已知的正确答案作为一种奖励信号(就好像做对了题能得到奖励一样),引导模型去学习这些不同的推理路径中好的部分,通过这种方式让模型在数学推理方面变得更加准确和灵活。

ChatDoctor [192]利用了来自一个广泛使用的在线医疗咨询平台的海量数据,具体是10万条医患对话的数据,用这么大的数据集对LLaMA进行微调。经过这样的微调后,模型对患者需求的理解能力大幅提升,比如能够更准确地明白患者描述的症状、诉求等内容,并且能够根据这些情况提供更有效的医疗建议,在医疗咨询这个应用场景中发挥了更大的作用,更好地服务患者。

FinGPT [193]着眼于金融领域,开发了一个开源的大型语言模型,并且运用了自动化数据整理技术(可以更高效地整理金融相关的数据)以及轻量级、低秩适应技术(降低微调成本的同时让模型适应金融领域任务),在金融数据上对模型进行微调,使模型能够更好地处理金融领域的各种问题,比如分析金融市场趋势、解答金融投资相关疑问等,增强了模型在金融领域的实用性。

DISC - LawLLM [194]针对中国司法领域开展工作,先是创建了一个专门用于有监督微调的数据集,这个数据集是依据中国司法领域的特点和需求打造的。然后利用这个数据集对大型语言模型进行微调,经过这样的处理后,模型在不同的法律场景下都能有效地服务各类用户,比如为普通民众提供法律咨询、帮助法律从业者进行案例分析等,其法律推理能力得到了显著增强,更好地满足了司法领域的应用需求。


7 Conclusion

数据增强的LLM应用分类及对应解决方法

文章依据查询的主要关注点,把数据增强的大型语言模型(LLM)应用划分成了四个不同的类别,每个类别都有其独特之处,面临的难题不一样,相应的解决办法也各有侧重。


知识注入LLM的三种机制及各自特点

在开发针对特定任务的大型语言模型应用前,领域专家需要先摸清楚预期任务的情况,搞清楚相关查询的复杂程度,然后从三种机制里挑选合适的方式把知识注入到大型语言模型中,以此来提升模型应对相应任务的能力。

这种方式是根据具体的查询需求,从相关的领域数据里提取一部分内容,把它当作大型语言模型的上下文信息输入进去。例如在一个法律问答系统中,如果用户查询关于某类合同纠纷的法律问题,就从法律条文、过往案例等领域数据里提取和合同纠纷相关的内容作为上下文,辅助模型理解问题并回答。这样做的好处是能够让模型的回答具有较好的可解释性,也就是人们能比较清楚地知道答案是基于哪些信息得出的,同时也让模型的表现相对稳定。但是它存在明显的局限,由于模型能处理的上下文窗口大小是有限的,可能没办法把所有相关的重要信息都包含进去,而且在提取和输入过程中,容易出现中间信息丢失的情况,所以它比较适合那些能用简短文字就能把关键数据解释清楚的场景。并且,这种方式对模型自身的检索和知识提取能力要求比较高,如果模型这两方面能力不足,就很难充分利用好这些输入的上下文信息。

先利用特定领域的数据去训练一个相对较小的模型,这个小模型经过训练后,就可以在后续引导外部信息整合并输入到大型语言模型当中。比如在处理某一专业领域的大量实验数据时,先训练一个小模型让它学习这些数据里的规律和特点,然后由它来筛选、整理外部信息,再传递给大型语言模型。这种方法的优势在于可以缩短整体的训练时间,而且小模型能够吸收处理相对大量的数据,不过它的效果好不好很大程度上取决于小模型自身的能力。要是面对比较复杂的任务,小模型自身能力有限,可能就没办法很好地引导信息整合,从而限制了大型语言模型在这些复杂任务上的表现。并且随着要处理的数据量不断增加,还可能会产生额外的训练成本,需要不断投入资源去优化小模型。

直接拿外部领域的知识对通用的大型语言模型进行微调,让它变成一个在特定领域有专长的模型。例如在金融领域,用大量的金融市场数据、专业理论知识等去微调通用的大型语言模型,使其能够更专业地处理金融相关的任务。这种方式能够充分利用大型模型的强大能力,结合大量的特定领域知识来提升模型在该领域的性能。然而,它也存在风险,要是在微调过程中使用了领域外的事实数据,或者数据设计不合理,很容易导致大型语言模型生成更多错误的答案。而且还有可能出现丢失之前已经掌握的领域知识的情况,以及忽视那些在微调过程中没遇到过的任务,使得模型在一些特殊场景下表现不佳。


实际应用中的综合考量与应对策略

在实际的应用场景里,情况往往比较复杂,数据增强的大型语言模型应用通常不会只涉及单一类型的查询,而是多种查询类型混合在一起的。比如说,一个智能客服系统,可能既会遇到像查询产品基本参数这种明确事实查询,又会有分析用户反馈问题背后原因这种隐含事实查询,还可能有根据公司业务规则给出解决方案这种可解释依据查询等情况。面对这样复杂的局面,开发人员就需要精心构建一个路由管道,这个管道要把前面提到的多种解决不同查询类型的方法都整合起来,让系统能够根据不同的查询自动切换、运用合适的方法去应对,这样才能有效解决实际中遇到的各种各样、多方面的挑战,使整个大型语言模型应用能够稳定、高效地运行,满足用户多样化的需求。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5