AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


一文白话RAG在大语言模型里做什么
发布日期:2024-04-11 03:29:26 浏览次数: 2307 来源:雨石记



RAG是Retrieval Augmented Generation的缩写,主要是帮助大语言模型利用外部文档提升生成结果质量的一个技术。

正文引子

今天咱们要好好唠唠嗑,讲讲这个叫RAG的AI技术。它能让那些人工智能大聪明变得更机灵!有了RAG的加持,大模型可以实时搜索跟问题相关的资料,再把这些信息用起来给出靠谱的回答。以前呢,大模型容易答得颠三倒四,还爱瞎掰知识,有了RAG,总算治好了它们胡说八道的毛病。

RAG工作起来分三步:资料导入、搜索筛选、整合输出。

  • 第一步是把资料分成小块儿,然后再变成一串串代码,方便储存检索。
  • 第二步,一接到问题,就赶紧在数据库里搜索最匹配的资料。
  • 第三步,大模型把搜集的资料跟自己肚里的知识“揉”到一起,琢磨出精准又到位的回答。

咱们还会聊聊 RAG 是咋发展起来的,重点解析它的每个零部件。什么数据导入啊,信息检索啊,模型整合啊等等,这些技术都有啥窍门咱全给抖落出来!当然,RAG 还没修炼到家,也有不少难啃的骨头,什么数据处理太复杂,编码效率不够高啦,模型不够全面啦,这些挑战咱们一个个击破,给RAG点儿升级的秘籍!

回顾

RAG 就像给大模型装上了个“外挂”,让它们能在网上冲浪找资料,随时随地“充电”升级,从此告别知识荒!有了这个技术,大模型再也不能乱扯淡了,说啥都有理有据。RAG 干活分两步:第一步,上网搜索最相关的资料;第二步,大模型把搜到的资料跟脑瓜子里的知识一对比,吭哧吭哧琢磨出个靠谱的答案。这么一来,不仅回答更精准了,咱还能随时查查资料出处,再也不用担心被人工智能忽悠啦!最重要的是,有了 RAG,再也不用天天逼着大模型回炉再造,省时又省力!

上头这张图把 RAG 的工作流程都给画出来了,总共分三大块:

  • 第一块:资料消化 把资料大卸八块,再把每一块儿变成一串串代码,整整齐齐地存起来。为啥要这么费劲?因为问问题的时候,得靠这些小块儿资料精准定位答案,跟平时上网搜东西有点像。
  • 第二块:资料搜索 一有啥问题,系统就根据代码的相似程度,赶紧把最靠谱的那几个资料找出来。
  • 第三块:答案合成 大模型把搜来的资料当“课外书”,结合它脑子里已有的知识,琢磨出个像模像样的答案。

划重点啦!RAG 最牛的地方是,不需要天天训练大模型就能随时适应新的资料,换了新领域的数据直接就能上岗,太省事儿了!

历史

RAG,全称检索增强生成,是Meta公司在一篇论文(见参考文献1)中提出的新技术。为啥要搞出这个RAG呢?因为科学家们发现,那些牛哄哄的大型语言模型虽然记性好,干活也麻利,但是一碰到需要深度思考和知识运用的活儿就容易露怯了。

然后,RAG 就带着它的锦囊妙计闪亮登场啦!它提供了一种灵活的微调方法,专门帮大模型接入外挂。RAG 把预训练好的参数记忆(比如 seq2seq 模型)和从维基百科建立的非参数记忆给它连了起来,而且找资料这活儿还专门有个预训练好的神经检索器负责(就是 DPR)。RAG 的目标很明确,就是用微调的方法,让带参数记忆的生成模型学会利用上非参数记忆。RAG 里的 seq2seq 模型使用神经检索器找来的资料,两边一组合,模型就能接受完整的训练啦。训练的时候,它会微调任何 seq2seq 任务,同时搞定生成器和检索器的学习。至于找来的资料怎么用,RAG 会用 top-K 近似算法,可以针对每个输出,也可以针对每个词来调整。

