TC-RAG: Turing-Complete RAG--图灵完备的检索增强

摘要:

在提升领域特定的大语言模型(LLMs)的方法中,检索增强生成(RAG)技术作为一种有前景的解决方案,可以缓解诸如幻觉、知识过时以及在高度专业化查询中专业知识有限等问题。然而,现有的RAG方法忽视了系统状态变量的引入,而系统状态变量对于确保自适应控制、检索停止和系统收敛至关重要。本文通过严格的理论证明,提出了图灵完备的RAG(TC-RAG)框架,通过引入图灵完备的系统来管理状态变量,从而实现更高效、准确的知识检索。通过利用具有自适应检索、推理和计划能力的内存堆栈系统,TC-RAG不仅确保了检索过程的受控停止,还通过Push和Pop操作减轻了错误知识的积累。在医疗领域的案例研究中,我们在真实世界的医疗数据集上进行了广泛的实验,结果表明,TC-RAG在准确性上比现有方法提高了7.20%以上。

医学场景案例研究

在真实医学场景中,是否检索/怎样检索/如何规划检索/如何处理检索过程中的瑕疵 是非常重要的四个难点:

(1) 是否检索:如下图的真实场景的例子所示,使用检索后由于大量的无关噪声被检索到,因此模型的回答反而被误导了。这时候是不需要检索的!

图1. 使用RAG检索到的噪声知识导致回答错误的例子

(2) 怎样准确检索:在真实场景下,一个懂医学的医生查阅资料的过程和普通人问诊是完全不一样的, 不会一股脑的将全部知识点拿去检索。

图2. 真实场景中医生去检索的例子

(3) 如何规划检索: 在真实场景下,一个懂医学的医生查阅资料的过程是有规划的,并且能够灵活的使用多种医学工具。

图3. 医生规划检索的例子

(4) 如何处理检索过程中的瑕疵:在检索过程中,检索到的错误知识(例如过时知识)或任务无关的噪声知识是很常见的,然而医生大多数时候是能够根据自己的认知来纠正错误重新检索的。

图4. 医生处理检索过程的瑕疵的例子

因此,现目前的研究大多都采用RAG+LLM的方法,但很少有工作解决以上问题。

引言

大语言模型(LLMs),如ChatGPT(OpenAI 2022)和GPT-4(OpenAI 2023),在许多关键领域取得了显著进展,并在各种下游任务中表现出了卓越的性能。在医疗领域,这些医疗LLMs展示了巨大的潜力,尤其是在健康护理领域,责任感和可信度至关重要。通过全面的医学知识预训练,这些模型不仅可以支持医生进行精确的诊断和制定治疗计划,还可以改善医疗资源的分配。然而,尽管医疗LLMs取得了重大进展,仍然存在一些关键挑战,包括难以避免的事实错误(如幻觉)、知识的过时,以及缺乏高度专业化的知识。为了解决这些问题,检索增强生成(RAG)技术被提出,该技术利用外部知识库提供的医疗知识作为上下文信息来增强内容生成,这被认为是解决上述问题的一个有前景且必要的解决方案。

然而,尽管现有通过RAG增强LLMs的方法显示出一定的前景,但它们始终忽略了系统状态变量的引入,而这些变量对于确保自适应控制、检索停止和系统收敛至关重要。此外,这些现有的RAG方法并非图灵完备,缺乏动态管理和监控检索过程的能力,无法保证在复杂的医疗场景中得出可靠的结论。在这些复杂的医疗场景中,决策通常需要复杂的多步骤推理和自适应响应,图灵完备性的缺失显著限制了系统的有效性和可靠性。这一差距促使我们提出一种新的方法:构建一个图灵完备的系统来有效管理状态变量,利用有限的逻辑框架来增强RAG过程。然而,如何有效地构建一个图灵完备的RAG系统仍然未被充分探索,并且面临着重大的挑战:

挑战1: **设计具有监控状态变量的图灵完备RAG系统:**设计一个图灵完备的RAG系统需要整合能够动态跟踪和控制检索过程的监控状态变量,这是现有RAG方法所缺乏的。当前的方法并没有明确的机制来评估系统是否已经收敛到一个可靠的结论,这是一个重要的缺口。一个显著的挑战在于如何利用大模型的前向传播过程,实时准确地计算这些状态变量,并确保这些变量能够有效反映系统的演变上下文,从而指导是否继续、停止或改进检索过程的关键决策。如何在模型的前向传递过程中管理这些变量,同时保持对复杂多变的医疗查询的适应性,是实现效率和准确性的关键。

