链载Ai

标题: 一文白话RAG在大语言模型里做什么 [打印本页]

作者: 链载Ai    时间: 昨天 22:23
标题: 一文白话RAG在大语言模型里做什么


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

提升之资料消化

资料切块儿要更好

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

资料索引要更好

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

提升之资料检索

假设问题和 HyDE

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

丰富语境

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

混合搜索

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

再精筛,再排序

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

问题变形和智能路由

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

提升之生成答案

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

组合答案大法

这种思路分三步走:

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

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

总结

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






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