一句话定义:这是大模型生成文本时的一个采样参数——只要某个词在前面已经出现过,就把它在接下来被选中的概率往下压一点,从而推着模型去说新词、新内容。
它到底在惩罚什么
模型写东西是一个词一个词往外蹦的。每蹦一个词之前,它会给词表里所有候选词打分,再换算成概率,然后抽签。存在惩罚做的事,就是在抽签之前改一次分数:凡是已经在这段文本里出现过的词,分数统统一降。关键在于——出现过的次数不影响降幅,出现过一次和出现过十次,扣的分一样多。
打个比方:一场头脑风暴,主持人发现有人已经提过“成本”这个词了。之后他每次再想说“成本”,主持人都轻轻按一下他的手。但他第二次说和第十次说,被按的力度完全相同——力度只看“说没说过”,不看“说了几遍”。
所以效果是:模型更愿意换话题、换说法。比如让它推荐餐厅,如果它已经写过“好吃”,接下来就更可能转向“环境安静”“上菜快”“性价比高”,而不是一路“好吃、真好吃、太好吃了”地原地打转。
别和频率惩罚搞混
最容易被混淆的是频率惩罚(Frequency Penalty)。两者经常一起出现在参数列表里,但惩罚逻辑不一样:
| 参数 | 惩罚依据 | 主要效果 |
|---|---|---|
| 存在惩罚 | 是否出现过,只看有无 | 推动换话题、换表达 |
| 频率惩罚 | 出现过多少次,按次数累加 | 压制某个词刷屏 |
| 温度(AI 词典:Temperature">Temperature) | 不看具体词,整体调概率分布 | 控制整体随机性 |
还有一点要留意:这里的“词”是分词后的 token,不是人理解的概念。换个同义词不算重复,不会被牵连;但“的”“了”这类高频虚词一旦出现过,同样会被按住。
对做应用的人意味着什么
存在惩罚适合“需要说开一点”的场景:创意文案、头脑风暴、长对话里防止车轱辘话。它不适合的场景也很明确——代码生成、需要反复使用同一术语的技术文档、结构化输出。变量名、字段名、固定术语本来就该重复,惩罚它们只会让结果走形。
数值往正方向调是“更爱换新”,往负方向调是“更爱重复”。多数平台的可调区间大致在 -2 到 2 之间,以所用平台的官方文档为准;建议从小幅调整开始,看效果再动。
它本质上是一种事后纠偏:模型本来想重复,你硬把它压下去。压得太狠,句子会变别扭、指代不清,因为连词和代词也被一起惩罚了。
对普通职场人意味着什么
如果你在提示词里写过“换个说法,别老用同一个词”,那你其实是用自然语言手动做了一次存在惩罚。理解这个概念之后,再看 Playground 里那个不起眼的滑杆,就知道它拧的是模型的“说话惯性”,而不是它的知识水平。
