OpenAI
页面内容为机器翻译。查看英文原文

使用 logit bias 通过 OpenAI API 调整 token 概率

了解如何使用 logit bias 参数修改模型输出

更新于:12 days ago

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”(带空格)在补全中出现得过于频繁。

这篇文章对你有帮助吗?