微信扫码
与创始人交个朋友
我要投稿
尽管目前大模型取得非常不错的效果,但是依旧面临不少挑战,包括如何获取实时跟长尾知识,如何规避数据泄露的风险,以及高昂的训练跟推理成本。为了应对这些挑战,RAG逐渐受到更多人的关注。近期看到一篇北京大学发表的关于RAG的综述文章,概括性地描述各个模态下的RAG相关技术,其中关于NLP部分的内容很是不错,于是在这里整理了下其中的部分内容。(原文内容很多,但在这里只记录了笔者感兴趣的部分)
文中根据如何利用检索模块增强生成模块的方式,将RAG分为4种范式。
图1:RAG分类
利用用户query检索得到相关文档,将检索结果跟用户query拼接到一起作为生成模型的输入。这是利用外部检索知识显示指导生成模型的方式,也是目前RAG主流的范式。这种范式的兴起跟生成模型能力不断提升有非常大的关系,尤其是到了大模型的时代,由于大模型的能力相当强大,所以只要直接将外部知识跟其他输入一起喂给大模型,大模型自身就可以处理这些信息并生成合适的回复,简单粗暴且效果不错。
利用用户query检索得到相关文档,并获取对应文档的向量表征,在生成模型生成阶段融入知识文档的表征信息。这是一种利用外部检索知识隐式指导生成模型的方式,生成模型会跟检索知识的向量表征进行交互,从而增强生成模型的理解能力跟生成文本的质量。最典型的就是FiD,这种范式在大模型时代前也曾一度流行,由于当时生成模型的能力不足,于是出现这种想在decoder阶段直接注入外部知识的方案,能够让检索枷锁更加直接地干预到生成结果。
生成模型在decoder阶段计算下一个token的logit时,同时考虑生成预测的结果跟检索模块返回的信息。可以理解为将检索模块跟生成模块视作两个独立的链路,分别计算对应的下个token输出的logit值,再将两个链路的logit联合起来。最典型的就是knn-LM。
利用检索模块来替代生成模块的方式,主要用于节省资源跟加速文本生成。可以理解为利用检索结果提供一段候选回复,让生成模型判断这段候选回复是否适合作为最终结果,适合的话就保留,不适合的话就从不适合的位置起进行截断,然后重复上述过程。最典型的就是REST。
为了提升RAG整体效果,可以从以下几个方面进行。
图2:RAG增强方式
用户query的质量会明显影响到检索模块的结果,可以通过query改写,数据增强等方式提升用户query的质量。
f) meta-data filtering 利用某些属性对数据做进一步过滤
c) finetune generator 对生成模型做进一步finetune使得生成模型更适配特定领域或者检索模块。
若生成模型的结果未能达到预期效果,还能对结果进一步修饰。这里文中提到的方法貌似不够全面,目前很火热的rethink或者refine都没有提及。
b) iterative RAG 迭代RAG,反复调用检索-生成这个pipeline以获得更佳效果。
文中关于NLP部分的内容,概括得非常全面,尤其RAG增强的部分,RAG玩家想进一步提升自己设计的RAG系统性能的话,可以好好看下这部分内容,里面提到的很多技巧确实是很有收益的,跟大家实践经验也比较吻合。同时,可以发现目前的RAG可以被切分了非常多的子模块,而各个子模块的优化还是相对比较独立的,如何加强各个子模块之间的交互以达到系统整体最优的工作还值得进一步研究。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-05-28
2024-04-12
2024-04-25
2024-05-14
2024-07-18
2024-08-13
2024-04-26