RAG 最牛的地方在于,它不走寻常路,以前的办法都是想着给系统加点儿非参数记忆,但 RAG 采用了新的思路,把参数和非参数两块儿都提前训练好,知识库塞得满满当当。实验结果也证明了 RAG 的实力,开放域问答轻松搞定,事实核查和知识密集型生成任务更是把以前的模型甩在了身后。RAG 还能实时更新资料,让模型的知识库也能跟上世界的变化,简直太贴心了!

关键组件

之前咱提过,RAG 最重要的三步就是:资料消化、搜集资料,还有整合输出。下面,咱就来好好扒一扒这三步里都有啥玄机。

第一步:资料消化

在 RAG 里,资料消化指的是把资料梳理准备好的过程,让大模型能直接拿来生成回答。

这一步要分三小步走:

  • 资料切块儿:把一大坨资料切成小块小块的,方便消化。打个比方,介绍文艺复兴的长文就可以根据段落,或者按照历史时期(比如早期文艺复兴、鼎盛时期)来切块儿。切得越细,大模型理解起来越轻松。
  • 数字编码:把文字资料变成一串串向量,也就是用数字来代表资料的内容,这样大模型处理起来才效率高。还是刚才那个例子,介绍鼎盛时期的资料,就能变成一串专门总结艺术、文化、历史特点的数字编码。有了这些向量,大模型对每个小块资料的精髓就能了如指掌。
  • 建立资料库:把这些用向量表示的资料,整整齐齐码放好,方便以后快速搜索。这就跟建立一个向量数据库差不多,里面存储的都是每个资料块对应的“数字编码”。还是文艺复兴那个例子,每个时期对应的资料块都被“编码”后放进数据库,用户一搜啥问题,系统就能火速找到最匹配的资料,精准出答案!

第二步:搜集资料

这一步包括以下几个小动作:

  • 用户提问:用户用正常语言提个问题,比如说:"讲讲文艺复兴时期的那些事儿呗?"
  • 问题变身:问题会被送去"变身",变成一串数字向量,就是把文字换种方式表达出来,方便大模型计算。
  • 比对编码 :问题变出来的向量编码,会跟之前存好的资料向量编码进行比对,看看谁最匹配(一般用余弦相似度来比较)。
  • 选出前几名:系统会在资料库里挑出跟问题最相似的几个资料块,也就是最匹配前几名。这些资料可能从不同角度介绍了文艺复兴时期的方方面面。
  • 资料提取:系统把挑出来的那几个资料的实际内容取出来,这些内容都是能正常阅读的文字,跟用户的问题息息相关。所以,完成资料搜集的这一步之后,大模型就晓得,刚才在资料库里定位到的那几个片段是对回答问题最有帮助的。在这个例子中,通过搜索,大模型就能确保给用户提供的答案都是关于文艺复兴的,而且还会从资料库里引用历史文献,让回答有理有据,内容更丰富。

第三步:整合输出

这一步其实跟大模型平时生成答案差不多,但是现在大模型手里多了从资料库里淘出来的宝贝!最后,大模型会把自己的语言能力和搜集到的资料给揉到一起,生成最终的答案呈现给用户。这个答案里可能会直接引用某些文献或历史资料,显得倍儿有文化!

RAG挑战

