深入探究RAG:原理详解、流程梳理与最佳实践指南

前言

最近遇到好多人和我交流RAG相关的技术,同事在说,面试在说,甚至我多年未联系的挚爱亲朋都突然来问我RAG是个啥?要怎么搞?

我印象中22年23年,讨论大模型应用,都在讲pe,rag,agent三个方向。但是随着越来越多的应用被开发出来,RAG相对另外两者稍显走弱。

我们组今年甚至几乎没有RAG相关的规划,都还在之前搭的老一套上用。

所以,一文搞懂RAG。

发展历史

懒得听我bb的请[RAG论文传送门]

这里贴一下发展图:

image.png

原理&流程

RAG一句话说明白:通过检索外部数据,增强大模型的生成效果

顾名思义他的流程如下:

graph LR
P[数据处理] -.-> R[检索]
R --> A[利用]
A --> G[生成]


  • 数据预处理:是我们经常忽略的一步,一个好的效果必定依赖一个高准确的检索,而一个高准确的检索也同样依赖数据的处理。
  • 检索:根据query按照一定策略从茫茫多的数据中找到匹配的内容。
  • 利用 | 增强 ,生成 :将检索到的数据利用起来,比如交给模型,扩充它的知识。

1. 数据的处理

目标是把数据变成特征

1.1 数据结构化

传统上,我们把数据分成三种:

  • 高度结构化的数据,比如markdown,html,一些json yaml文件
  • 半结构化的数据,比如word
  • 低结构化的数据,pdf,html

传统数据结构化的方法是将数据先处理成文本,再进一步提取特征。比如通过一下ocr识别这样的方法。

但是,时代变了,像gpt4 这种模型支持多模态,这给我们可操作的空间就很多了。

更多的时候,我们是将广义上的模态,转变为模型可接受的狭义上的多模态。

1.2 特征提取

如果你需要提特征,请直接使用大模型embedding,下面的内容仅做了解

embedding对内容进行特征提取通常也有三种方法:对称语义,非对称,混合

1.2.1 对称语义(Symmetric Semantics)

对称语义意味着两个向量之间的相似性度量是对称的,即如果向量A和向量B的相似性是某个值,那么向量B和向量A的相似性也是同样的值。在这种情况下,两个向量之间的关系是互相的,常见的应用包括:

词向量(Word Embeddings) :例如,Word2Vec、GloVe等模型,这些模型生成的词向量可以用于计算词语之间的相似性,通常使用余弦相似度(cosine similarity)等对称度量方式。

文档相似度:在信息检索中,文档与文档之间的相似性计算也通常是对称的。

1.2.2 非对称语义(Asymmetric Semantics)

非对称语义意味着两个向量之间的相似性度量是非对称的,即向量A和向量B的相似性可能与向量B和向量A的相似性不同。在这种情况下,两个向量之间的关系具有方向性,常见的应用包括:

问答系统(QA Systems) :在问答系统中,问题和答案之间的关系是非对称的。一个问题对应一个特定的答案,但反过来并不一定成立。

推荐系统:在推荐系统中,用户与物品之间的关系也通常是非对称的。用户可能对某个物品有兴趣,但物品并不会对用户有兴趣。

翻译模型:在翻译模型中,源语言和目标语言之间的关系也是非对称的。一个句子从源语言翻译到目标语言,但反向翻译不一定能得到原句。

1.2.3 混合

混合结合了前两者的优点,并且通常会有instruction tuning。能够让模型理解指令。

这类的通常有:m3e,bge,gte

1.2.4 范围

踩坑。有的时候,并不是把所有的内容参与特征化,效果会更好。尤其是在生成式场景里,尤为明显。

举个例子:oncall小助手场景下,我们过往的oncall记录通常作为一个数据集。这个数据集中参与特征化的部分应该只有问题+原因+结论,而不是所有通话内容全部参与特征化,效果会更好。

1.3 关于大文本问题

受限于文件内容,对于大文本分而治之是十分有必要的。

  • 比较常见的,有langchain中的CharacterTextSplitterRecursiveCharacterTextSplitter,它们基于一定的规则,对文本进行分割,并且可以保留一定部分的重叠。
  • langchain还有固定结构的切割器,比如MarkdownTextSplitter,PythonCodeTextSplitter,HTMLHeaderTextSplitter等,用来切割固定结构的文本。
  • langchain中还提供了按token切割的方法SentenceTransformersTokenTextSplitter
  • 也可以基于一定算法的文件分割:比如基于bert的中文的分割模型nlp_bert_document-segmentation_chinese-base,或者将基于NLTK的NLTKTextSplitter,再或者基于 spaCy 库的SpacyTextSplitter