挑战2:动态规划检索以维持最佳状态:一旦能够评估状态,如何动态管理状态以达到预期的状态是一个重要的问题。在现实生活中的咨询中,医生通常会根据他们对问题的掌握程度决定是否进行检索以及检索什么,而不是盲目地进行检索,这可能导致模型已经具备的冗余信息,从而可能导致混淆甚至误导LLMs。如何系统地分析和计划进一步的步骤,并有效利用LLMs内部参数化知识来维持最佳状态,是一个重要的挑战

挑战3: 避免无关噪声影响系统状态:由于传统RAG的检索过程通常是由查询关键词驱动的,而不是根据模型的具体需求,这可能会引入大量无关和噪声的上下文。而错误的知识会随着检索和推理过程的积累而持续增加,从而浪费token资源、积累无效记忆并遇到“lost in middle”(即大模型不遵循指令)的问题。因此,如何有效地消除错误知识对于维持系统状态至关重要。

为了解决这些挑战,我们提出了图灵完备的RAG(TC-RAG),这是一个为领域特定LLMs提供可靠且可信的医疗分析的图灵完备系统。首先,对于挑战1,我们设计了一个具有内存堆栈的图灵完备RAG系统,该系统监控中间状态,确保检索过程可靠地收敛到最佳结论。其次,为了应对挑战2,我们广泛收集了医疗数据,并预训练了一个医疗LLM,从而提高了它的推理和规划能力。最后,对于挑战3,TC-RAG结合了内存堆栈系统,利用回溯和总结操作及时删除错误并压缩冗余知识,从而减轻了错误信息和噪声的积累。

相关工作

**检索增强生成(RAG)**最早由Lewis等人提出,通过将外部知识库的信息整合到LLMs的提示工程中,增强了LLMs在知识密集型任务中的表现。RAG不仅在LLMs推理过程中减少了幻觉问题,还提供了最新的、任务特定的知识,从而显著提升了下游任务的可解释性和性能。在生物医学领域,RAG被广泛应用于通过利用医学论文、指南、教科书、维基百科、知识图谱等外部医学知识,来提高LLMs的推理和分析能力。

(1) Naive & Advanced RAG: Naive RAG通常采用简单的检索-阅读方法,其中相关信息是基于用户初始查询进行检索的,然后使用这些内容生成答案。Advanced RAG则结合了更复杂的组件,如检索器、重新排序器、过滤器和阅读器,以提高检索和生成的质量。然而,无论是Naive RAG还是Advanced RAG,都没有考虑LLMs是否已经具备了必要的知识。这常常导致检索过多冗余信息,可能会误导模型,造成所谓的“中途丢失”困境。我们的方法通过基于模型的内部参数化知识来决定是否检索以及检索什么,从而实现更高效、准确的检索。

(2) Adaptive RAG: 最近的研究重点开发了自适应RAG策略,使得LLMs能够决定是否以及何时检索,并从庞大的知识库中选择最合适的检索工具。FLARE通过预测下一句并使用生成的低置信度词作为查询重新检索相关文档。DRAGIN利用LLMs在其生成内容中的不确定性,根据内部自注意力权重和相应的关键词来决定何时触发检索。Adaptive-RAG使用一个较小的LLM作为分类器,先查询问题的复杂性,然后选择最合适的检索策略——从简单到复杂。然而,这些现有的自适应RAG方法都不是图灵完备的,缺乏动态管理和监控检索过程的能力,无法保证系统收敛到一个可靠的结论。此外,它们尚未充分利用LLMs与RAG相结合的逐步规划和工具使用能力。我们的方法通过整合一个图灵完备的框架,优化了检索过程,通过高级的规划和工具使用策略,确保了更可靠和准确的结果。

推理和规划能力**:**最近的研究重点是增强LLMs的推理和规划能力。链式推理(Chain-of-Thought,CoT)展示了LLMs如何构建结构化的“思维过程”来解决复杂问题。ReAct将推理轨迹与任务特定的动作相结合,使LLMs能够计划、调整动作,并在从外部来源(如知识库)获取信息时管理异常。Reflexion通过使用语言反馈进一步改进了LLMs,使它们能够反思并存储任务反馈,从而提高未来尝试中的决策能力。尽管这些方法在推理和规划过程中引入了新的决策尝试,但它们往往在管理之前的记忆上表现不足,尤其是在删除无效决策或精炼历史记录方面。为了解决这些挑战,TC-RAG结合了具有回溯和总结操作的内存堆栈系统,允许及时纠正错误并压缩冗余知识,确保模型的推理过程高效且准确,从而得出更可靠的结果。

图灵完备的记忆栈定义(Tc Stack)

在Tc-RAG中,记忆栈被定义如下:

解释:记忆栈Tc=(S,A,M,delta,s0, F,sigma):

1. 其中S是大模型的可能处于的状态(作者这里用具体的数值来表示,代表大模型的确定性程度,越小代表大模型此刻对该任务的回答越确定);

2. A达标大模型可以执行的动作。在栈里面,在基于栈的记忆系统中,通过push和pop这两个基本操作的组合,TC-RAG将能够有效实现对大模型交互记忆的管理、精炼大模型交互过程中的记忆内容以及去除RAG过程中所引入的噪声:

基于这两个meta-actions,TC-RAG一共定义了5个由push和pop两个基本操作所组合而成的有意义的行为,在大模型每次决策时,都将从这5个行为中选择一个执行。这5个行为的定义如下:

(1) 思考:这个行为将激发大模型的决策能力,让大模型根据已有的信息进行分析和处理,决定大模型下一步的行为。大模型思考的内容会被push到记忆栈之中。

(2) 工具调用:当大模型仅凭借自身知识无法回答问题时,大模型可以通过调用网络搜索、文档检索、图谱检索等外部工具来获取额外的信息辅助自身回答问题。工具调用后,使用工具的名称以及工具检索的结果将被push到记忆栈之中。

(3) 反思:当大模型发现记忆栈栈顶的内容与整个任务不相关或是该内容是有害的时候,大模型可以通过反思行为,将记忆栈栈顶的元素pop出去,从而避免大模型被无关信息或是有害信息所干扰。

(4) 总结:当记忆栈栈顶的信息过长,或是在栈顶信息中包含了部分噪音时,大模型可以通过总结行为,先利用pop操作将栈顶元素取出,然后对取出的文本进行总结,得到更加精炼且与任务相关的文本,最后再将精炼后的文本push回到记忆栈之中。

(5) 结论:当大模型觉得可以给出最终答案时,会执行结论操作。然而,当且仅当此时整个系统的状态变量达到终止条件时,大模型才会停止整个流程

3. M代表的是大模型的记忆栈,在任务一开始时将用户的Query压入栈底

4. delta是状态转移函数

5. s0代表的是大模型的初始状态,这里用一个很大的值Large_Value表示

6. F代表大模型的终止状态。Tc-RAG认为当大模型自己需要输出Conclusion以及当状态值小于sigma阈值时,此刻推理结束,Tc的栈顶将作为最终的输出答案。

图灵完备性的证明

关于图灵完备性的证明,作者在第四部分和附录部分已经写的非常详细了,感兴趣的同学可以去阅读看看,这里就不细致说了。

记忆栈和系统监测方法

如上图所示,TC-RAG利用基于栈的记忆系统以及对应的状态变量来实现对整个RAG框架的状态管理与终止判定,让模型能够自适应地进行检索以及在合适的时刻输出最终答案。

1. 在一开始的时候,大模型将用户Query压栈,接下来大模型将不断的执行所定义的复合操作(Composed Action Set),例如:思考(push),反思(pop),工具执行(push),总结(pop->push)等。在工具执行的过程中,大模型被允许使用多源数据(图谱、文档、网页百科等)。

2. 在大模型执行到Conclusion/Thought时,系统会不断更新它的状态变量(状态变量的计算方法在下文);当大模型执行到有Pop的动作时,会将状态变量重置为上一个Thought的值,以确保系统的完备性。

3. 最后在大模型输出Conclusion且状态变量小于阈值时,输出最终答案,否则大模型的结论行为会被视为思考行为处理,并继续进行下一步推理。

为了解决自适应检索中的停机问题,我们在系统中引入了状态变量来监测系统状态。只有当状态变量满足终止条件时,整个系统才会停机。在实践中,TC-RAG分别尝试了条件困惑度和不确定性这两种不同的状态变量作为量化系统当前状态的指标。

(1) 条件困惑度通过计算大模型在用户提问内容的基础上,生成栈顶输出内容时的困惑度而获得:

(2) 不确定性则是通过计算输出栈顶输出信息的熵值所得到的:

当系统状态值较低或不确定性较低时,表明此时大模型对于最终的结果已经有了比较高的信心。

整个方法部分的伪代码如下:

Prompt如下所示:

和ReACT的对比:

图: ReACT策略

然而,我们如果将ReACT的执行过程视作栈的话,就可以发现这是一个单向的栈(只有push,没有pop)。先目前的Reflexion工作,虽然纳入了反思过程,但其上一次的错误思考过程还是被纳入到栈中了。因此,大量的错误知识被累计,token资源被浪费,容易导致资源lost in middle问题。

