Logit_bias 是一个可选参数,用于修改指定 token 在模型生成输出中出现的可能性。
该参数接受一个 JSON 对象,将 token 映射到对应的偏置值,范围从 -100(在大多数情况下会阻止该 token 被生成)到 100(倾向于独占性选择该 token,使其更可能被生成,且不含 100)。像 -1 和 1 这样的中等数值会以较小幅度改变某个 token 被选中的概率。
由于该参数接收的是 token,而不是文本,你需要使用 tokenizer 工具 将文本转换为 token ID。我们来看几个例子。
示例 1:移除 'time'
如果我们使用提示词“Once upon a,”调用 Completions 端点,补全结果很可能会以“ time.”开头。
单词“time”会被分词为 ID 2435,而“ time”(开头带空格)会被分词为 ID 640。我们可以通过 logit_bias 传入 -100 来禁止它们出现在补全中,如下所示:
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "system", "content": "You finish user's sentences."},
"role": "user", "content": "Once upon a"} ]
logit_bias={2435:-100, 640:-100}
)现在,提示词“Once upon a”会生成补全“midnight dreary, while I pondered, weak and weary.”
注意,结果里完全找不到“time”,因为我们用 logit_bias 有效地禁用了该 token。
示例 2:用定向的 logit bias 值引导输出
再来看一个例子,使用一个食谱生成器的提示词。
很多食谱会建议使用锅(pot),但假设我们没有锅。我们希望补全里不要生成“pot”这个词。'Pot' 会被分词为 1787,因此我们可以如下设置 logit_bias,把它从生成中移除。
logit_bias={1787:-100}这样一来,我们的补全可能会改用“saucepan”。完美!
示例 3:提高某个词出现的概率
假设我们想提高某个词出现的可能性。
例如,我们运营一个提供微波炉食谱的网站,因此希望食谱里一定出现“microwave”这个词。Microwave 会被分词为 ID 27000。我们可以设置一个正的 logit_bias 来提高该 token 出现的概率,如下所示:
logit_bias={27000:5}现在,我们的补全更可能包含'microwave'这个词。
我们将 logit_bias 设为 5,因为我们发现将 logit_bias 设为 1 时,补全中经常不会出现“microwave”,而更高的 logit_bias 值(如 10)则会导致“ microwave”(带空格)在补全中出现得过于频繁。
