## 1. 检索增强生成
### 1.1 RAG基本介绍
#### 1.1.1 RAG是什么
开源的基座模型参数量不够大,本身拥有的能力有限。要完成复杂的知识密集型的任务,可以基于语言模型构建一个系统,通过访问外部知识源来做到。这样可以使生成的答案更可靠,有助于缓解“幻觉”问题。
RAG 会接受输入并检索出一组相关/支撑的文档,并给出文档的来源。这些文档作为上下文和输入的原始提示词组合,送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况,这非常有用,因为 LLM 的参数化知识是静态的,RAG 让语言模型不用重新训练就能够获取最新的信息,基于检索生成产生可靠的输出。
![RAG基本介绍](README.assets/RAG基本介绍.png)
#### 1.1.2 RAG发展历程
“RAG”概念由Lewis在2020年引入,其发展迅速,标志着研究旅程中的不同阶段。最初,这项研究旨在通过在预训练阶段为它们注入额外知识来增强语言模型。ChatGPT的推出引发了对利用大型模型进行深度上下文理解的高度兴趣,加速了RAG在推断阶段的发展。随着研究人员更深入地探索大型语言模型(LLMs)的能力,焦点转向提升他们的可控性和推理技巧以跟上日益增长的需求。GPT-4 的出现标志着一个重要里程碑,它革新了 RAG ,采取一种将其与微调技术相结合的新方法,并继续优化预训练策略。
![RAG发展时间轴](README.assets/RAG发展时间轴.png)
#### 1.1.3 RAG生态及挑战
RAG的应用已不再局限于问答系统,其影响力正在扩展到更多领域。现在,诸如推荐系统、信息提取和报告生成等各种任务开始从RAG技术的应用中受益。与此同时,RAG技术栈正在经历一次繁荣。除了众所周知的工具如Langchain和LlamaIndex外,市场上也出现了更多针对性强的RAG工具,例如:为满足更专注场景需求而定制化的;为进一步降低入门门槛而简化使用的;以及功能专业化、逐渐面向生产环境目标发展的。
RAG当前面临的挑战:
- 上下文长度:当检索到的内容过多并超出窗口限制时该怎么办?如果LLMs的上下文窗口不再受限,应如何改进RAG?
- 鲁棒性:如何处理检索到的错误内容?如何筛选和验证检索到的内容?如何增强模型对毒化和噪声的抵抗力?
- 与微调协同工作:如何同时利用RAG和FT的效果,它们应该如何协调、组织,是串行、交替还是端对端?
- 规模定律:RAG模型是否满足规模定律?会有什么情况下可能让RAG经历逆向规模定律现象呢?
- 生产环境应用:如何减少超大规模语料库的检索延迟? 如何确保被 LLMS 检索出来的内容不会泄露?
### 1.2 RAG技术实现
#### 1.2.1 RAG技术范式
在RAG的技术发展中,我们从技术范式的角度总结了其演变过程,主要分为以下几个阶段:
- 初级RAG:初级RAG主要包括三个基本步骤:1)索引——将文档语料库切分成更短的片段,并通过编码器建立向量索引。2)检索——根据问题和片段之间的相似性检索相关文档片段。3)生成——依赖于检索到的上下文来生成对问题的回答。
- 高级RAG:初级RAG在检索、生成和增强方面面临多重挑战。随后提出了高级RAG范式,涉及到预检索和后检索阶段额外处理。在检索之前,可以使用查询重写、路由以及扩展等方法来调整问题与文档片段之间语义差异。在检索之后,重新排列已获取到的文档语料库可以避免"迷失在中间"现象,或者可以过滤并压缩上下文以缩短窗口长度。
- 模块化RAG:随着RAG技术进一步发展和演变,模块化RAG的概念诞生了。结构上,它更自由灵活,引入更具体功能模块如查询搜索引擎以及多答案融合。技术层面上,它将信息查找与微调、强化学习等技术集成起来。在流程方面,RAG模块设计并协同工作形成各种不同类型RAG。
然而,模块化 RAG 并非突然出现,这三种范式存在继承与发展关系。高级RAG是模块化RAG的特殊情况,而初级RAG是高级RAG的特殊情况。
![RAG技术范式](README.assets/RAG技术范式.png)
#### 1.2.2 RAG基本流程
基本流程概述:用户输入问题——>问题重构(补全指代信息,保证多轮对话的能力)——>从检索库检索答案——用LLM总结答案
RAG 由两部分组成:
- 第一部分负责在知识库中,根据 query 检索出匹配的文档。
- 第二部分将 query 和文档拼接起来作为 QA 的 prompt,送入 seq2seq 模型,生成回复。
![RAG原理](README.assets/RAG原理.png)
#### 1.2.3 选择RAG还是微调
除了RAG之外,LLMs的主要优化策略还包括提示工程和微调(FT)。每种都有其独特的特点。根据它们对外部知识的依赖性以及对模型调整的需求,每种都有适合的应用场景。
![RAG与FT的比较](README.assets/RAG与FT的比较.jpg)
RAG就像是给模型提供了一本定制信息检索的教科书,非常适合特定的查询。另一方面,FT就像一个学生随着时间内化知识,更适合模仿特定的结构、风格或格式。通过增强基础模型的知识、调整输出和教授复杂指令,FT可以提高模型的性能和效率。然而,它并不擅长整合新知识或快速迭代新用例。RAG和FT并不互斥,它们相辅相成,并且同时使用可能会产生最好的结果。
![RAG与FT的关系](README.assets/RAG与FT的关系.png)
#### 1.2.4 如何评价RAG的效果
对RAG的评估方法多种多样,主要包括三个质量分数:上下文相关性、答案准确性和答案相关性。此外,评估还涉及四项关键能力:抗噪声能力、拒绝能力、信息整合以及反事实鲁棒性。这些评价维度将传统的定量指标与针对RAG特点的专门评估标准相结合,尽管这些标准尚未得到标准化。
在评价框架方面,有RGB和RECALL等基准测试,以及像RAGAS、ARES和TruLens等自动化评价工具,它们帮助全面衡量RAG模型的表现。
![如何评价RAG的效果](README.assets/如何评价RAG的效果.png)
### 1.3 常见的信息检索算法
稠密检索(Dense Retrieval, DR)一般指的是将documents编码为稠密向量(Dense Vector),这个如今一般都通过预训练模型的encoder进行完成,例如BERT或者T5等(GPT这种decoder架构的也可以做到)。随后基于向量数据库(如FAISS)等进行类似于K近邻的搜索方法,来查找与查询内容接近的高维文档向量。【需要的空间大,查询速度快】
稀疏检索(Sparse Retrieval, SR)将文档投射到一个稀疏向量上,顾名思义,这个稀疏向量通常与文档的语言词汇一致,例如你的一篇文章,对每个词进行向量化,随后在词这个维度上进行执行你的检索策略。当然,这个传统的BM25或者TF-IDF也可以做到,但随着Transformer接管了这一领域,你会看到像 SPLADE 这样的方法,使用神经模型来推断与文档相关的词汇,即使这些词汇并不存在。这种方法的好处是,你可以离线处理文章中的词等细粒度的向量表示,从而大大加速检索的效率。【需要的空间小,查询速度慢】
#### 1.3.1 BM25检索
在信息检索领域,BM25算法被广泛认为是一种经典且有效的排名函数,用于估计文档与用户查询之间的相关性。BM25(Best Matching 25)是基于Okapi TF-IDF算法的改进版本,旨在解决一些Okapi算法存在的问题。BM25的核心思想是利用词频(TF)和逆文档频率(IDF)来衡量文档与查询之间的相关性,同时引入文档长度信息来进一步调整相关性的计算。
- 词频(TF):词频�
没有合适的资源?快使用搜索试试~ 我知道了~
基于BM25、BGE检索算法的检索增强生成RAG示例,支持OpenAI风格的大模型服务.zip
共91个文件
py:72个
png:11个
docx:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 11 浏览量
2024-05-17
17:41:54
上传
评论
收藏 4.02MB ZIP 举报
温馨提示
基于BM25、BGE检索算法的检索增强生成RAG示例,支持OpenAI风格的大模型服务.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于BM25、BGE检索算法的检索增强生成RAG示例,支持OpenAI风格的大模型服务.zip (91个子文件)
rag-omni-master
data
original_data
国务院关于加强地方政府性债务管理的意见.docx 22KB
中共中央办公厅国务院办公厅印发《关于做好地方政府专项债券发行及项目配套融资工作的通知》.docx 21KB
preprocess_data
国务院关于加强地方政府性债务管理的意见.json 13KB
中共中央办公厅国务院办公厅印发《关于做好地方政府专项债券发行及项目配套融资工作的通知》.json 17KB
convert_data
pdf_to_docx.py 845B
batch_docx_to_json.py 877B
docx_to_json.py 1KB
llm
llm_server.py 482B
test
llm_server_test.py 1KB
llm_server_stress_test.py 2KB
models
download_qwen_model.py 491B
download_baichuan_model.py 511B
llmtuner
data
utils.py 3KB
__init__.py 377B
loader.py 7KB
preprocess.py 14KB
aligner.py 6KB
parser.py 5KB
template.py 32KB
collator.py 2KB
formatter.py 6KB
chat
__init__.py 110B
base_engine.py 2KB
chat_model.py 5KB
vllm_engine.py 8KB
hf_engine.py 11KB
api
__init__.py 0B
protocol.py 3KB
app.py 3KB
chat.py 7KB
common.py 580B
extras
__init__.py 0B
logging.py 2KB
misc.py 7KB
packages.py 2KB
callbacks.py 8KB
constants.py 41KB
ploting.py 2KB
model
__init__.py 294B
loader.py 6KB
utils
__init__.py 0B
embedding.py 2KB
mod.py 832B
moe.py 2KB
misc.py 3KB
unsloth.py 3KB
checkpointing.py 4KB
quantization.py 6KB
visual.py 1KB
rope.py 2KB
attention.py 2KB
longlora.py 14KB
valuehead.py 2KB
patcher.py 5KB
adapter.py 9KB
hparams
__init__.py 494B
model_args.py 8KB
generating_args.py 2KB
parser.py 15KB
finetuning_args.py 12KB
evaluation_args.py 1KB
data_args.py 4KB
README.assets
用于RAG的结构化数据.png 380KB
RAG基本介绍.png 295KB
RAG发展时间轴.png 432KB
RAG技术范式.png 196KB
RAG与FT的比较.jpg 513KB
BGE向量检索与其他检索的对比.png 88KB
如何评价RAG的效果.png 112KB
BM25算法公式解析.png 152KB
BM25检索算法的返回值.png 241KB
RAG与FT的关系.png 174KB
大模型服务压力测试效果.png 829KB
RAG原理.png 741KB
rag
response.py 1KB
rag_server.py 4KB
code.py 257B
log.py 504B
test
rag_test.py 366B
rag_solve.py 4KB
.gitignore 61B
retrieval
response.py 1KB
bm25_retrieval
bm25.py 5KB
stop_words.txt 9KB
code.py 257B
retrieval_server.py 3KB
log.py 510B
test
retrieval_test.py 342B
bge_retrieval
download_bge_model.py 855B
bge.py 3KB
README.md 55KB
共 91 条
- 1
资源评论
GZM888888
- 粉丝: 185
- 资源: 2957
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功