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

使用 OpenAI API 通过 logit bias 改变 Token 概率

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

更新于:12 days ago

Logit_bias 是一个可选参数,用于修改指定 Token 出现在模型生成输出中的可能性。

此参数接受一个 JSON 对象,将 Token 映射到关联的偏置值,范围从 -100(在大多数情况下会阻止生成该 Token)到 100(专门选择该 Token,使其更有可能被生成)。像 -1 和 1 这样的中等值,会以较小幅度改变某个 Token 被选中的概率。

由于该参数接收的是 Token 而不是文本,你需要使用分词器工具将文本转换为 Token ID。让我们来看几个示例。

示例 1:移除“time”

如果我们使用提示“Once upon a”调用 Completions 端点,补全很可能会以“ time”开头。

单词“time”Token 化后的 ID 为 2435,而单词“ time”(开头带有一个空格)Token 化后的 ID 为 640。我们可以通过 logit_bias 传入这些 Token 并设为 -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”Token 化后为 1787,因此我们可以按如下方式设置 logit_bias,将其从生成结果中移除。

logit_bias={1787:-100}

现在,我们的补全可能会改为包含单词“saucepan”。完美!

示例 3:提高某个词出现的概率

假设我们想提高某个词出现的可能性。

例如,也许我们正在运营一个提供微波炉食谱的网站,因此希望确保单词“microwave”出现在食谱中。Microwave Token 化后的 ID 为 27000。我们可以通过设置正的 logit_bias 来提高该 Token 出现的可能性,如下所示:

logit_bias={27000:5}

现在,我们的补全更有可能包含单词“microwave”。

我们将 logit_bias 设为 5,因为我们发现,将 logit_bias 设为 1 时,单词“microwave”通常不会出现在补全中;而像 10 这样更高的 logit_bias 值,又会导致单词“ microwave”在补全中出现得过于频繁。

这篇文章对你有帮助吗?