当然,除了分割法还有总结法,就是将大文本中的关键内容提取出来,总结法也有很多,你直接大模型总结吧,我这里懒得写了。毕竟总结这个事可能是一个团队好几年的工作,一两句也说不清楚。

2. 检索 | 召回

当我们准备好数据后,就可以检索了

2.1 常见的检索方法
  • 向量检索:我们将提取到的特征放到向量数据库中,在发起query时,从数据库中召回我们需要的topn内容。

  • 关键字检索:我们不需要提特征,直接把文本放到ElasticSearch,OpenSearch这种数据库中,然后根据query的关键词进行检索,相似度可以用传统的算法计算,比如tfidf,或者knn,当然这些算法数据库本身就支持。

  • 图数据检索:将数据按照一定关系放入ne4j,nebula等图数据库中。然后查询使用。在 社交网络分析这类场景中很常用。

  • 关系数据库检索:比如电商推荐,智能客服,或者导购数字人这种场景,会从关系型数据中检索信息。

  • 搜索引擎:在开放域中,通常会先走搜索引擎进行信息填充。当然现在比计较流行后置的ReAct范式。

2.2 混合检索

还记得我们在传统推荐系统中,为了达到比较好的推荐效果,通常不会只用一种方法。

同样的,RAG我们也可以进行多路召回,将结果按照一定策略排序,以达到更好效果。

混合策略:略

2.3 query生成

还记得双塔模型吗,我们的query的特征生成通常需要一个复杂的机制来完成。而检索阶段通常发生在prompt拼装之前,prompt又是查询准确率的关键指标。而prompt是经常变的。这就使得传统召回的神经网络非常复杂。

我们必须简化一下这个操作。

最简单的情况:根据用户输入召回

我们直接把用户的输入作为query进行检索。通常在一些workflow的场景中非常实用。因为workflow通常处理一个固定的问题,它的输入也通常是明确的,所以直接作为query同样能够保证检索的准确率。

拼模板

我们将相关信息,比如用户画像,上下文,用户输入,prompt设定部分等,按照一定个模版格式,拼装在一起,然后特征化,再进行检索。

这种方式在虚拟社交中比较常见。

小模型生成法

拼模板有时候会带上太多不必要的信息,会加大模型幻觉。这时候我们可以用小模型进行总结,再进行检索。

那推而广之,可以用ReAct范式动态检索。不但节约了时间,还增加了准确率。

其他待补充。。。

3. 利用 | 增强 | 生成

当我们拿到检索结果后,就可以进行生成增强了。那具体怎么用那?

3.1 prompt/上下文拼接

最简单的方式,就是将检索结果直接拼接在prompt或者上线文中,直接给到大模型进行处理。

大多数的场景都可以这样处理,比如langchain的RAG链就是这种方式。

3.2 先拼接,再总结

为了减少input token的大小,可以先拼接,再总结,再发给大模型进行处理。

不过这种用法很少见,一般是把这个小模型直接做在模型层面,和大模型一起做成一个混合模型,并且会做大量的意图识别的训练。不理解为啥这样做,为了创收吗?

4. RAG场景

4.1 knowledge

RAG最常见的就是knowledge,也是我们通常理解上的RAG。

4.2 memory

memory理论上也是RAG,但是大家好像都有意将它们区分开。

4.3 意图识别

RAG在意图识别里非常非常好用。通常的做法是将检索结果作为few-shot辅助模型做cot。

4.4 ReAct

ReAct严格来说是CoT的一个优化范式,但是RAG也可以作为action用。

零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型典型应用场景

AI+教育:智能教学助手和自动评分系统使个性化教育成为可能。通过AI分析学生的学习数据,提供量身定制的学习方案,提高学习效果。
AI+医疗:智能诊断系统和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像,辅助医生进行早期诊断,同时根据患者数据制定个性化治疗方案。
AI+金融:智能投顾和风险管理系统帮助投资者做出更明智的决策,并实时监控金融市场,识别潜在风险。
AI+制造:智能制造和自动化工厂提高了生产效率和质量。通过AI技术,工厂可以实现设备预测性维护,减少停机时间。

AI+零售:智能推荐系统和库存管理优化了用户体验和运营成本。AI可以分析用户行为,提供个性化商品推荐,同时优化库存,减少浪费。

AI+交通:自动驾驶和智能交通管理提升了交通安全和效率。AI技术可以实现车辆自动驾驶,并优化交通信号控制,减少拥堵。


这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

四、LLM面试题

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值