在某公司的大模型平台上出现了几个翻译实在令人难绷的词汇,分别叫“存在惩罚”,“频率惩罚”。虽然我知道大模型生成有个“重复惩罚”,但是另外两种我还确实不了解,而某公司的平台写的帮助文档更是一坨,属于是懂的看了也不懂了。在简中互联网上搜了一下,也不知所云,大部分都是重复两句话:这三个参数都是控制模型生成重复文本的概率,数值越大重复性越低balabala。但是,对这三个参数的具体区别,基本是没有一个人给你说清楚的。
因此,只能我在繁忙的工作中抽出时间自己研究一下。
首先从我熟悉的huggingface transformers入手,直接从源代码里搜索:presence_penalty,结果,这个参数只出现了一次:在 UNUSED_CHAT_COMPLETION_FIELDS 中,说明该参数暂时没有被huggingface支持,具体位置在:
https://github.com/huggingface/transformers/blob/669230a86f421457e8ee5d96caa9d696921bc7f3/src/transformers/commands/serving.py#L178
然后我看他在huggingface的serving.py中,这个是提供一个OpenAI兼容的接口,而vllm也是干这个的,于是我又去看vllm的代码,vllm的代码中确实有这个参数,并且确实是使用到了。现在我们直接上链接:
https://github.com/vllm-project/vllm/blob/2b30afa4420cbada6dd9084de3ee7eb19142b7ff/tests/v1/sample/test_sampler.py#L219-L258
这个test_sampler_presence_penalty函数就演示了怎么用presence_penalty,同理下面还有test_sampler_frequency_penalty和test_sampler_repetition_penalty
本着授人以鱼不如授人以渔的精神,具体代码解析我就不说了,读者可以自行阅读代码看看他们的区别。