别再无视提示词: 利用对比解码提升上下文学习效果
像 GPT-4 和 Llama-3 这样的大语言模型 (LLMs) 彻底改变了我们处理自然语言处理 (NLP) 的方式。它们最强大的功能之一就是 上下文学习 (In-Context Learning, ICL) 。 你无需为了某个特定数据集花费数小时微调模型,只需在提示词中提供几个例子 (演示) ,模型就能找出规律。
这感觉就像魔法。你给模型三个英语翻译成法语的例子,它就能完美地翻译第四个句子。
但问题在于: 模型是真的从你的例子中学习了,还是只是在假装?
最近的研究表明,LLMs 经常忽略提示词中提供的具体 输入-标签映射 (input-label mapping)。相反,它们严重依赖预训练时的“先验知识 (priors)”——即在初始大规模训练阶段吸收的知识。本质上,模型只是扫了一眼你的提示词,识别出了任务 (例如,“噢,这是情感分析”) ,然后就忽略了你的具体例子,转而通过“直觉”来回答。
今天,我们将深入探讨一篇引人入胜的论文,题为 “Enhancing Input-Label Mapping in In-Context Learning with Contrastive Decoding” (通过对比解码增强上下文学习中的输入-标签映射) 。研究人员提出了一种巧妙且无需训练的方法,强制 LLMs 关注提示词中的具体逻辑。这种方法被称为 上下文对比解码 (In-Context Contrastive Decoding, ICCD) 。
如果你是 NLP 或机器学习领域的学生,这是一个完美的案例,展示了如何在不触及任何模型参数的情况下,通过在推理阶段操纵概率分布来解决模型根深蒂固的行为问题。
问题所在: 任务识别 vs. 任务学习
要理解为什么上下文学习会失败,我们需要区分两个概念:
- 任务识别 (Task Recognition, TR): 模型意识到它应该做 什么 任务 (例如,“对这条影评进行分类”) 。
- 任务学习 (Task Learning, TL): 模型根据例子中的具体映射学习 如何 完成任务 (例如,“在这个特定语境下,‘不坏 (not bad)’ 被标记为‘正面 (Positive)’”) 。
理想情况下,ICL 应该包含这两者。然而,研究表明 LLMs 擅长任务识别,但在任务学习上却很“懒惰”。它们受到 标签偏见 (Label Bias) 的影响。如果模型在预训练期间看到“糟糕 (terrible)”一词与“负面 (Negative)”关联了一百万次,即使你在少样本 (few-shot) 示例中明确告诉它标记为“正面”,它也很难照做。
这造成了性能上限。模型并没有在适应,它只是在回忆。
解决方案: 上下文对比解码 (ICCD)
研究人员提出了一种方法,从数学上分离出“任务学习”的信号。他们通过对比模型在 正确示例 上的行为与在 无意义示例 上的行为来实现这一点。
1. 标准方法
在标准 ICL 中,我们给模型一个上下文串 \(c\) (示例) 和一个输入查询 \(x\)。模型根据以下概率分布生成目标 \(y\):

这里,\(\mathcal{T}(x)\) 是包装输入的模板。模型试图最大化这个概率。但正如我们所讨论的,这个概率被模型的预训练先验严重污染了。
2. 构建“负”上下文
为了解决这个问题,作者引入了 负上下文 (Negative Context) (\(c^-\))。
负上下文的目的是欺骗模型。我们需要一组看起来像原始任务,但包含 错误输入-标签映射 的例子。
他们是如何构建的呢?
- 原始演示: 输入: “电影很棒。” -> 标签: “正面”
- 负面演示: 保持标签“正面”不变,但随机将输入替换为数据集中的另一句话,比如一句说“我讨厌它”的话。
- 结果: 负上下文 \(c^-\) 具有与真实上下文相同的结构和标签分布,但输入与标签之间的逻辑联系被打破了。
3. 对比公式
现在神奇的地方来了。我们希望模型生成的 token 在 给定正确上下文 (\(c\)) 时概率高,但在 给定被破坏的上下文 (\(c^-\)) 时概率低。
如果一个 token 在 两个 上下文中概率都很高,这意味着模型只是依赖其先验知识 (它不需要正确的映射就能猜出这个词) 。如果一个 token 在正确上下文中概率高,但在负上下文中概率低,那么这个 token 就是由我们关心的特定输入-标签映射驱动的。
研究人员使用以下公式调整 logits (Softmax 之前的原始分数) :

其中:
- \(\mathbf{z}_t\) 是来自正确上下文的 logit。
- \(\mathbf{z}_t^-\) 是来自负面 (被破坏) 上下文的 logit。
- \(\alpha\) 是一个控制我们惩罚“懒惰”先验程度的超参数。
通过减去 \(\mathbf{z}_t^-\),我们本质上是在说: “移除那些即使给错了例子你也能猜到的预测部分。”
这也可以被视为一个概率比率:

这种修改放大了正确映射的信号。重要的是,这完全发生在 推理 阶段。没有更新权重,也不需要训练。
实验设置
这真的有效吗?作者在多种设置下测试了 ICCD 以确保其鲁棒性。
- 模型: 他们测试了不同规模的 Llama-3 (最高 8B) 和 Qwen2 (最高 7B) 。
- 任务: 7 项自然语言理解 (NLU) 任务,包括情感分析 (SST-2, SST-5)、主观性分析 (Subj) 和自然语言推理 (MNLI, QNLI)。
- 基线: 他们将 ICCD 与常规贪婪解码 (greedy decoding) 和其他解码策略进行了比较。
他们还研究了不同的演示选择方法:
- 随机 (Random): 挑选随机例子。
- BM25: 挑选与输入共享关键词的例子。
- TopK: 挑选与输入语义相似的例子 (使用向量嵌入) 。
关键结果
结果在各方面都表现得惊人一致。
1. 总体性能提升
最重要的结论是 ICCD 几乎在所有地方都提高了准确性。这不是一个只对特定模型起作用的小众技巧。
看看下面详细的结果。 红色 数字表示 ICCD 优于标准解码的地方。

