
SFTTrainer 本身不支持负样本训练,因其本质是监督式最大似然优化;如需引入负向信号,可考虑改用 KTOTrainer,或通过构造含明确否定标记的提示模板间接建模。
如需在 sfttrainer 中融入负样本进行语言模型微调,需明确一个关键前提:sfttrainer 的设计目标是标准监督微调(supervised fine-tuning),即仅对高质量正样本(prompt + 期望 response)最大化条件似然 \( \mathcal{l} = \sum \log p(y_i \mid x_i) \)。它**不原生支持负样本、偏好对或拒绝采样**——因此直接传入“错误答案”不会被识别为监督信号,反而可能污染训练目标,导致模型学习到错误模式。
要有效利用负样本,推荐以下两种经过实践验证的方案:
✅ 方案一:切换至偏好对齐训练器(推荐)
TRL 库已完整集成 KTOTrainer(Kahneman–Tversky Optimization),专为处理正/负响应对而设计。它基于行为经济学原理,将每个 prompt 关联一个正确回答(positive)和一个错误回答(negative),并优化模型对正样本的 logit 增益与负样本的 logit 惩罚之间的差异。
from trl import KTOTrainer, KTOConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
# 数据格式:每条样本含 'prompt', 'completion', 'label'(True=正样本,False=负样本)
dataset = [
{"prompt": "Explain photosynthesis.", "completion": "Photosynthesis converts light energy...", "label": True},
{"prompt": "Explain photosynthesis.", "completion": "It's how plants make oxygen from CO2 only.", "label": False},
]
kto_config = KTOConfig(
beta=0.1, # 控制 KL 正则强度
loss_type="kto_pair", # 或 "kto"
)
trainer = KTOTrainer(
model=model,
args=kto_config,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train()⚠️ 注意:KTO 要求数据严格成对(同一 prompt 下至少一正一负),且需启用 trust_remote_code=True(部分模型需此参数);训练显存开销略高于 SFT,但对齐效果更鲁棒。
✅ 方案二:在 prompt 中显式编码负信号(轻量适配)
若必须沿用 SFTTrainer(如受限于 pipeline 或部署约束),可通过结构化提示工程将负样本转化为监督信号。核心思想是让模型在生成过程中“识别并规避”错误形式:
[Instruction] Answer the question correctly. [Question] What is the capital of France? [Wrong Answer] Berlin [Correct Answer] Paris
或更紧凑地:
Q: What is the capital of France? A (incorrect): Berlin A (correct): Paris
此时,SFTTrainer 仍只优化 Paris 的生成概率,但上下文中的 Berlin 作为干扰项,可辅助模型学习区分正确/错误答案的语义边界(需配合足够多类似样本以形成归纳偏置)。该方法无需修改 Trainer,但效果依赖 prompt 设计质量与数据规模,不等价于真正的偏好学习。
总结建议
- ❌ 不要将负样本作为独立训练样本喂给 SFTTrainer(如 {"input": "Q: ...", "output": "Wrong answer..."}),这会误导模型;
- ✅ 优先评估是否真正需要负样本——若目标是提升事实准确性或抗幻觉能力,KTO/RLHF 类方法更具理论保障;
- ✅ 若仅需轻量改进,可结合方案二 + 数据增强(如自动构造反事实错误答案),并辅以后验校验(如用 reward model 过滤低分输出)。
最终选择应基于任务目标、数据形态与工程约束综合权衡。


