虽然 RAG 看起来是个给大模型开外挂的简单方法,但实际操作起来还是有不少难题的,科学家和工程师们还在使劲攻克这些难关:

  • 资料消化太复杂:要把海量的知识库都塞进大模型的脑子里,这里面的工程难题可不少。比方说,咋样高效地同时处理多条请求,出问题了咋样自动重试,服务器能不能顶得住等等问题,都要考虑清楚。想象一下,把各种科学论文数据一股脑儿塞进去,还得保证后续搜索和生成都不卡壳,这里面的优化工作量想想都头疼。

  • 编码不容易:把大批资料变成向量编码也是个挑战,限速、自动重试、管理自建的模型... 处处都有坑。想想看,要是让 AI 系统把一大堆新闻报道都变成向量编码,就得想办法解决数据变化、同步问题,还得把编码的成本给降下来。

  • 向量数据库有讲究:把资料都存进向量数据库,那这数据库咋调计算资源、咋监控、咋分片,处处都得费心。想想看,要维护一个资料内容复杂,重要性还各不相同的向量数据库,里头有多少坑没准儿连工程师们自己都数不清。

  • 微调和泛化能力的挑战:RAG 模型的微调也是个不小的难题,既要保证它在特定任务上表现得好,又得保证它在不同类型的知识任务都能派上用场。比方说,要在问答任务上表现良好,微调的方法可能跟要求创造性语言生成的情况不一样,这里头的平衡可不好把握。

  • 混合存储的难题:在 RAG 这样的模型里,把参数记忆和非参数记忆整合到一起,在更新知识、保证解释性、避免瞎编等方面都有挑战。想想看,要让大模型把原有的知识和新搜集到的信息结合起来,还不能出错、不能乱扯,这里面的难度可想而知。

  • 知识更新太麻烦:现实世界里的知识在不断变化,怎么更新 RAG 里的非参数记忆就成了个头疼的问题。想象一下,要是医疗领域的 RAG 模型得适应新的研究发现和治疗方法,那它的知识库可得及时更新,才能保证回答的准确性。

提升之资料消化

资料切块儿要更好

要让 RAG 的资料消化环节更顺畅,切块儿的方法得讲究。最简单的办法就是按固定字数或字符数来划分,但处理起大规模数据集就不灵光了。下面这些新招数最近比较流行:

  • 按内容切分:这种方法会根据文章的意思、句子的结构等等来划分,像什么词性标注啦,语法分析啦,都可以派上用场。优点是能保证切出来的资料块儿都有完整的意义,但缺点也很明显,需要更多的计算资源,整个过程也更复杂。

  • 按句子切分:这个方法就是把文章按照标点符号拆分成完整的句子,简单粗暴。优点是能保证每一个资料块都是个语法正确的句子,缺点是切出来的块儿大小会不一样,不够整齐划一。

  • 递归切分:有点像搭积木,这种方法会把资料一层一层地切分,形成一个有层次感的树形结构。优点是能切出不同大小的资料块儿,灵活性强,但是管理和索引这些块儿又是个麻烦事儿。

资料索引要更好

想要资料搜得又快又准,建立索引的水平得跟上。要是资料块儿都分类整理得整整齐齐,需要啥信息的时候直接就能找着。下面这些新招数值得了解:

  • 精细索引:把资料块再细分成小部分(比如句子),每个小部分都用位置和内容特征来标记。优点是可以精确到具体语境,但缺点是占内存,处理起来也更费时。

  • 按问题索引:把资料按照知识领域(比如主题)来分类整理,每个资料块都用类别和相关性特征来标记。这种方法很贴近用户的搜索习惯,效率高,但缺点是可能会丢失部分信息,准确性也会打折扣。

  • 带摘要的索引优化: 用抽取或压缩的方式给每个资料块都生成个摘要,再用摘要的内容来标记。优点是可以概括性更强,但缺点是生成和比较摘要的过程都挺复杂的。

提升之资料检索

假设问题和 HyDE

这部分有点儿烧脑,简单概括就是:先针对每个资料块编出一个假设问题,把这些问题都变成向量,然后用用户的问题去这个“问题库”里搜索。这样做的好处是,假设问题跟用户问题之间在意思上会更接近,比起直接跟资料块儿比对,搜索的质量就上去了。另外,HyDE(就是假设答案提取)的思路是,先针对用户的问题生成一个假设答案,通过利用用户问题和假设答案的向量表示来提高搜索质量。

丰富语境

