InternLM2实战营第二期-搭建RAG智能助理
第三节课 《“茴香豆”:零代码搭建你的 RAG 智能助理》
官网地址:书生·浦语官网
课程录播视频链接地址:搭建个人RAG智能助理_bilibili
1.视频笔记
首先我们在实战之前需要了解几个问题,RAG是什么?RAG原理、RAG&Fine-tune、架构、向量数据库、评估和测试;“茴香豆”的介绍,特点,架构,构建步骤。最后才是实战演练。
1.1RAG是什么?
RAG(Retrieval Augmented Generation)技术,是一种结合信息检索和生成模型的技术,用于提升自然语言处理任务的性能,RAG模型通过在生成答案之前,从一个大型文档库中检索相关信息,从而提供更准确和信息丰富的回答,这种可以结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如生成幻觉、知识过时和缺乏透明、可追溯的推理过程等。提供更准确的回答、降低推理成本、实现外部记忆。
外部知识库:向量数据库、关系型数据库、搜索引擎、文档管理系统,noSQL、数据湖等可以储存知识的并且可以查询的系统。
应用:问答系统、文本生成、信息检索、图片描述等。
例如:InternLM2-chat-7b针对新增知识,未曾训练过的数据会出现一些胡编乱造的幻觉现象,传统解决办法,我们会收集新增知识的语料,通过微调、训练模型的方式来解决,然而这种方式会出现新的问题,如知识更新太快,语料知识库太大,训练成本高、语料很难收集整理等,RAG的出现很好的解决了这些问题。
1.2RAG的工作原理
经典的RAG由三个部分组成,索引、检索、生成。
索引(Indexing):将知识源(文档,网页)分割成chunk,编码成向量,并存储在向量数据库中。
检索(Retrieval):接受用户的问题后,将问题的编码成向量,并且在向量数据库中找到与之最相关的文档块(top-k chunks)。
生成(Generation):将检索的文档块与原始问题一起作为提示词(prompt)输入到LLM中,生成最终的回答。
1.2.1 什么是Chunk?
Chunk是一个较小的文本单元,它是从一个较大的文档中分割出来的。每个chunk通常包含一个或多个句子,或者是一个逻辑段落,具体取决于应用场景和需要处理的任务。Chunk的大小可以根据具体需求进行调整。
1.2.2 如何进行Chunking?
Chunking的方法可以根据具体的需求和文档的结构进行调整。以下是几种1.2.3 常见的chunking方法:
1.按句子分割:将文档按句子分割,每个chunk包含一个或多个句子。
2.按段落分割:将文档按段落分割,每个chunk包含一个或多个段落。
3.固定长度分割:将文档按固定的字符数或单词数进行分割。
4.语义分割:基于语义信息,将文档分割成具有完整语义的部分。
例如,我们有以下文本:
自然语言处理(NLP)是人工智能的一个分支,致力于使计算机能够理解和生成人类语言。NLP的应用包括机器翻译、情感分析、文本摘要等。近年来,随着深度学习技术的发展,NLP取得了显著的进步。
我们可以将其按句子进行chunking:
1.Chunk 1: 自然语言处理(NLP)是人工智能的一个分支,致力于使计算机能够理解和生成人类语言。
2.Chunk 2: NLP的应用包括机器翻译、情感分析、文本摘要等。
3.Chunk 3: 近年来,随着深度学习技术的发展,NLP取得了显著的进步。
通过将长文本分割成chunk,我们可以更有效地处理和分析文本数据。
向量数据库(Vector-DB)
向量数据库是RAG技术中存储外部知识库数据的地方,主要是实现将文本及相关数据通过预训练的模型转换成固定长度的向量,这些向量需要很好的捕捉到文本和知识的语义信息及内部联系,向量数据库是实现快速准确回答的基础,一般通过计算余弦相似度、点积运算的方式来判断相似度,检索的结果要根据相似度的得分来排序,把其中最相关的内容用于后续模型回答的生成。
RAG的工作流程:
RAG发展历程,是2020年由Meta的Lewis等人最早提出,Naive RAG(问答系统,信息检索)——Advanced RAG(摘要内容、内容推荐)—— Modular RAG(多模态任务、对话系统)等更高级的引用。
RAG常见优化方法:
1.提高向量数据库的质量:
嵌入优化(Embedding Optimization):考虑通过结合稀疏编码器和密集检索器,多任务的方式来增强嵌入性能
索引优化(Indexing Optimization):增强数据粒度优化索引结构,添加元数据对齐优化和混合检索策略来提高性能
2.针对查询过程进行优化:
查询优化(Query Optimization):查询扩展、转换,多查询。
上下文管理(Context Curation):重排,上下文选择/压缩来减少检索的冗余信息并提高大模型的处理效率,例如用小一点的语言模型来检测和溢出不重要的语言标记,或者训练信息提取器和信息压缩器。
迭代检索(Iterative Retrieval):根据出事查询和迄今为止的生成的文本进行重复搜索。
递归检索(Recursive Retrieval):迭代细化搜索查询,链式推理指导检索过程
自适应检索(Adaptive retrieval): Flare、Self-RAG等让大模型能够自主的使用LLMs主动决定检索的最佳时期和内容。
LLM微调(LLM Fine-tuning):检索微调,生成微调,双重微调。
1.3 RAG vs 微调(Fine-tuning)
1.4 茴香豆的介绍
茴香豆的工作流分为三个部分:预处理(Preprocess),拒答工作流(Rejection Pipeline),应答工作流(Response Pipeline),使用拒答工作流是为了方便更复杂的应用场景。
2.实战作业-Intern Studio上使用茴香豆搭建RAG助手
2.1部署环境
还是先进入Studio开发机(申请30%算力即可),进入开发机后直接从官方环境中复制IntenLM的基础环境并且命名为命名为 InternLM2_Huixiangdou
,在命令行模式下运行。
studio-conda -o internlm-base -t InternLM2_Huixiangdou
然后使用“conda env list”查看当前环境,展示结果如下:
然后激活刚才我们创建的名为InternLM2_Huixiangdou
的虚拟环境
conda activate InternLM2_Huixiangdou
环境激活后,我们可以发现我们当前的环境名已经进入,在命令行最左边显示如下(重启开发机需要重新激活环境即可):
2.2下载基础文件
复制茴香豆需要的模型文件,为了减少去Huggingface上下载,我们直接在开发机中去选择InternLM2-chat-7B作为基础模型。
# 创建模型文件夹
cd /root && mkdir models
# 复制BCE模型
ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 /root/models/bce-embedding-base_v1
ln -s /root/share/new_models/maidalun1020/bce-reranker-base_v1 /root/models/bce-reranker-base_v1
# 复制大模型参数(下面的模型,根据作业进度和任务进行**选择一个**就行)
ln -s /root/share/new_models/Shanghai_AI_Laborato