随着大语言模型(LLM)在自然语言处理领域的广泛应用,许多问题也随之暴露出来。AG(检索增强生成)技术正是为了解决以下几方面的不足而诞生的:
- 制造虚假信息:LLM有时会一本正经地胡说八道,给出看似合理但实际上错误的答案。
- 知识范围有限:模型只能依赖于训练时的数据,无法处理最新信息或超出训练范围的内容。
为了弥补这些不足,RAG(检索增强生成)技术应运而生。RAG通过利用外部数据源辅助文本生成,结合了检索和生成两种方法,从外部知识库中获取信息,以增强模型的生成能力。
RAG 的工作流程
RAG的工作过程大致可以分为以下几个阶段:
- 数据收集 → 数据规整 → 数据分片 → 数据向量化 → 数据存储(向量库) → 输入增强 → 数据检索 → 数据重排 → 文本生成 → 结果集评估。
对这些阶段进行优化是提高RAG准确率的关键。下面,我们对各个阶段进行逐一解析:
1. 数据收集阶段
从PDF、Word、Markdown等文件中提取文本,将多种文件格式转换为统一的纯文本格式。数据收集不仅是文档汇总,更重要的是对文档进行分类。同类文档构成一个知识库。例如,将行业文档、证券期货、银行、大宗商品交易等文档与软件开发文档区分开来。
2. 数据规整
对文档进行清理和优化,以整理出高质量的内容,包括:
- 文件命名规范:文件名使用词语或短语命名,与内容相关,避免无意义的数字、符号或缩写。
- 文件内容规整:将文档中的图片替换为文本描述,删除多余格式字符,合并段落(人工按语义处理,自动按长度处理)。
- 剔除无效文档。
3. 数据分片
支持按页码、固定长度、指定分隔符对数据进行拆分。每个数据片段需标注来源文档和章节,并进行摘要,以便后续使用。
注意:文本块重叠并没有太大效果,可根据实际情况灵活应用。
4. 数据向量化
数据向量化是非常关键的一步,选择合适的embedding模型至关重要。常见的embedding模型框架包括:
- 北京智源人工智能研究院的FlagEmbedding:提供微调、密集检索、重排等一系列模型。
- 网易有道的bcembedding:专为检索增强生成式应用(RAG)设计的模型框架,包含嵌入模型和重排模型。
- 哈工大讯飞联合实验室的macBERT:优化中文文本处理,适用于文本分类、命名实体识别、问答系统等。
- 其他模型:可在Hugging Face上选择排名靠前的中文embedding模型,并根据需要进行训练或微调。
数据动态变化时,可每月进行一次微调和评估。
5. 数据存储
将向量数据写入Milvus向量库,同时将规整后的文档内容写入Elasticsearch(ES)。为了提升中文搜索的准确率,可安装中文分词器IK,并整理公司常用词作为禁止分词的清单。可选项还包括Chroma用于文档问答。
6. 输入增强
- 查询转换:使用Query2doc和HyDE生成伪文档,再利用其向量表示进行检索,提高准确性。
- 数据增强:对查询进行润色,消除歧义,增强用户提问效果。
7. 数据检索
数据检索分为两种:
- 稀疏检索器(BM25):用于粗召回。
- 密集检索器:利用预训练的神经网络模型(如BERT)将查询转换为向量,使用余弦相似度选出最匹配的文档。
8. 数据重排
利用双路数据进行重排:
- 向量库搜索:将用户问题向量化后搜索,返回排名前5的数据。对排名前3的数据获取前后各一个段落的内容,合并后返回,以提高排名靠前数据的权重。
- ES搜索:通过IK分词器进行搜索,返回前5条数据。合并两路数据,共10条,进行重排。重排时需根据模型Token长度和数据长度来决定返回数据条数,避免超长。
若文本过长,可进行信息压缩和摘要处理。
9. 文本生成
将用户的问题和重排后的结果提交给大模型,设定好system Prompt。可参考OpenAI官网的提示语技巧,并调整温度等相关参数。
10. 结果集评估
评估时可简单选择知识库中的10个问题作为测试集,对召回和重排后的结果进行打分。可以使用RAG评估框架(RAGAS)来评估性能,关注以下指标:
- 忠实度:答案与上下文的一致性。
- 答案的相关性:生成的答案是否针对实际问题。
- 上下文的相关性:检索到的上下文是否专注、包含尽量少的无关信息。
RAG 的前沿研究
第一篇RAG论文由Meta在2020年提出,随后,各大机构纷纷投入研究。以下为一些引起讨论的RAG研究:
- Self-RAG(华盛顿大学,2023年):自我反思检索生成。该方法会判断是否需要检索,并对检索到的文档进行标记判断,提高生成效果。
- 谷歌的桥接模型:在大语言模型与检索器之间搭建桥接模型,优化生成效果。
- 东北大学的Active-RAG:引入积极学习机制,主动学习检索到的内容,无需微调。
- 中科大的插拔式自我修正:引入轻量级的检索评估器,实时修正检索到的内容。