输入“/”快速插入内容

一文讲透RAG在垂直领域大模型的应用

2024年8月27日修改
作者:王大锤
一. 背景
检索增强生成 (Retrieval-Augmented Generation, RAG), 是一个为大模型提供外部知识源的策略,使得大模型具备从指定的知识库中进行检索,并结合上下文信息,生成相对高质量的回复内容,减少模型幻觉问题。
示例场景 :
参考我们做的 智能座舱 中的一个示例场景,比如我们希望大模型能回答关于车机系统的相关问题。大模型在没有见过我们公司《车机 使用手册 》的情况下(事实上,企业私有数据一般不会被大模型的参数所覆盖),几乎回答不正确,可能会出现以下情况:
但是通过RAG的能力,能够让大模型结合企业私有数据,完成特定领域的知识问答,实现对以下业务目标的支持:
二. 功能定义
2.1 常用方法
2020年 lewis 等人,针对知识密集型的NLP任务,提出了一种相对灵活的技术,成为检索增强生成(RAG)。研究人员将 生成模型 与检索器模块相结合,以提供外部知识源的附加信息,并且这些信息可以高效的实现更新和维护。
RAG在垂直大模型问答场景下,类似于一场开卷考试,如果将大模型比喻为一个学生,在开卷考试的场景下,学生是可以携带笔记和学习资料,用来查找相关信息来回答问题。这种考试的重点是考察 检索到相关信息后的推理能力,而不是检索特定信息的能力。
2.2 RAG流程
RAG的整体流程可以参考以下 流程图 :
知识库构建:
参考上述流程图,知识库构建主要包括数据加载,文本切片和内容向量化三个部分,其中核心处理模块是文本切片。目前主要有2类切分方法,一种是基于策略规则,一种是基于算法模型。同时,文本切分的策略也和 向量模型 息息相关。如: BERT模型的 max_seq=512 , 但实际上切分的维度并不一定按512tokens去进行切分。
基于策略规则的切分方法,可以参考:
1.截断 截取前510个或后510个或前128+后382;
2.分段 分段k=L/510,然后各段可以求平均、求max
3. 滑动窗口 (Sliding window),即把文档分成有重叠的若干段,然后每一段都当作独立的文档送入BERT进行处理。最后再对于这些独立文档得到的结果进行整合;
基于算法模型的切分方法: 主要是使用类似BERT结构的语义段落分割模型,能够较好的对段落进行切割,并获取尽量完整的上下文语义。
问题: 一般需要结合具体的数据集进行适配和微调,缺乏低成本高质量的解决方案,基于模型算法的切分方法上手难度较高。
内容向量化: 将切片后的文本信息转成响应的语义向量。
这里可以利用langchain的Weaviate矢量数据库,或者可以自己搭建Milvus数据库。当然如果你想要做自己的 text2vec模型 ,可以参考以下内容:
目前主流的text2vec模型主要还是基于BERT基座模型进行fine-turning的,但是BERT的最大长度仅支持到512;如果切片的长度超过512,性能会急剧下降。目前主流的text2vec模型, bge 和m3c等语义模型支持的长度均为512。从使用效果来看,可以优先选择 bge-large ,在有数据集的情况下,参考官方文档,对bge进行fine-turning。
问题: 长文本的 召回率 和相关性相对一般。
知识检索召回: