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

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

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

更新于:8 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}
)

现在,提示词“从前有一个”生成了补全内容:“夜半阴郁,当我沉思时,虚弱而疲惫。”

请注意,其中完全没有“时间”一词,因为我们已使用 logit_bias 有效地禁用了这个 Token。

示例 2:使用针对性的 logit 偏置值引导生成

下面再来看一个使用食谱生成器提示词的示例。

许多食谱都会建议使用锅,但假设我们没有锅。我们希望补全内容中不要生成“锅”这个词。“Pot”分词后对应的 Token ID 为 1787,因此可以像下面这样设置 logit_bias,使生成内容中不再出现它。

logit_bias={1787:-100}

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

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

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

例如,假设我们运营着一个提供微波炉食谱的网站,因此希望确保食谱中出现“微波炉”一词。“Microwave”分词后对应的 Token ID 为 27000。我们可以像下面这样设置一个正的 logit_bias,提高该 Token 出现的可能性:

logit_bias={27000:5}

现在,补全内容中更有可能出现“微波炉”一词。

我们将 logit_bias 设为 5,因为我们发现,将 logit_bias 设为 1 时,补全内容中往往不会出现“微波炉”一词;而设为 10 之类更高的 logit_bias 值时,“ 微波炉”一词又会过于频繁地出现。

这篇文章对你有帮助吗?