如表 2 所示,对于 Qwen2-1.5B 模型,ICCD 带来了平均 +2.3 分 的提升。即使是在已经相当强大的 Llama3.1-8B 上,ICCD 也平均挤出了 +1.8 分 的额外提升。
关键是,在更难的任务上收益是巨大的。看看 Llama3.1-8B 在 QNLI (一种自然语言推理任务) 上的表现——准确率从 60.3% 跃升至 65.4%。对于一种无需训练的方法来说,这是一个显著的飞跃。
2. 跨选择方法的鲁棒性
对 ICL 研究的一个常见批评是,结果在很大程度上取决于你选择了 哪些 例子。也许 ICCD 只有在你选了烂例子时才有效?
作者反驳了这一点。无论你是随机选择、使用 BM25 还是使用 TopK (嵌入相似度) 选择例子,ICCD 都能提供提升。

表 1 显示,虽然像 TopK 这样的智能选择方法自然比随机选择表现更好,但加入 ICCD (“Ours” 行) 在这些智能选择方法 之上 进一步提高了性能。这是一种互补的技术。
3. 它对聊天模型有效吗?
许多研究人员使用基础模型 (base models),但学生和从业者经常使用“指令 (Instruct)”或“聊天 (Chat)”版本 (如 ChatGPT 或 Llama-Instruct) 。这些模型经过微调以遵循指令,所以人们可能会认为它们不需要这种帮助。
然而,实验表明并非如此:

如图 1 所示,即使是经过对齐微调的模型 (Llama-Instruct 系列) 也能从对比解码中受益。红色的柱子 (Ours) 始终超过蓝色的柱子 (Regular) 。
4. 处理更复杂的类别
许多学术基准测试是二分类的 (正面/负面) 。但现实世界的任务通常有许多类别。作者在 TREC (6 类) 和 Dbpedia (14 类) 上进行了测试,以查看当输出空间变大时对比方法是否仍然有效。

表 3 证实了该方法具有良好的扩展性。在 Llama3.2-3B 的 Dbpedia 任务上,准确率跃升了 +8.3 分 。 这表明,随着决策空间变得越复杂,强制模型验证输入-标签映射变得越发重要。
为什么有效?更深入的分析
论文包含几个消融实验 (ablation studies),阐明了 ICCD 的机制。
输入扰动 vs. 标签扰动
在创建“负上下文” (\(c^-\)) 时,我们有两种选择:
- 更改输入: 保持标签,交换句子。 (ICCD 使用的方法) 。
- 更改标签: 保持句子,将标签交换为错误的。 (Shi et al. 曾尝试类似方法) 。
直觉可能认为更改标签更直接。然而,作者发现更改标签会改变 类别分布 (class distribution) , 这会混淆模型的先验。如果你将“正面”翻转为“负面”,你可能会意外地惩罚整个“负面”概念。
通过更改 输入 但保持 标签 不变,标签的边缘分布保持完全相同。唯一改变的是文本与标签之间的 联系。

表 4 通过经验证实了这一点。“ +Input ”行 (ICCD 策略) 始终优于“ +Label ”和“ +NULL ” (使用空上下文作为负面) 。
分布的散度
为了证明模型实际上是在区分正确和不正确的上下文,研究人员测量了正向和负向上下文输出分布之间的 KL 散度 (KL Divergence) 。

高 KL 散度 (如 MNLI 上的 0.79) 意味着模型看到合理例子和胡说八道的例子之间有明显的区别。如果模型忽略了映射,这个值将接近于零。该值很高的事实证实了 ICCD 成功地利用了“推理”和“猜测”之间的差异。
样本数量 (Shots) 和 Alpha 的影响
最后,你需要多少个例子?

图 2 表明,虽然常规解码 (蓝线) 随着样本增加而改进,但 ICCD (红线) 始终保持领先优势。即使只有几个样本,与负上下文进行对比也能帮助模型更快地确定正确答案。
关于 \(\alpha\) 参数 (修正强度) :

表 6 建议 \(\alpha = 1.0\) 是一个最佳点。如果 \(\alpha\) 太低,修正不足。如果太高 (如 2.0) ,可能会过度惩罚并扭曲预测。
结论
上下文学习很强大,但并不完美。LLMs 容易受到“近因偏见 (recency bias)”和“标签偏见”的影响,经常忽略我们精心为它们挑选的例子。
本文提出的 上下文对比解码 (ICCD) 方法提供了一个数学上优雅的解决方案。通过构建上下文的“无意义”版本,并从原始概率分布中减去其概率分布,我们可以从数学上过滤掉模型的偏见,并分离出任务的真实信号。
对于学生和从业者来说,关键要点是:
- 不要相信模型能完美阅读你的提示词。 它经常退回到预训练的先验知识上。
- 推理时干预是强大的。 你并不总是需要重新训练或微调。有时,巧妙的解码策略可以释放隐藏在噪声之下的既有性能。
- 输入-标签映射是关键。 “输入”扰动策略告诉我们,在打破语义链接的同时保持标签分布,是模拟我们想要移除的“噪声”的最佳方式。
随着 LLMs 继续发展,像 ICCD 这样的方法对于确保它们不仅流畅,而且忠实于我们给出的指令将至关重要。
](https://deep-paper.org/en/paper/2502.13738/images/cover.png)