RAG理解

为什么采用RAG?

模型缺陷

1)幻觉   是因为它没有学过问题的知识 会产生幻觉  可能会瞎答 或者回答不知道   
2)精度(效果)
	如何解决上面的问题呢?
	1.将公司里面的数据给模型学习微调(SFT 高质量数据打标签),成本较大(人工、合成、蒸馏、RLHF),并且需要多次学习调试(即使一模一样的数据给相同的模型学习 得到的结果也是存在差异的 )
	2.就是通过 RAG  不需要对我们的基础模型进行更改

那么什么时间采用SFT 微调 、什么时候采用 RAG 检索增强?

1.小公司数据不多情况下,考虑成本,采用 RAG  基于公司里面的一些文档进行问题回答
2.拥有海量数据,且业务数据质量较高,硬件成本可以负担时采用微调

RAG检索增强是怎么使用的呢?

当用户一个问题提问过来时 首先通过RAG进行检索到相似度最高的文档内容 然后将数据和 prompt 组合一起发给LLM大模型 大模型进行总结归纳

在哪里检索相似度最高的文档内容 ?

在向量数据库

向量数据库数据怎么来的呢?

通过Embedding model 将我们的数据转为向量存储到向量数据库
向量模型是有维度的 比如我们现在用的最多的 text embedding ada002(openAi开发的)他是1536位的 ,当一个数据转为向量化数据时,就会生成1536维浮点数向量 即把输入的文本等数据映射为一个 1536 维的向量空间中的点 这个小数代表的就是特征提取 ,维度越大 ,特征提取的越详细

为什么要转向量数据呢?

就是因为相似度检索 相似度检索通过通过维浮点数向量欧式距离的计算 或者 余璇距离的计算 可以想象有个x轴和y轴 在xy之间有两个点,这两个点就是两个向量化后的数据 两个数据之间欧式距离越近 说明两条数据相似度越高, 向量是什么呢? 你就可以把他理解成一个数组 数组中有n个小数

下图来自KEVIN老师讲的RAG项目

在这里插入图片描述

如果 RAG 后精度感觉还不够怎么办呢?

还可以采用知识图谱进行更准确化
知识图谱需要:信息抽取、关系抽取、事件抽取、关键词抽取,分配,分类,指代消解,阅读理解等更多繁琐的工作来完成

RAG

RAG现在发展出三种类型:Naive RAG(朴素RAG)、Advanced RAG(高级RAG)和Modular RAG(模块化RAG)RAG在成本效益上超过了原生LLM,但也表现出了几个局限性,这也更大家一个印象:入门容易,做好难。Advanced RAGModular RAG的发展是为了解决Naive RAG中的缺陷。Naive RAG遵循一个传统的流程,包括索引、检索和生成,它也被称为“检索-阅读”框架,将查询(query)与文档的检索结合起来,通过大语言模型 (LLM) 生成答案。

将数据先通过嵌入(embedding)算法转变为向量数据,然后存储在Chroma这种向量数据库中,当用户在大模型输入问题后,将问题本身也embedding,转化为向量,在向量数据库中查找与之最匹配的相关知识,组成大模型的上下文,将其输入给大模型,最终返回大模型处理后的文本给用户,这种方式不仅降低大模型的计算量,提高响应速度,也降低成本,并避免了大模型的tokens限制,是一种简单高效的处理手段。

Naive RAG

Naive RAG 的优势

简单高效
架构设计简单,便于实现,特别适合初学者和小型应用场景。

模块化设计
将检索和生成分离,便于针对每一模块优化。

低延迟
因为无需复杂的后续排序或多级推理,响应速度快。

Naive RAG 的局限性

结果质量不稳定
检索的文档片段可能不完全相关,导致生成结果准确性受限。

缺乏上下文整合
无法有效地对不同文档片段之间的关系建模,例如相互矛盾或补充的信息。

易受查询噪声影响
用户查询如果不明确,可能导致检索到无关内容。

入门demo:
1.langchain +ollama +chroma+embedding模型实现RAG入门级Demo(python版)
2.RAGFlow安装+本地知识库+踩坑记录

### 关于RAG的实际应用案例 #### 文本摘要生成 通过使用RAG架构,可以显著提高文本摘要的质量。具体来说,在处理新闻文章或其他长篇文档时,检索模块会从大量已有的高质量摘要中找到相似的文章及其对应的优质摘要作为参考材料[^1]。随后,生成器依据这些参考资料创建新的摘要。 ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration tokenizer = RagTokenizer.from_pretrained("facebook/rag-sequence-nq") retriever = RagRetriever.from_pretrained( "facebook/dpr-question_encoder-single-nq-base", index_name="exact", use_dummy_dataset=True, ) model = RagSequenceForGeneration.from_pretrained("facebook/rag-sequence-nq", retriever=retriever) context = ["Example context sentence."] * 8 # Replace with actual sentences. question = "What is the main idea of this document?" input_dict = tokenizer([question], truncation=True, padding=True, return_tensors='pt') generated_ids = model.generate(input_ids=input_dict['input_ids'], context_input_ids=tokenizer(context, return_tensors='pt')['input_ids']) print(tokenizer.batch_decode(generated_ids)) ``` 此代码片段展示了如何利用预训练好的`facebook/rag-sequence-nq`模型来进行问答式的文本摘要生成任务[^2]。 #### 对话系统中的应用 在对话系统里集成RAG技术能有效改善聊天机器人对于事实类查询的回答准确性。当用户提问涉及特定领域知识时,比如医学咨询或是技术支持问题解答,RAG可以通过搜索引擎获取最新的专业知识并据此给出更精准的回复。 #### 图像描述生成(iRAG变体的应用场景之一) iRAG扩展了传统的RAG概念至多媒体数据处理上。例如,在给定一张图片的情况下,该方法可以从互联网收集类似的视觉样本连同其文字说明一同送入神经网络内进行联合学习;最终使得AI具备更强的理解力去描绘从未见过的新颖景象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值