tokens是什么以及如何计算

What are tokens? (tokens是什么?)

tokens可以被认为是单词片段。在 API 处理提示之前,输入将分解为tokens。这些tokens并不是在单词开始或结束的地方被分割的——tokens可以包括尾随空格甚至子单词。以下是一些有用的经验法则,可用于了解tokens的长度:

  • 1 token ~= 4 chars in English
  • 1 token ~= ¾ words
  • 100 tokens ~= 75 words
    或者
  • 1-2 sentence ~= 30 tokens
  • 1 paragraph ~= 100 tokens
  • 1,500 words ~= 2048 tokens

如何计算上下文的tokens,可以考虑以下内容:

  • 韦恩·格雷茨基(Wayne Gretzky)的名言“You miss 100% of the shots you don’t take”包含11个tokens 。
  • OpenAI的章程包含476个tokens 。
  • 《美国独立宣言》的抄本包含1695个tokens 。

单词如何拆分为标记也取决于语言。例如,“Cómo estás”(西班牙语中的“How are you”)包含 5 个标记(10 个字符)。较高的令牌与字符比率可能会使为英语以外的语言实现 API 的成本更高。

要进一步探索标记化,您可以使用我们的交互式标记器工具,该工具允许您计算令牌的数量并查看文本如何分解为标记。或者,如果您想以编程方式标记文本,则可以探索库,例如 Python 的transformer包或 node.js 的 gpt-3-encoder 包。

Token Limits

根据所使用的模型,请求最多可以使用在提示和完成之间共享的 4097 个令牌。如果提示为 4000 个令牌,则最多可以是 97 个令牌。

限制目前是一个技术限制,但通常有创造性的方法来解决限制内的问题,例如压缩提示,将文本分解成更小的部分等。

Token Pricing

API以不同的价格提供多种型号。每种型号都有一系列的功能,其中davinci是最有能力的,ada是最快的。对这些不同型号的请求定价不同。您可以在此处找到有关代币定价的详细信息。

Exploring tokens

API根据语料库数据中的上下文来处理单词。GPT-3接收提示,将输入转换为令牌列表,处理提示,并将预测的令牌转换回我们在响应中看到的单词。

在我们看来,可能是两个相同的单词,根据它们在文本中的结构,可能会生成不同的标记。考虑API如何根据文本中的上下文为单词“red”生成标记值:

在这里插入图片描述
在这里插入图片描述
在上面的第一个示例中,“red”的标记“2266”包含一个尾随空格。

在这里插入图片描述
“Red”的标记“2296”(带前导空格,以大写字母开头)与“red”小写字母的标记“2266”不同。

在这里插入图片描述
在这里插入图片描述
当在句子开头使用“Red”时,生成的标记不包含前导空格。标记“7738”与前两个单词示例不同

Observations:(观察)

令牌的可能性/频率越高,分配给它的令牌编号越低:

  • 期间生成的标记在所有3个句子中都相同(“13”)。这是因为,在上下文中,整个语料库数据中使用的时间段非常相似。
  • 为“red”生成的标记因其在句子中的位置而异:
    • 句子中间小写:“red”-(标记:“2266”)
    • 句子中间的大写字母:“Red”-(标记:“2297”)
    • 句子开头的大写字母:“Red”-(标记:“7738”)

使用令牌知识进行更好的提示设计

Prompts that end with a space (提示以空格结尾)

既然我们知道标记可以包含尾随空格字符,那么记住以空格字符结尾的提示可能会导致输出质量降低。这是因为API已经在其令牌字典中包含了尾随空格。

Using the logit_bias parameter (使用logit_bias参数)

可以在 logit_bias 参数中设置特定令牌的偏差,以修改指定令牌出现在完成中的可能性。例如,我们正在构建一个人工智能烘焙助手,它对用户的鸡蛋过敏很敏感。
当我们运行 API 时提示“香蕉面包的成分是”,响应将包括“鸡蛋”作为第二种成分,概率为 26.8%。

在这里插入图片描述
注意:要在 Playground 中查看完成概率,请从显示概率下拉列表中选择全谱。

由于我们的AI烘焙助手对鸡蛋过敏很敏感,我们可以使用我们的令牌知识在logit_bias参数中设置偏差,以阻止模型生成包含“鸡蛋”一词任何变体的响应。

首先,使用这个标记器工具来识别我们需要设置偏差的标记。

在这里插入图片描述
在这里插入图片描述

Tokens:
  • 带尾随空格的单数:“egg”-“5935”
  • 带尾随空格的复数:“eggs”-“9653”
  • 为“egg”或“eggs”生成的子字标记-“gg”:“1130”

logit_bias参数接受范围在-100到+100之间的偏差值,极值导致相关令牌的禁止(-100)或排他选择(100)。

在提示中添加logit偏差将修改“egg”(及其变体)一词包含在香蕉面包提示响应中的可能性。上面的提示会生成一个不包含任何蛋的响应!

虽然我们不能保证它会产生最好的无蛋香蕉面包配方,但AI烘焙助手满足了它对用户鸡蛋过敏的要求。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Compiler Construction Experiment 1 Implementing a Scanner for TINY+ You are to write a lexical analyzer/scanner for the language TINY+. Goals 1The input of the scanner is a source code file and the output of the scanner is a stream of tokens. 2Your scanner should go for longest possible match i.e. a string ‘:=’ is to be identified as ‘ass-symbol’ rather than ‘:’ and ‘=’. 3Token is represented as (Kind, Value). We use the following symbols to denote different kinds of tokens KEY denotes reserved words SYM denotes special symbols ID denotes identifiers NUM denotes numeric constants STR denotes string constants 4Check lexical errors: giving meaning error messages and the lines where errors occur. The kinds of lexical errors are: Illegal character, that is, scanner may recognize a character that is not in the alphabet of TINY+, such as $ is an illegal character The right bracket of a STRING is lost, such as ' scanner The right delimiter of a comment is lost, such as: {this is an example Requirements 1Write your program in C or C++ 2This experiment must be finished in 4 periods. You will submit a report and the source code Example output for some TINY+ programs Test1 or and int bool char while do if then else end repeat until read write , ; := + - * / ( ) = a2c 123 'EFG' The scanner should give the outputs: (KEY, or) (KEY, and) (KEY, int) (KEY, bool) (KEY, char) (KEY, while) (KEY, do) (KEY, if) (KEY, then) (KEY, else) (KEY, end) (KEY, repeat) (KEY, until) (KEY, read) (KEY, write) (SYM, ,) (SYM, ;) (SYM, :=) (SYM, +) (SYM, -) (SYM, *) (SYM, /) (SYM, ( ) (SYM, )) (SYM, ) (SYM, =) (ID, a2c) (NUM, 123) (STR, EFG) Test2 {this is an example} int A,B; bool C1, C2, C3; char D; D:= 'scanner'; while A<=B do A:=A*2 end The scanner should give the outputs: (KEY, int) (ID, A) (SYM, ,) (ID, B) (SYM, ;) (KEY, bool) (ID, C1) (SYM, ,) (ID, C2) (SYM, ,) (ID, C3) (SYM, ;) (KEY, char) (ID, D) (SYM, ;) (ID, D) (SYM, :=) (STR, scanner) (SYM, ;) (KEY, while) (ID, A) (SYM, <=) (ID, B) (KEY, do) (ID, A) (SYM, :=) (ID, A) (SYM, *) (NUM, 2) (KEY, end)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值