当前位置: 首页 > web >正文

模型的RAG

一 RAG

(一)什么是RAG

当岳不群相当武林的盟主时候,你的给他一个葵花宝典(秘籍==RAG)

(二)RAG的原理

1 建立索引:

首先要清洗和提取原始数据,将 PDF、Docx等不同格式的文件解析为纯文本数据

然后将文本数据分割成更小的片段(chunk);

最后将这些片段经过嵌入模型转换成向量数据(此过程叫做embedding)

并将原始语料块和嵌入向量以键值对形式存储到向量数据库中,以便进行后续快速且频繁的搜索。

2 检索生成:

系统会获取到用户输入,随后计算出用户的问题与向量数据库中的文档块之间的相似度,选择相似度最高的K个文档块(K值可以自己设置)作为回答当前问题的知识。知识与问题会合并到提示词模板中提交给大模型,大模型给出回复。这就是检索生成的过程。

(三)如何持续改进RAG应用效果

1 问题比较抽象或者概念比较模糊**,导致大模型没有准确理解使用者的问题

问题精准性:

提问答复
精准性的问题如何成为武林盟主葵花宝典就能成为武林盟主
非精准性问题盟主不明确什么问题
2 知识库没有检索到问题的答案,

查无此人,库中没有你要找的葵花宝典

3 缺少对答案做兜底验证的机制

库中结果未有验证,谁也没练过葵花宝典

(四)索引准确率

1 构建知识库的时候,我们首先需要正确的从文档中提取有效语料
2 优化chunk切分模式

  1. 利用领域知识:针对特定领域的文档,利用领域专有知识进行更精准的切分。例如,在法律文档中识别段落编号、条款作为切分依据。
  2. 基于固定大小切分:比如默认采用128个词或512个词切分为一个chunk,可以快速实现文本分块。缺点是忽略了语义和上下文完整性。
  3. 上下文感知:在切分时考虑前后文关系,避免信息断裂。可以通过保持特定句对或短语相邻,或使用更复杂的算法识别并保留语义完整性。最简单的做法是切分时保留前一句和后一句话。你也可以使用自然语言处理技术识别语义单元,如通过句子相似度计算、主题模型(如LDA)或BERT嵌入聚类来切分文本,确保每个chunk内部语义连贯,减少跨chunk信息依赖。通义实验室提供了一种文本切割模型,输入长文本即可得到切割好的文本块,详情可参考:中文文本分割模型。
3 句子滑动窗口检索

这个策略是通过设置window_size(窗口大小)来调整提取句子的数量,当用户的问题匹配到一个chunk语料块时,通过窗函数提取目标语料块的上下文,而不仅仅是语料块本身,这样来获得更完整的语料上下文信息,提升RAG生成质量。

4 自动合并检索

将文档分块,建成一棵语料块的树

5 选择更适合业务的Embedding模型(嵌入式)

chunk语料块由原来的文本内容转换为机器可以用于比对计算的一组数字,即变为Embedding向量

6 更适合业务的ReRank模型(重排序)模型
7 Raptor 用聚类为文档块建立索引

做法是采用无监督聚类来生成文档索引。这就像通过文档的内容为文档自动建立目录的过程

(五) 让问题更好理解

1 完善用户问题
  • 一种理想的通过多轮对话补全需求的方案。该设想是通过大模型多次主动与用户沟通,不断收集信息,完善对用户真实意图的理解,补全执行用户需求所需的各项参数

用大模型转述回答,再进行RAG回答,类似指示词思路,让大模型转述用户的问题

2 让用户补全信息辅助业务调用

有一些应用场景需要大量的参数支撑,(比如订火车票需要起点、终点、时间、座位等级、座位偏好等等),我们还可以进一步完善上面的思路,一次性告诉用户系统需要什么信息,让用户来补全

3 Multi-Query 多路召回

给客户几个问题的选择

用户问“烤鸭店在哪里?”,大模型会生成:
4 假设问题答案方法

推荐一家烤鸭店”,第一时间想到了“全聚德烤鸭店不错,我前两天刚吃过!

(六)改造信息抽取途径

  1. 向量相似度,我们用检索信息得到的向量相似度分来判断。判断每个语料块与用户问题的相似度评分,是否高过某个阈值,如果搜索到的语料块与用户问题的相似度都比较低,就代表知识库中的信息与用户问题不太相关;
  2. 直接问大模型,我们可以先将知识库检索到的信息交给大模型,让大模型自主判断,这些资料是否能回答用户的问题。

1 回答前反复思考
  • 相关性:我获取的这些材料和问题相关吗?
  • 无幻觉:我的答案是不是按照材料写的来讲,还是我自己编造的?
  • 已解答:我的答案是不是解答了问题?

(七)从多种数据源中获取资料**

(八)从知识图谱中获取数据

Neo4j是一款图数据库引擎,可以为我们提供知识图谱构建和计算服务

http://www.xdnf.cn/news/756.html

相关文章:

  • string类(详解)
  • Semaphore的核心机制
  • Java创建对象的方式
  • 30元一公斤的樱桃甜不甜
  • 顺序表和链表的区别(C语言)
  • win11离线安装donet3.5
  • 分布类相关的可视化图像
  • 1222222
  • 类与对象(中)(详解)
  • 云梦数据平台
  • C++move的作用和原理
  • 2-6-1-1 QNX编程入门之进程和线程(八)
  • 手撕LLM(五):从源码出发,探索多模态VL模型的推理全流程
  • (二)mac中Grafana监控Linux上的MySQL(Mysqld_exporter)
  • SQL语句解析
  • 电解电容失效分析过程、失效分析报告
  • 软件架构师的“天、人、术、势“:构建未来系统的哲学框架
  • 立体匹配模型RAFT-Stereo的onnx导出与trt使用指南
  • 实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包
  • 数据通信学习笔记之OSPF其他内容2
  • 读书笔记--MySQL索引
  • MQTT协议容错协议容错机制设计与实现
  • 京东百亿补贴杀入外卖市场:一场关乎即时零售未来的攻防战
  • 5G网络切片:精准分配资源,提升网络效率的关键技术
  • 测试环境凌晨2点负载偏高, 2点到7点 IO 读偏高问题定位
  • ASP.NET Core 最小 API:极简开发,高效构建(上)
  • DEA-Net:基于细节增强卷积和内容引导注意力的单图像去雾
  • 51c大模型~合集119
  • SpringBoot入门实战(第一篇:环境准备和项目初始化)
  • C语言求执行次数