NLP(九十)OpenAI的Chat_Completion_API中的logprobs参数

OpenAI的Chat Completion API中引入了logprobs参数。当logprobs参数被启用时,API会返回每个输出token的log概率,同时返回每个token位置最可能的几个token和它们的log概率。与之相关的两个参数:

  • logprobs:是否返回每个输出token的log概率
  • top_logprobs:整数,每个token位置最可能的token个数以及它们的log概率。若需使用该参数,则logprobs参数需设置为true.

在OpenAI的官方CookBook网站中,该网站给出了logprobs参数的介绍及可能的应用。

本文在此基础上,再给出一种可能的应用场景:双栏论文中的上下文连接

双栏论文上下文连接

以LLAMA论文中的第三页为例,其版面分析的结果如下:

llama_split_2_rect.jpg

此时,我们想要知道左侧Optimizer下方的文本区域中的warmup之后的文字应该与哪个右侧的文本区域连接。

我们考虑使用OpenAI的Chat Completion API的logprobs参数,去观察warmup后的下一个token位置上最可能的几个token。

示例Python代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os
from openai import OpenAI

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

query = "We use a weight decay of 0.1 and gradient clipping of 1.0. We use 2,000 warmup"

response = client.chat.completions.create(
messages=[
{
"role": "user",
"content": query
}
],
model="gpt-3.5-turbo",
logprobs=True,
top_logprobs=10
)

print(response.choices[0].logprobs.content[0].json())

输出结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{
"token": " steps",
"bytes": [
32,
115,
116,
101,
112,
115
],
"logprob": -0.07665413,
"top_logprobs": [
{
"token": " steps",
"bytes": [
32,
115,
116,
101,
112,
115
],
"logprob": -0.07665413
},
{
"token": "steps",
"bytes": [
115,
116,
101,
112,
115
],
"logprob": -2.6422403
},
{
"token": "\n",
"bytes": [
10
],
"logprob": -7.070091
},
{
"token": " iterations",
"bytes": [
32,
105,
116,
101,
114,
97,
116,
105,
111,
110,
115
],
"logprob": -7.86643
},
{
"token": " ",
"bytes": [
32
],
"logprob": -8.368307
},
{
"token": "\n\n",
"bytes": [
10,
10
],
"logprob": -8.59561
},
{
"token": "Steps",
"bytes": [
83,
116,
101,
112,
115
],
"logprob": -8.9801445
},
{
"token": " learning",
"bytes": [
32,
108,
101,
97,
114,
110,
105,
110,
103
],
"logprob": -9.553173
},
{
"token": " epochs",
"bytes": [
32,
101,
112,
111,
99,
104,
115
],
"logprob": -9.626547
},
{
"token": "_steps",
"bytes": [
95,
115,
116,
101,
112,
115
],
"logprob": -9.82288
}
]
}

由此可见,右侧栏的以steps开头的文本区域应当与warmup结尾的文本区域相连接。

参考文献

  1. Using logprobs: https://cookbook.openai.com/examples/using_logprobs

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。


NLP(九十)OpenAI的Chat_Completion_API中的logprobs参数
https://percent4.github.io/NLP(九十)OpenAI的Chat-Completion-API中的logprobs参数/
作者
Jclian91
发布于
2024年4月3日
许可协议