🧠 图解记忆:先调 Logits 抑制重复,惩罚过强会伤流畅度;点击图片可查看原图。
定义
重复惩罚 = 对已经出现过的 Token 的 Logits 进行惩罚,降低它再次被选中的概率,从而减少重复。
实现原理
python
# 伪代码:出现过的token,logits除以惩罚系数
for token in seen_tokens:
if logits[token] > 0:
logits[token] /= repetition_penalty # 比如 1.15
else:
logits[token] *= repetition_penalty参数建议
| 值 | 效果 |
|---|---|
| 1.0 | 不惩罚(默认) |
| 1.05-1.2 | 轻度惩罚,抑制复读 |
| >1.3 | 强惩罚,可能影响语义流畅度 |
其他防重复手段
- Frequency Penalty / Presence Penalty(OpenAI 风格):按出现频次/是否出现惩罚
- No Repeat Ngram Size:禁止 N-gram 完全重复
- Beam 内加多样性惩罚:多条候选路径互相抑制
面试话术
"复读机是解码阶段的常见问题,我用 repetition_penalty 对已出现 Token 的 Logits 做惩罚,一般设 1.1-1.2 兼顾流畅和多样;如果再配合 no_repeat_ngram 和频率惩罚,效果更好。"
