初学者入门大模型:什么是RAG?

写在前面

在讲RAG之前,我们先说一个大模型的普遍现象,大家应该都用过大模型了,比如 ChatGPT、DeepSeek、豆包、文心一言等等…

那么大家在用的时候其实会发现,有时候大模型会乱回答,一本正经地胡说八道,语义不同,前言不搭后语。

**举个例子:你问大模型,美国成立时间。**大模型可能会回答:美国成立在1997年,距离现在已有400年的历史…

这种现象叫hallucination,幻觉。大模型本质的就是不断的预测下一个生成的文字应该是什么,而选择预测概率中最大的一个。

在这里插入图片描述
每个词预测的结果

产生幻觉的原因有很多,比如训练大模型本身的数据问题、过拟合、微调引起的知识丧失、推理机制的不完善等等

而我们要说的RAG就是为了降低大模型出现幻觉的概率,下面开始我们今天的主题。

RAG简介

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与文本生成的技术,旨在提升大语言模型在回答专业问题时的准确性和可靠性。在这里插入图片描述

核心原理‌‌为 检索 + 生成 两阶段流程 :

  • 检索阶段‌:将用户的问题转化为向量,从外部知识库或私有文档中(向量数据库)快速检索相关片段。
  • 生成阶段‌:将检索到的信息输入大模型,生成结合上下文的具体回答‌。

这样说可能比较生硬,打个比方:LLM在考试的时候面对陌生的领域,只会写一个解字(因为LLM也只是局限于特定的数据集进行训练),然后就准备放飞自我了,而此时RAG给了亿些提示,让LLM懂了开始往这个提示的方向做,最终考试的正确率从60%到了90%!

在这里插入图片描述
LLM+RAG

简单来说就是大家的开卷考试!!那么问题来了,LLM开卷考试的话,这个卷是啥呢?这里就涉及到向量数据库了。

为什么是向量数据库?传统数据库为啥不行?

向量数据库

向量数据库是通过存储文本的向量化表示,支持基于语义相似度的快速检索解决了传统关键词匹配无法捕捉上下文关联的问题‌。

如果使用传统数据库(如MySQL)结合关键词检索,但无法实现语义理解,可能导致漏检或误检‌。 举个例子,同一个query进行搜索:“2024年腾讯的技术创新”。

  • 向量数据库能匹配到语义相近但未包含关键词“腾讯”的文档(如“WXG的研发进展”)
  • 传统数据库只能匹配到包含关键词的

在这里插入图片描述
那向量数据库是怎么知道语义相似的?

我们先明白向量数据库存储的是向量,不是文本,文本是大家能看懂的文字,而向量是一串浮点型数据。那么当所有的文本都成了浮点型数据后,计算机可以通过数学公式(比如余弦相似度),量化语义相似性。在这里插入图片描述
传统数据库用原始文本检索,则无法处理同义词、多义词、语境差异等语义问题(例如“苹果”可能指水果或公司)‌,所以很多传统搜索都会进行query改写这一步,来让搜索的输入query更精确。当然不仅仅是文本,万物皆可embedding,图片、videos、音频等等…

RAG 过程

在这里插入图片描述
RAG过程

回到最开头的例子:

  1. 当用户对大模型提问,“美国的成立时间”
  2. 此时会通过embeding模型将文本转成向量
  3. 再到向量数据库中搜索语言相近的内容
  4. 向量数据库会给出一个TopK,例如 Top100
  5. 接着在进行过重排序模型,再筛选出Top N,例如 Top10
  6. 将搜索到的内容和用户所搜索的query词"美国的成立时间"整个成一个prompt一起给LLM
  7. LLM基于这些输入内容和自身内容进行输出。

这样就可以有效的控制大模型输出尽可能的相关并且语义相通的内容

那么向量数据库如何构造呢?在这里插入图片描述
其实很简单:

  1. 将文章进行分片成多组chunk,也就是大量文本分解为较小段
  2. 进行向量化
  3. 存到向量数据库

那这里为什么要进行chunking呢?

chunking是为了把相同语义的 token 聚集在一起,不同语义的 token 互相分开,在长文档中各个片段的语义可能存在较大差异,如果将整个文档作为一个整体进行知识检索,会导致语义杂揉,影响检索效果。 将长文档切分成多个小块,可以使得每个小块内部表意一致,块之间表意存在多样性,从而更充分地发挥知识检索的作用。

所以如果我们的块太小会导致错过真正的相关内容,太大则可能导致搜索结果不准确

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

如果你真的想学习大模型,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

大模型全套学习资料领取

这里我整理了一份AI大模型入门到进阶全套学习包,包含学习路线+实战案例+视频+书籍PDF+面试题+DeepSeek部署包和技巧,需要的小伙伴文在下方免费领取哦,真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

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

二、AI大模型实战案例

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

在这里插入图片描述
在这里插入图片描述

三、视频和书籍PDF合集

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

在这里插入图片描述
在这里插入图片描述

四、LLM面试题

在这里插入图片描述
在这里插入图片描述

五、AI产品经理面试题

在这里插入图片描述

六、deepseek部署包+技巧大全

在这里插入图片描述

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

### 构建RAG系统初学者指南 #### 定义RAG系统 检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合了密集向量索引和自然语言处理模型的技术,用于提高文本生成的质量和准确性。通过利用外部知识库中的信息来补充训练数据集的信息不足之处。 #### 准备工作环境 为了从头开始创建一个简单的RAG系统,首先需要安装必要的软件包并设置开发环境。对于Python用户来说,可以依赖Hugging Face Transformers库以及Faiss或其他相似的矢量化搜索引擎来进行实现[^2]。 ```bash pip install transformers faiss-cpu datasets torch ``` #### 数据收集与预处理 构建有效的RAG应用之前,获取高质量的数据源至关重要。这些资源可能包括但不限于网页抓取的内容、百科全书条目或是特定领域内的文档集合。接着要对原始素材执行清洗操作去除噪声,并将其转换成适合后续使用的格式。 #### 创建语料库索引 一旦拥有了经过清理后的文本片段列表,则可以通过编码器将它们映射到高维空间里的稠密表示形式——即所谓的嵌入(embeddings),之后再把这些嵌入存储在一个高效的近似最近邻(Near Neighbor Search,NNS)结构里以便快速查找最相关的项。 ```python from sentence_transformers import SentenceTransformer import numpy as np import faiss # 使用预训练的语言模型作为编码器 encoder = SentenceTransformer('all-MiniLM-L6-v2') # 假设有如下一些句子组成的语料库 corpus_sentences = ["Example document one.", "Another example text."] # 获取每篇文档对应的embedding embeddings = encoder.encode(corpus_sentences) # 初始化FAISS索引并向其中添加所有的embeddings dimensionality = embeddings.shape[1] index = faiss.IndexFlatL2(dimensionality) index.add(np.array([emb.tolist() for emb in embeddings])) ``` #### 集成查询接口 最后一步就是设计能够接收输入问题并将之转化为潜在匹配答案的过程。这通常涉及到先计算询问字符串相对于整个数据库内各个项目的相似度得分;随后挑选出排名靠前的结果返回给调用方。 ```python def retrieve_top_k(query: str, k=5): query_embedding = encoder.encode([query]) distances, indices = index.search( np.array(query_embedding).astype("float32"), k=k ) top_results = [(distances[0][i], corpus_sentences[idx]) for i, idx in enumerate(indices[0])] return sorted(top_results, key=lambda x:x[0]) print(retrieve_top_k("Find me something interesting")) ``` 以上代码展示了如何基于已有的工具链搭建起基本框架,在此基础上还可以进一步探索优化策略比如微调编码组件或者引入更复杂的评分机制等方法提升性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值