大家好,欢迎来到《书生谱语》第3期实战序练营,我是今天的主讲北辰。
然后我们这一期主讲的内容是使用我们的《书生谱语》Intel LM以及Lama Index框架去实践一个RIG的项目。
然后这个课程是由助蓝严保以及我我们去共同合作的。
我们今天主要的内容会分成三个部分。
第一个部分是我们会特别简单的回顾一下Intel LM,就是《书生谱语》的一个立场。
然后我们会介绍一下RIG,帮助大家理解RIG到底是什么原理,怎么应用,
然后它的框架、评估测试等等一些使用的时候入门的一些基础的概念和需要的知识。
最后就是我们的重点,就是实践一个RIG的项目,使用到的就是Lama Index框架,
应用的就是我们最新的Intel LM的《书生谱语》最新的2.5模型。
那我们先简单的回顾一下我们《书生谱语》的这个发展历程吧。
《书生谱语》大模型Intel LM模型是2023年7月份首发的7B,
它是国内比较率先开放的一个商用,可以完全免费商用的一个大模型。
然后它的优点就是当时《书生谱语》发布的时候不仅仅是一个单一的模型和API的同时也发布了整个全链条的一个开源工具。
估计大家在完成这个课程之后就会了解到从这个模型的训练,
一直到模型的应用量化到测试都是全套的工具。
然后在去年的9月份的时候,Intel LM的第一版的20B模型也同样开放了。
这是我们的这个工具链也做了全面的升级。
在今年的1月份的时候,Intel LM2模型就是二代的升级版进行了开源。
在当时发布的时候,它的性能是超过所有同期的开源模型的。
那在7月份的时候,我们《书生谱语》又开放了2.5的模型,也是我们这个第三期实战营所用的一个主要的模型。
这个就是一个对《书生谱语》开源模型的简单回顾。
然后我们接着到今天比较重点的部分就是介绍一下RIG。
我们首先对RIG这个技术做一个基本的概念的理解和定义。
RIG的全称是Rechoval Augmented Generation,是一种结合了检索和生成的技术。
中文叫Soso增强生成技术。
它的目的是通过利用外部知识库来增强我们已有的这种大模型的能力。
通过检索用户输入相关的信息片段结合这些信息,然后让大模型生成更准确更丰富的回答。
大模型其实我们主要在想要去解决使用这种技术,主要是想要去解决大模型出现的一些共有的比合比较实用当中比较常见的问题,一个是生成幻觉,就是它不知道的内容。
然后大模型有的时候会硬生成一些片段,就是估计大家在网上看到很多这种效果。
然后第二就是关于知识的问题,就是因为我们的模型训练都是一次性的,不是实实的。
所以当我想要问大模型一些最新的消息的时候,即时的信息的时候,那它其实是没有办法给出准确的答案的。
第三一个会解决大模型的问题就是缺乏透明和可追溯的推理过程,就是我们一般大模型它给出的答案可能是正确的,但是我们不太了解它是怎么样给到这个过程。
所以我们可以通过RIG这种技术来够帮助我们去理解它到底是怎么样给出这样答案的。
所以整体来讲,RIG技术是解决大模型在处理知识密集型任务时可能遇到的这些种种挑战,然后可以为我们整个的应用提供更准确的回答。
那降低我们的推理成本,实现完整的外部记忆。
那我们其实现在已经有很多的关于RIG的应用了,包括问答系统,文本生成,信息检索,然后如果是多摩泰的话,它还可以有图片描述。
这些应用其实都是可以应用到RIG技术的。
好,那我们现在开始简单说一下我们RIG的基本的一个工作原理,就是RIG它这种技术不是单纯的某一个训练,
或者什么它更多的像是一种概念型的框架,这样的一种方式来帮助我们这个提高大模型的能力。
那通常来讲我们会有一些外部的一些知识员,那这些知识员可能包括最原始的像文档啊,网页啊,就是我想让模型去找到的信息,
它有可能是及时的消息,有可能是很专业的很少的一个信息。
那首先我们一般会把这些知识库进行一个锁引,这是整个RIG工作流程当中很重要的一步,
所以把这些所有的外部知识编码成项量,然后存储在我们的一个项量数据库当中,就叫vectDB。
那我们这种vect database,vectDB,有了之后呢,我们的使用方式就是正常使用方式使用的时候,
我们的用户会直接去问一个问题,给到这个大模型,然后大模型生成之后返回了。
那中间会出现我们刚才上述举的种种例子,像幻觉啊,过时信息。
那现在有了RIG之后呢,我们的工作流程就变成了模型会先去在这个vect database当中去进行一个检索,
那检索这个过这个动作接收到用户的问题后,它会将问题也编码成项量,
然后在数据库当中找到最匹配的这种相关的一些文档框啊,或者是知识框,
然后把这些知识框输入到大模型,然后大模型在根据我们用户的输入内容,
问题和这些知识框,再根据提示词,共同生成一个答案。
那这个就是大家可以这样的话就比较直观的能理解,为什么说我们这种RIG可以解决到这种密集型知识,
然后骑士信息等等这样的问题,那这个就是一个基础的一个流程,基本上任何的RIG的应用都遵循这样的一个框架。
然后我们现在来讲一下这个项量数据库Vac的DataBase的问题,
因为其实这个Vac的Base也算我们RIG技术当中一个重中之重,
因为如果没有它,你也没有地方去检索,你也没有排序,然后你的相关的外部文档也没有不存在这些东西,
所以Vac的DataBase这个是我们的一个很重要的一个范畴。
首先是Vac的DataBase承担了我们整体的一个数据存储的任务,
它将我们的文本和其他数据通过相关的预讯链模型或者其他一些方法准备固定常多的项量表示,
这些项量就需要能够捕捉到文本的语义信息,然后在这个项量库当中进行相次性检索,
通常我们会使用相量数据库中找出和我们的问题当中最相关的项量过长,
那通常情况下我们会通过计算core sign的这种距离或者是data的product这种点程的距离来进行相速度的判断,
当然也有其他的这种相速度判断的方法,那检索的结果会根据我们的相速度得分,
会进行排序,然后把我们刚才提到了topk去给到我们的生成模型,
那这个项量数据库当中比较重要的是一个项量表示的方法,
它决定了我们这种我们的数据存储的质量以及我们检索得到的数据质量,
然后我们表示方法可以有我们使用其他的这种签入式的大模型,
语言模型,或者是使用这种句子签入、段落签入等等等等的一些技术,
那这一会儿涉及到一个比较实用的点,大家可以了解一下,
就是我们在使用的时候因为语言的不同,
所以可能更多的会选择贴近我们这个语料园的这种语言的签入模型会比较好,
现在通常使用的都是基于大模型的这种签入模型,有很多的开源应用。
然后我们简单的回顾一下IG的发展进程,
那IG最早的概念其实是由MATI,就是Facebook的Louis,
这些人在2020年推出的论文当中提的,
这个论文的名字就叫retro augmented generation for knowledge intensive and LP tasks,
所以它其实是一个像今年应该算四年了,它其实是一个比较新的概念,
它最早的时候其实是一个耐EVE的IG系统,
就是完全等于说就是遵循我们刚才提到的那个流程,
就是文档,然后进行一个锁业,然后检索,然后提示词和我们的大模型就进行生成,
这个通常来讲就是用用于我们的问答系统和信息检索,
那现在更多的进一步的时候呢,为了我们更好的一个检索结果和需求,
我们有了这种需要的占要生成,那种推荐等等的应用会选择这种更高阶一点的这种RG,
那它的一个特点就是除了在我们原有的这种过程当中,
除了说进行一次搜索之外,它其实多加了两次,
一次是在我们检索之前进行了一个前检索,
我们对于这个用户的问题,其实我们就进行了一次检索,
那同时呢我们也有后检索,就是当我们检索之后的内容,
我们可能会使用排序啊,然后进行这种内容提取啊,
或者是融合的方式再进行一个优化,那以此来达到这种更好的一个效果,
然后形成占要,形成内容推荐,更准确的推荐匹配吧,
然后再通过提示词进行这个大模型的生成,
那最近的研究方向就是这种模块化的RG其实是一个主流的方式,
它可以应对我们这种多模态任务的需求和这种连续对话系统的需求,
那这个图其实就比较好的展示了这三种不同的区别,
那看到这种多模态就大家就可以看到,
那其实它是通过这种模块化的行为把不同的整个的工程的内容,
然后分部分放进去,根据我们实际的操作,然后就进行提取了,
那RG其实有很多的这种优化方式,
它并不是说我建立这一流上它就能很好的查询,
它还需要我们对每一个模块进行一个细部的优化,
然后每一个模块细部优化有很多的技术,
那这里边就是说,按照我们整体的一个大的流程方向,
简单的找了一个主流的方式吧,
那第一个就是进行索引度优化,
我们可以选用这种细力度的风格,
那这个就一定会考虑我们这种数据源存储的时候,
大小也可以用远数据存储等等,
那还有查询时候的优化,
就是我们要查询拓展,进行转化等等,
那还有嵌入过程的话,
就刚才也提到了选择合适的这种嵌入模型,
然后也可以说结合细数和密集的任务,
然后或者说进行多任务的这种嵌入,
然后这种上下文的管理,
就是说我像刚才说的这种后那个post retriever后检索的时候,
就是我已经拿到了这个检索的内容时候,
要进行再进行一个重排,
或者进行一个上下文的压缩,
选择压缩,然后有一个更高效率的选择,
当然这种微调,
就是在检索过程当中生成过程双重的这些微调,
其实也是一个很重要的过程,
就是后面我们会想到微调和RIG,
它并不是一个独立的部分,
在一个完整的运用当中其实是应该相互相成的,
那然后是一些专门针对于检索的一些优化,
包括迭代检索,就是进行反复的重复,
就能生成一直到查到的这些为止,
然后也有低规检索,
然后包括我们也可能比较熟悉这种劣势推理这个概念,
还有自适应检索,
大家有兴趣的话,
可以看一下这个相关的论文,
我根据关键字搜一下,
方法是有很多的,
那刚才提到了,
其实在我们正常的应用,
无论是学习还是现实的工作场景当中,
RIG的方法和微调的方法,
就是一个有类似于博弈的状态,
那先简单的说一下,
它们之间的区别和不同呢,
RIG其实是一种非材质的记忆,
就是我不需要对本身的大模型进行任何的公感,
我是利用外部的知识库,
提供这种实施更新的信息的,
然后它能够处理这种高度密集,
高度实实化的信息,
然后提供这个基于事实的答案,
那当然也可以通过这种检索的增加,
提供更加多样的内容,
那我们最常用的可能就是一些工具,
它会去搜寻这种检索网络上的内容,
然后根据网内容再提供一个回答,
它适用的场景也是很明确的,
就是它适用是需要最新信息和实施数据的任务,
开放域的问答,实施新闻材料等等,
优势就是它对动态支持的更新非常好,
然后它也特别适合处理常委支持问题,
就是有些时候我们的这些答案可能只有一份,
那如果说我们只拿这一份的数据去进行数据的话,
就会出现这种数据的这种bass很严重的问题,
这种常委的问题,
可能在微调上不会很好处理,
那这时候IG是一个很好的补充,
它的局限也是非常明显,
就是它非常依赖于外部支持库的质量和覆盖范围,
就是它还是遵循了我们整个的这种大模型的这种Garbage In,
Garbage Out一个原则,
就是它的回答答案基于我们的外部支持库,
如果你这个外部支持库,
有一些瑕疵或者是就是有一些是错的,
那它回答还是错的,
当然它还有一个隐藏的问题,
就是IG的功能其实从根本上来讲,
它还是基于我们大模型的能力,
就像是我们说这种70B的数据的大模型,
那理论上来讲,它的性能一定是要好于7B的,
那可能更要好于我们这种1.8等等的这些,
这个小一点的模型,
所以它真正的检索搜索来的效果是,
在现有的大模型的基础上做一个提升,
那这种提升其实还是不能打破
我们整个大模型的这种Scale Law的这个范畴的,
那这个是我们的RG的一个基本的一个,
针对模型应用的一个优缺点和场景,
那Fantune是可能大家都比较熟悉了,
但是它是一种参数基因,
就是我要重新训练我的模型,
就是我可以使用部分的或者是一些基础手段,
但我还是要有重新训练的过程,
那通过在特定任务数据上训练这个,
让模型更好地适应这个任务,
那这个的前置条件就是需要大量的标注数据,
然后有一个风险就是为条后的模型可能会过你河,
因为相较于它在最基础的模型训练的时候,
它的Fantune的数据可能会很小,
也有刚才提到的就是它有可能会出现这种数据常委的问题,
那适用的场景Fantune就是适用于数据可用,
需要模型高度专业化的任务,
然后像特定领域的文本分类、情感分析、文本生成,
就典型的就是类似于我们这种,
你像律师的法律文件的一个处理、一个分析,
还有包括我们医疗数据的一个处理分析,
就是它对于实施数据要求没有那么高,
但同时它对专业度要求很高的情况下,
可能会选用Fantune的方式更好,
它的优势就是很典型,
就是针对特定任务的优化,
就特定任务直接这种点对点打击方式的一种优化方式,
它的效果会很好,
那它的局线,
第一个局线就刚才的反复提,
就是它对于数据的大量标注,
然后第二问题就是它没有办法有这种很好的实施性,
所以看起来它们两个是相对的是比较,
但其实更多的时候,
整个大模型的优化其实是一个相不相成的过程,
它的核心是根据我们是否有高外部知识的需求,
或者是有模型适配的任务的需求,
来决定我们到底采用哪种方式或者混合方式,
这个表格就很好的展现了我们现在比较通用的流行的模型优化方式的一个,
这是一个维度图,
像这边的横轴就是它的模型适配度,
纵轴就是外部知识的需求度,
那Fantune肯定是对于这种模型适配度是很高的,
但是它对于这种实施性就很差,
相对来讲我们的这个提示工程,
其实是属于一种比较出级的方式,
它就是实施性也一般,
然后模型适配其实也一般,
那RG相对它和Fantune是一个看起来对立的场景,
就是它对于实施性的提升是很好的,
但是它对于整个的模型的任务适配,
可能没有Fantune那么强,
但最终的话其实整体来说,
我们是通过融合各种技术手段和方式,
如果既有Fantune,
也有ProMt这个,
如果既有RG整体方式,
我们可以达到一个既保证外部数据需求的高需求,
也能满足任务需求的这样一种方式,
具体还是要看我们的任务的要求和我们的这种实用场景吧,
然后我们快速的说一下这种评估框架和基础测试吧,
因为我们可能很多的朋友还是有这种学术要求,
或者是自己的一个指标要求的,
那整体RG这一块是分两块来评测的,
一块是检索的质量,一块是生成的,
就是我检索到的内容是否和我这种想要的东西是否匹配的,
匹配的度有多少,另一个是我生成内容的质量如何,
然后它也有各种的评估维度,
包括它的噪声啊,然后这个负面拒绝啊,
信息整合啊,这种的反面的一个卢邦性啊等等,
包括还有一些程序,
还有一些特殊的是一种安全性的一个东西,
就是维度很多,
然后我们的经典评估指标,
其实大家都很熟悉的准确率,
召回率,iPhoneScore,然后BlueScore,
然后Rogue,这些都是很基础的,
就是翻译检索文本生成,
然后这边是检索的一个准确率,
这边生成的准确率,
那针对RG的整体的一个技术的话,
有一些评测框架,
像基准测试会有RGB Recall Crew的,
那评测工具有Regas,
Ares,TruLens,等等等等,
那这里边有一篇比较好的综数,
大家可以去看一下,
我觉得对于这个初学RG了解的这一块的内容的话,
有一个很好的全面的理解。
那最后我们来,
根据他这个刚才提到那篇论文的这个总结图,
我们也来总结一下整个的RG,
RG这就是刚才讲到的,
它是应用可以这些范围,
然后这个是它的发展模型,
然后这就是刚才提到的一些方式,
可以说进行一些技术提高,
然后这是一个技术手段,
那比较重要的其实是这两块,
就是一个是它的技术站,
那其实RG是有很多的技术框架,
可以帮助大家快速的去实现这个RG应用的,
一个呢就是我们的Launch Chain,
那另一个是LamaDex,
这两个都是我们大家很熟的,
比较流行的,
那也包括Fluorize,AI,AutoGen,
那其实之前我们第一期的课程用的就是Launch Chain的框架,
大家有兴趣都可以去学习一下,
然后包括国内有很多的框架,
还有其他的国内外别的框架,
然后InternLM还有自己内部的一个服务化的框架叫回乡豆,
其实上回有讲,
这回会放到高阶课程里,
那关于RG这边其实主要的挑战,
目前其实和大模型基本上是保持一致的,
一个就是在长文本序列当中,
因为刚才也简单的提到了RG的性能好坏,
其实还是基于这个大模型本身的性能的,
所以说我们在RG给它输入的一些相关内容当中,
如果过于长的模型还是没有办法处理的,
然后也有这些问题,
就是它的卤帮性啊,
包括这种产品的及时性啊,
Scaling Law啊这些等等的问题,
然后动模态的话,
其实现在发展的也越来越好了,
这个刚才也都提到了是一些评估的问题,
有需要的可以去自己看一下。
好的,那RG的概念我们就介绍完,
下面我们进入到我们的实际操作部分,
先简单的去说一下我们这回会用到的一个框架,
是Lamaindex呢,Lamaindex是什么呢?
它其实就是一个开源的锁引和搜索库,
它不是一个专门为RG设计的工作,
它是一个针对大模型的一个整体的一个工具,
然后它可以很好地去帮我们建立这种,
我们的这种知识库,
然后它也有一些很方便的工具链帮我们去进行这种搜索,
就是我们RG需要各种,
它能够提供高效扩展的文本锁引和减速功能,
就是这个大家可以看到,
它可以进行这种数据的输入,
签入式生成,
然后包括大模型的连接,
包括这种项链化数据的连接,
然后评估等等这些都能做,
然后它的应用呢,就是这种问答知识库,
然后建立这种结构型的提取,
然后对话语意识搜索,
然后这种agent这种机身智能,
其实都是可以应用的,
那我们主要使用的是我们这种Lamaindex,
再和它在RG方向应用,
那其实这个图刚才和那个是基本是一样的,
就是Lamaindex可以去把数据库,
然后文本甚至API的内容进行一个锁引,
然后后面就和刚才讲一样,
用户发一个问题,
然后在锁引进行检索,
检索到的内容和我们的这个问答的这个promote,
包括我们的数据,
然后一起给到大模型,
大模型圣常返回给用户,
就是这样一个流潮,
那Lamaindex最大的特点呢,
其实是在它的数据所引检索和它的指示模型上面呢,
Lamaindex非常好的一点,
就是它对于大规模数据有着非常好的处理能力,
它可以说对于我们这种大规模数据所引,
然后它也支持多种的文件的这种数据源,
所以这一点是我们在使用当中会去倾向于它的一个很重要的因素,
就是它很方便,
然后数据规模上,
如果提高数据规模它的支持性就很强,
那第二就是它能够提供高效的检索机制,
这一块非常非常的重要,
就是我们可能不需要自己过于过多的去调整什么,
就去进行一种它已有的检索机制的选择,
就可以帮我们找到相关信息,
那同时呢这个Lamaindex虽然叫Lamaindex,
但是它现在呢已经支持除Lama以外,
包括GPT,
也包括有很多的谷歌也好啊,
那个Astrope也好啊,
它们的这种API,
也包括像我们的那个书生普语系列,
这些大模型它都是已经兼容支持的,
基本上我在它的官网上可以找到我们常见的所有的这些大模型,
它都能够支持,
然后在Lamaindex在RG上的应用,
其实是一个特别方便的东西,
就是它已经提供了整个RG在一般应用全过程,
它把它进行了抹块化,
然后也拓展也非常的方便,
那根据Lamaindex它的架构,
整个的RG流程其实分这五个步骤,
包括这种数据的加载,
然后数据的锁印,
starring数据存储,数据查询,效果评估,
它是包括这五个模块,
那数据加载方面呢,
这个Lamaindex支持,
基本上支持我们需要的所有数据员,
那它有一个LamaHub,
这个Hub呢,
提供了很多很多,
就是这种现成的这种,
它叫连接器,
就是Connectus Hulu,
或者我们叫Reader,
就可以直接调用这个Reader,
帮我们去读取,
例如PDF等等这个工具,
就是很方便,
那建立所有的过程呢,
它也可以有很多选项,
就是我们选择如何去切入,
我们的整个模型,
然后也可以选择其他的,
这种策略啊,
什么都很方便的,
然后存储这一块,
就是我们在进行存储之后,
Lamaindex都会直接帮助我们,
去进行这个数据存储的工作,
然后我们可以避免重复存储的过程呢,
这一块是提高很大的效率和想要速度,
那查询方面Lamaindex,
更是提供了很多现成的查询策略,
那包括子查询、多不肉查询、混合查询的,
这些方法吧,
就是我们可以直接调用,
然后也不用自己去写,
就是在真实的现实场景当中,
其实我们更多是看哪个方法,
更适合我们的项目需求,
而不用自己再去做测试什么,
然后评估也是,
就是我们直接调用它的评估方法呀,
你像我们就可以,
它的准确性、卤帮性、速度等等,