这篇ACL 2024论文《Why So Gullible? Enhancing the Robustness of Retrieval-Augmented Models against Counterfactual Noise》针对当前检索增强生成(RAG)模型面临的一个关键挑战:当检索到的文档包含与问题相关但内容错误或相互冲突的信息时,模型容易产生误导性回答。这种现象在开放域问答场景尤为常见,比如:
传统RAG模型如FiD(Fusion-in-Decoder)会平等对待所有检索结果,缺乏对文档可信度的判断能力。论文作者通过实验发现,即使是微调过的RAG模型,在面对这种"反事实噪声"(counterfactual noise)时,回答准确率可能下降30%以上。
关键发现:当检索文档中20%的内容包含反事实噪声时,标准FiD模型的EM分数从68.2骤降至42.7,显示出当前模型对噪声极度敏感
作者提出的解决方案是在标准RAG流程中嵌入一个可学习的判别器模块,形成"判别-生成"双流程架构:
这种设计的关键优势在于:
判别器的具体实现包含几个精妙设计:
输入表示:
分类头设计:
python复制class Discriminator(nn.Module):
def __init__(self, hidden_size):
super().__init__()
self.dense = nn.Linear(hidden_size, hidden_size)
self.dropout = nn.Dropout(0.1)
self.out_proj = nn.Linear(hidden_size, 1)
def forward(self, hidden_states):
x = self.dropout(hidden_states)
x = self.dense(x)
x = torch.tanh(x)
x = self.dropout(x)
return self.out_proj(x)
训练策略:
论文创新性地提出三损失联合优化框架,这是方法的核心所在:
标准的序列生成交叉熵损失,确保基础问答能力:
$$
\mathcal{L}{QA} = -\sum^T \log p(y_t|y_{<t}, x)
$$
二分类交叉熵损失,优化噪声识别能力:
$$
\mathcal{L}{D} = -\frac{1}{N}\sum^N [y_i\log\sigma(d_i)+(1-y_i)\log(1-\sigma(d_i))]
$$
其中$d_i$是判别器输出,$y_i$是真实标签
基于InfoNCE的损失函数,拉大正负样本距离:
$$
\mathcal{L}{C} = -\log\frac{e^{sim(q,d^+)/\tau}}{e^{sim(q,d^+)/\tau} + \sum^K e^{sim(q,d^-_i)/\tau}}
$$
实际训练中发现,三个损失的权重比例设为1:0.7:0.3时效果最佳。过早引入对比损失可能导致模型收敛不稳定
作者创建了MacNoise数据集,特点包括:
噪声比例从10%到50%分5个等级,共15万条训练样本
在噪声比例30%的设置下:
| Model | EM | F1 | Robustness↑ |
|---|---|---|---|
| FiD-base | 45.2 | 58.7 | - |
| FiD+RL | 48.1 | 61.3 | +6.4% |
| FiD+DS (Ours) | 53.8 | 66.2 | +19.0% |
关键发现:
基于论文结论,在实际部署RAG系统时建议:
数据预处理阶段:
模型选择:
持续学习:
实际部署中发现,当系统检索到多个冲突文档时,可以设置置信度阈值(如0.7),仅使用高置信文档生成答案,其余情况转为人工审核
这项研究打开了几个值得探索的方向:
噪声类型泛化:当前方法对事实型噪声有效,但对逻辑谬误等复杂噪声效果有限
多模态扩展:当检索结果包含图文混合内容时,如何判别跨模态噪声
动态判别机制:根据query类型动态调整判别严格度,平衡准确率和召回率
在后续实验中,我们尝试将该框架应用于法律咨询场景,发现对于法条冲突判别的准确率提升了22%,但处理时间增加了约15%。这提示在实际应用中需要权衡精度与效率