这一招的目的是缩小资料检索的范围,让搜索结果更精准,同时还要把相关语境也考虑进去,方便语言模型进行推理。有两种思路可以试试:

  • 句子窗口搜索:这个办法是把一篇文章中的每个句子单独变成向量,这样一来就能保证用户问题和语境之间的余弦距离搜索更准确。等找到了最匹配的那个句子以后,再把这个句子前后几句也包含进来,形成一个语境窗口。把这个窗口里的内容都送给语言模型,让它对用户的问题进行推理。这样做的目的是让语言模型更好地理解检索出来的那个句子的前后语境,给出的回答能够更加准确到位。

  • 自动合并搜索:这个方法先把文章分成很多小块儿,每个小块儿都对应着一个大块儿。先去搜小块儿,假如搜出来的小块儿中,大部分块儿都属于同一个大块儿,那就直接把这个大块儿送去给语言模型处理。这个过程就像是在自动把好几个搜出来的资料块儿都合并在了一起,所以叫“自动合并搜索”。这种方法想兼顾检索的精细程度和语境范围,让语言模型产出的回答更加全面、连贯。

混合搜索

这个办法就是把传统的关键词搜索和现在流行的语义搜索技术结合起来,有点像强强联手的意思。除了向量搜索以外,还可以用 tf-idf(词频-逆向文件频率)或者 BM25 这种算法,这样就能兼顾语义相关性和关键词匹配,让搜索结果更加全面准确。

再精筛,再排序

资料搜回来以后,还可以再来一波精挑细选,包括过滤、重排或者做个转换啥的。LlamaIndex 就提供了不少好用的后处理工具,可以根据相似度分数、关键词、元数据啥的来过滤结果,还能用语言模型或者句子转换交叉编码器之类的方式来重排序。经过这一步,才能把最终选定的资料交给语言模型去生成答案。

问题变形和智能路由

问题变形的方法就是在搜索之前先把复杂的问题拆成几个小问题(扩展),或者把提问不准确的问题重新措辞。而动态问题路由主要是在多个资料库里搜资料的时候用的,下面列出了几种常用的方法:

  • 问题扩展:把用户的问题分解成几个小问题,每个小问题都能更精准地在资料库里搜索。比如,一个关于物理学的问题先得回退到基本物理原理才能有效找到答案。
  • 问题重写:这部分主要解决用户提问不够清晰的问题,通过改写问题的方式提高搜索效率。论文里专门提到了 Rewrite-Retrieve-Read 这个方法。
  • 问题压缩:有时候用户的问题其实是跟之前的一些聊天记录有关的,那为了准确回答,就得把之前的对话都考虑进去。问题压缩就是把这些聊天记录浓缩成最终问题,这样在搜索的时候才能有的放矢。
  • 动态问题路由:RAG 要是放在生产环境里用,那资料来源就多了去了,这个时候就得知道去哪儿找资料。这个动态问题路由就是让语言模型来判断,把问题自动发到最合适的资料库里。这个路由功能还能根据不同的资料来源自动调整,让搜索过程更顺畅。

提升之生成答案

最简单粗暴的生成法子就是:把搜出来的资料凡是跟问题沾边的都一股脑儿塞给语言模型,让它去琢磨答案。不过,现在科学家们又研究出了更高级的办法,需要分几次把资料送给语言模型,反复精筛细选,最后才能得到一个更靠谱的答案。下面列出了几种常见的方法:

组合答案大法

这种思路分三步走:

  • 反复精炼:把搜出来的资料分批送给语言模型,让它反复琢磨提炼出答案。
  • 先来个摘要:把搜出来的资料先浓缩成一个摘要,然后再让语言模型生成一个简洁明了的答案。
  • 多个答案大集合:根据不同的资料分别生成好几个答案,最后再把这些答案合并在一起,或者总结出重点。

编码器和语言模型的双向微调

这个办法主要是在 RAG 的架构上动刀子,微调里面的语言模型。

  • 微调编码器:对 Transformer 编码器进行微调,让它生成的向量编码质量更高,这样资料搜得更准。
  • 微调排序器:用交叉编码器对检索结果重新排序,这个办法主要用在基础编码器不太靠谱的情况。
  • RA-DIT 技术:用 RA-DIT 这种技术把语言模型和搜索器都给调教了,训练的时候用的就是问题、语境和答案组成的三元组。

总结

全文完,希望大家能在读完这篇文章后了解RAG是干啥的。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询