除此之外,ReACT等方法没有引入系统变量监测系统,因此该类模型往往都是黑盒的,即仅仅依靠大模型自己来决定是否结束检索和思考。

因此,Tc-RAG也做了一个可视化实验:

图:Tc-RAG和ReACT的可视化实验

从这个图可以看出,基于ReACT的方法在处理无关噪声的积累时存在困难,这导致了系统的过度自信和错误的结论。例如“仅仅因为单位不同”的错误,ReACT就得到了错误的判断。相比之下,TC-RAG能够有效管理其内存,并利用总结和回溯操作修剪错误的检索结果,从而得出更加简洁和准确的结论。这凸显了TC-RAG在处理复杂任务时的优势。此外,作者也发现基于ReACT的方法由于缺乏状态管理,往往会在系统状态值较高时过早确定答案。而TC-RAG能够动态地监控RAG过程,确保系统状态值符合终止条件,这进一步说明了构建系统状态的重要性。

实验

实验设置

(1) 精心微调的医学LLM模型:为了提升模型的思考和任务规划能力,作者搜集了海量的数据来持续预训练(continuous pretraining)了一个医学LLM:

(2) 医学工具库:

a. 作者纳入了 百万规模的医学知识图谱(包含130万医学实体和360万关系)并将图谱路径作为检索结果提供大模型(这里是延续了HyKGE的工作);

b. 医学文档库:作者搜集了海量的医学教程、就诊治疗、医学论文、病人电子病例等作为文档库

c. 网页检索:作者利用Bing和Google Search作为网页检索

d. 百科检索:作者利用WikiPedia和MedNet作为百科检索工具

e. 电子病历数据:来自MIMIC-III和MIMIC-IV数据。

实验结论

在CMB、MMCU以及CMB-Clin三个数据集上基于Qwen1.5-32B-Chat基座模型以及在Qwen1.5-32B-Chat上预训练后的模型的实验结果表明,TC-RAG的方法与其他RAG方法相比有着更好的表现,比现有方法在准确率上平均提升了7.20%,达到了SOTA的水平。同时,通过人为在RAG检索内容中引入噪声的投毒实验证明了TC-RAG方法在弹出检索噪声,保留有效信息方面有着较好的表现。此外,消融实验验证了TC-RAG中反思与总结动作的有效性以及状态变量引入的必要性。这些实验结果都表明,TC-RAG能够充分利用预训练大模型的规划能力,通过自适应地进行信息检索,辅助大模型更好地进行推理和决策,提升了模型的整体性能。

结论

本文提出了首个图灵完备的检索增强生成(RAG)系统,TC-RAG。通过引入监控状态变量,作者开发了一个内存堆栈框架,使检索过程更加动态和自适应,有效解决了传统RAG方法中存在的无休止和不准确的检索问题。TC-RAG框架通过其内存堆栈系统的回溯和总结功能,有效减少了错误知识和无关噪声的积累。实验表明,TC-RAG在多个真实世界的医疗数据集上显著优于现有的基准方法,展示了其在准确性和可靠性上的潜在改进。此外,TC-RAG的成功部署也凸显了其在实际应用中的价值。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hugging Face 是一个专注于自然语言处理(NLP)的开源项目,提供了大量预训练模型和工具库,以便研究人员和开发者能够轻松地构建和部署NLP模型。其中,RAG(Retrieval-Augmented Generation)是Hugging Face库中的一个模型架构,它结合了信息检索和文本生成技术,能够利用外部知识库来增强生成的内容质量。 搭建一个基于Hugging Face RAG模型,大致可以分为以下几个步骤: 1. 安装依赖:首先需要安装Hugging Face的Transformers库,它包含了RAG模型的实现。可以通过Python的包管理器pip安装: ```bash pip install transformers ``` 2. 导入模型:使用Transformers库中提供的RAG模型类导入预训练的RAG模型。例如,如果你想要使用RAG的变体RAG-Sequence版本,可以这样导入: ```python from transformers import RAGSequenceForGeneration ``` 3. 准备数据:你需要准备好用于生成的输入问题,以及相应的知识库或文档集合,RAG模型会利用这些知识来生成答案。 4. 搭建模型:使用导入的RAG模型类创建模型实例,并进行适当的配置。例如: ```python model = RAGSequenceForGeneration.from_pretrained("facebook/rag-sequence-nq") ``` 5. 生成文本:最后,使用准备好的模型和数据进行文本生成。你需要提供编码后的输入数据,并调用模型生成文本的方法。 需要注意的是,RAG模型需要配合知识库来使用,以便在生成文本时检索相关的信息。因此,你还需要搭建一个知识库检索系统,这可能需要使用到诸如Elasticsearch这样的搜索引擎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值