RAG 系统中数据量对问答效果的影响及优化方案
当我们构建一个知识库问答应用的时候,总是希望知识库里面灌的数据越多,问答的效果越好。事实真是如此吗?本文将深入分析数据量如何影响 RAG(Retrieval-Augmented Generation)系统的问答效果,并讨论如何优化这一系统以适应不断增长的海量数据。
引言
在人工智能问答系统的发展中,RAG 技术以其独特的检索增强生成方式,为减少大模型幻觉开辟了新的天地。然而,在实际落地过程中有一个很大的疑问:RAG 系统,数据越多效果越好吗?
大型语言模型(LLMs)已经展现出了强大的能力,但在实际应用中仍面临很多挑战,如模型幻觉、知识更新缓慢以及答案缺乏可信度等。LLM 虽然是在非常庞大的数据集上训练的,但并不是在您的私有数据上训练的。检索增强生成(RAG)通过将您的数据链接到 LLMs 来解决这个问题。
RAG 是一种将知识检索与生成模型相结合的技术,可以提高问答系统的准确性和相关性。它通过从外部知识源中动态检索信息,并将检索到的数据作为参考来组织答案,从而能有效缓解 LLM 中存在的幻觉问题。
RAG 系统架构
RAG 的工作流程主要包含三个核心模块:
1. 索引(Indexing)
文本索引的构建包括以下步骤:文档解析、文本分块、Embedding 向量化和创建索引。
- 文档解析:先将不同格式的原始文件解析转换为纯文本。
- 文本分块:把文本切分成较小的文本块(Chunks)。
- Embedding 向量化:通过 Embedding 模型为每一个文本块生成一个向量表示,用于计算文本向量和问题向量之间的相似度。
- 创建索引:将原始文本块和 Embedding 向量以键值对的形式存储,以便将来进行快速和频繁的搜索。
2. 检索(Retrieval)
使用 Embedding 模型将用户输入问题转换为向量,计算问题的 Embedding 向量和语料库中文本块 Embedding 向量之间的相似度,选择相似度最高的前 K 个文档块作为当前问题的增强上下文信息。
3. 生成(Generation)
将检索得到的前 K 个文本块和用户问题一起送进大模型,让大模型基于给定的文本块来回答用户的问题。
数据量对于问答效果的影响
从宏观层面来看,RAG 包含两个核心的要素:数据和系统。RAG 的应用场景非常多,包括文档助手,智能客服机器人,领域/行业知识库问答等。不同的应用场景优化的侧重点可能有所差异。
对于文档助手这类应用来说,数据是已知的,上传几篇文档就针对这些文档来问问题。我们几乎不用关注数据侧的事情,把精力放在优化系统就可以了。
而对于领域/行业知识库问答来说,需要从数据侧和系统侧同时优化。因为如果用户问题回答不上来,有可能是没相关数据,也有可能是有数据但 RAG 系统没找到。
数据侧的优化很'简单',就是尽可能多的收集领域内相关的数据,通通灌进知识库里面。但是,请先别着急!在开始组织人力收集整理数据之前,我们首先得弄清楚一件事情:RAG 系统,数据越多,效果越好吗?
如果答案是肯定的,意味着:
- 海量数据放心灌:可以一批一批地往知识库中加数据,不用担心数据量太大相互干扰导致效果不佳。
- 快速迭代快速优化:对于上线之后的 badcase,业务侧可以直接通过加相应数据来快速迭代优化。
- 降低数据成本:收集和整理的成本,不用费劲心思去做数据去重和脏数据的处理。
- 增加系统的稳定性:如果我加的数据不相关,问答的效果不一定会变好,但是起码能保证以前的效果不会变差。
反之,那工作量可就大了。
实验:数据量对于问答效果的影响
以教育领域的知识库问答为例,我们基于 RAG 做了一个升学百科问答的应用,专门解答用户关于高考升学规划和志愿填报政策相关的问题。
升学百科问答不是给定数据,给定问题,然后只需要去优化算法或者系统的 Benchmark 任务。它的问题是开放的,数据也是开放的(你可以收集到尽可能多的相关数据来提升问答的效果)。所以优化的变量就多了一个:系统是一部分,数据也是一部分。问答效果的好坏不光取决于好的 RAG 系统,还取决于你的数据量够不够,覆盖的知识全不全?如何优化 RAG 能让它完全发挥出海量数据的价值是我们研究的重点。
关于数据量对 RAG 问答质量的影响,我们在升学百科问答项目中做了比较详细的研究。实验设置如下:
- :收集了 176 个升学百科相关的问题,包括升学路径、志愿填报、选科等相关政策咨询问题。


