大语言模型输出的罚重操作

Repeat penalty的作用与实现。

大语言模型输出的罚重操作

大语言模型的工作核心模式可以简化为一个序列数据预测机器。根据序列内的已有内容,再结合模型内部的现有参数,输出下一个最为适合添加到序列内的内容。

人类的语言天然具备序列性质。一句话倒着读很可能没有任何意义(不信你试试“义意何任有没能可很读着倒话句一”);几个单词不断地重复也失去了语言应有的形式以及内涵(比如“我不信我不信我不信…”)。然而大语言模型最终的输出为Token的概率值,如果仅仅选择概率最大的token(即贪婪策略),很有可能陷入到短序列不断重复的陷阱中。因此对于大语言模型的输出,需要采用各种带有一定随机性质的采样过程。

除此之外,“惩罚重复性(Repeat Penalty)”也是一种常用的消减重复概率的操作。在中文语境中,我觉得这种操作的描述更合适的词汇应当为“抑制重复”。Candle的LLaMA 3推演Rust代码中就实现了这个操作,代码行数不到20行。为方便讨论,摘抄如下