跳到主要内容

RAG 评估失效悖论:为什么更新知识库会破坏你的基准测试

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 RAG 评估套件在忠实度(faithfulness)方面达到了 0.89。你向知识库添加了 5,000 个新的支持文档。你重新运行相同的评估,忠实度降到了 0.79。你的团队提交了一个模型退化(model regression)工单。

其实没有任何退化。你的评估只是变成了一个谎言。

这就是 RAG 评估失效悖论:在你更新知识库的那一刻,你针对旧索引构建的评估集就会悄无声息地停止衡量其设计的初衷。大多数团队在几个月后才会发现这一点——在为幻影般的退化消耗了大量的工程周期之后——如果他们真的能发现的话。

为什么评估和索引是耦合的,而非独立的

普遍的假设是评估集是稳定的产物——你编写一次,重复运行,并长期信任这些数据。当你孤立地衡量一个模型时,这没问题。但 RAG 系统不同。针对 RAG 系统的评估包含了对知识库特定版本的隐式假设。

当你编写一个诸如“我们的数字商品退款政策是什么?”之类的评估查询时,你不只是在测试模型是否生成了正确的答案。你还在测试:

  • 包含退款政策的分块(chunk)是否排在检索到的前 3 个文档中
  • 该分块是否在合适大小的上下文窗口中涵盖了正确的陈述
  • 该分块的相似度评分是否高于你使用的阈值
  • 没有其他排名更高的文档与该答案相矛盾

每一个条件都是索引的函数,而不只是模型的函数。改变索引,你就改变了测试——即使测试文件看起来是一模一样的。

这个问题会由于检索指标对此特别敏感而变得更加复杂。上下文召回率(Context recall)衡量的是“参考答案中有多大比例的陈述得到了检索上下文的支持”。如果你从固定长度分块(fixed-length chunking)切换到递归语义分块(recursive semantic chunking),覆盖特定文档的分块形状就会发生变化。相同的查询现在可能会检索到以不同顺序涵盖正确答案的上下文,或者将其拆分到两个分块中,而这两个分块的召回率得分都不足以计入统计。你的评估现在衡量的是在它被编写的版本中从未发生过的事情。

语料库更新破坏评估有效性的三种方式

分块策略变更

从固定长度分块切换到语义分块不仅仅是检索质量的提升——它对你的评估集来说是一个破坏性的变更。文档边界发生了偏移。以前包含政策文档第 1–3 条陈述的分块,现在可能被拆分为独立的段落,每个段落本身都不足以回答评估查询。比较分块策略的研究显示,段落分组分块(paragraph-group chunking)的 nDCG@5 约为 59%,而原始的固定长度拆分约为 40%。这 19 个点的差距是真实的,但也意味着在你更换策略的那一刻,植入到评估集中的每一个排名假设都是错误的。

大多数团队都认识到分块对检索质量很重要。但很少有人意识到,它追溯性地使旧策略下标记的所有评估都失效了。

嵌入模型升级

当你从一个嵌入模型迁移到另一个时,你得到的不只是更好的嵌入表示。你得到的是一个根本不兼容的向量空间。在模型 v1 下,查询可能会将文档 A 检索到靠前的位置,而在模型 v2 下,文档 B 可能排在第一位——这不是因为模型 v2 更差,而是因为它对语义相似性的编码方式不同。

生产环境的研究表明,仅嵌入模型的选择就能解释检索指标中超过 35 个百分点的差异。一个针对 v1 嵌入空间校准的评估,在你使用 v2 重新建立索引后,衡量的就是一个范畴错误。数据依然会产出——RAGAS 依然会计算忠实度和上下文精度(context precision)——但分母已经变了。你正在比较分母不同的分数。

增量文档添加

这是看起来最不显眼的更新,因此也最危险。你没有改变架构。你只是添加了 500 篇新的支持文章,或者更新了 300 个产品页面。评估集保持原样。指标照常运行。

实际发生的情况是:原本在某些查询中排名靠前的文档被恰好相似度得分更高的新文档所取代。原本能清晰映射到一个权威分块的查询,现在匹配到了多个包含冲突信息的候选文档。你的评估查询在编写时假设某个特定文档是权威的——现在一个新的文档变得更权威了,模型正确地根据新文档进行了回答,但你的评估却说答案是错误的,因为它预期的是旧文档'的措辞。

每月你添加文档时,语料库都会进一步偏离你评估时所假设的基准。在进行了六个月的增量更新后,你那包含 50 个查询的评估集可能是在针对一个有 40% 新内容的语料库进行测试——而你却仍将其结果视为与最初基准具有可比性。

“冻结评估”反模式 (The Frozen Eval Anti-Pattern)

“冻结评估”(Frozen Eval)这一术语描述的是一个针对实时、不断演进的索引持续运行的评估集。它看起来像正常的 CI。它按计划生成数据。但它只是不再具有实际意义了。

这种失败模式非常隐蔽,因为评估集不会宣告自己的失效。它们继续执行,产生看起来合理的指标。唯一的信号是与你所做的任何模型或基础设施更改都不相关的指标漂移——而这种信号很容易被找借口搪塞过去。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates