Sch*_*der 10
要在 python 中执行此操作,首先安装Transformers包以启用GPT-2 Tokenizer,它与[GPT-3] 使用的标记生成器相同:
点安装变压器
然后,要标记字符串“Hello world”,您可以选择使用 GPT2TokenizerFast 或 GPT2Tokenizer。
from transformers import GPT2TokenizerFast\
tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")\
number_of_tokens = len(tokenizer("Hello world")['input_ids'])
Run Code Online (Sandbox Code Playgroud)
或者
from transformers import GPT2Tokenizer\
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")\
number_of_tokens = len(tokenizer("Hello world")['input_ids'])
Run Code Online (Sandbox Code Playgroud)
无论哪种情况,tokenizer() 都会生成一个代表字符串的 Python 标记列表,可以使用 len() 对其进行计数。该文档没有提及这两种方法之间的行为差异。我在文本和代码上测试了这两种方法,它们给出了相同的数字。from_pretrained 方法慢得令人不快:GPT2Tokenizer 为 28 秒,GPT2TokenizerFast 为 56 秒。加载时间主导体验,因此我建议不要使用“快速”方法。(注意:第一次运行 from_pretrained 方法中的任何一个时,将下载并安装一个 3MB 的模型,这需要几分钟的时间。)
分词器既慢又重,但是可以在它们之间来回进行近似,只使用字符或标记的数量。我通过观察 GPT-2 分词器的行为得出了以下近似值。它们适用于英文文本和 Python 代码。第三和第四个函数可能是最有用的,因为它们让我们可以快速地将文本放入 GPT-3 的令牌限制中。
import math
def nchars_to_ntokens_approx(nchars):
#returns an estimate of #tokens corresponding to #characters nchars
return max(0,int((nchars - 2)*math.exp(-1)))
def ntokens_to_nchars_approx(ntokens):
#returns an estimate of #characters corresponding to #tokens ntokens
return max(0,int(ntokens*math.exp(1) ) + 2 )
def nchars_leq_ntokens_approx(maxTokens):
#returns a number of characters very likely to correspond <= maxTokens
sqrt_margin = 0.5
lin_margin = 1.010175047 #= e - 1.001 - sqrt(1 - sqrt_margin) #ensures return 1 when maxTokens=1
return max( 0, int(maxTokens*math.exp(1) - lin_margin - math.sqrt(max(0,maxTokens - sqrt_margin) ) ))
def truncate_text_to_maxTokens_approx(text, maxTokens):
#returns a truncation of text to make it (likely) fit within a token limit
#So the output string is very likely to have <= maxTokens, no guarantees though.
char_index = min( len(text), nchars_leq_ntokens_approx(maxTokens) )
return text[:char_index]
Run Code Online (Sandbox Code Playgroud)
小智 3
OPEN-AI 通过代币对 GPT-3 使用费进行收费,这同时计算提示和答案。对于 OPEN-AI,750 个单词相当于大约 1000 个令牌,或者令牌与单词的比率为 1.4。令牌的定价取决于您所采用的计划。
我不知道有更准确的估算成本的方法。也许使用 Hugging Face 中的 GPT-2 分词器会有所帮助。我知道来自 GPT-2 标记生成器的标记在传递到 logit 偏差数组中的 GPT-3 时会被接受,因此 GPT-2 标记和 GPT-3 标记之间存在一定程度的等效性。
然而,GPT-2 和 GPT-3 模型不同,众所周知,GPT-3 比 GPT-3 具有更多参数,因此 GPT-2 估计可能较低。我确信您可以编写一个简单的程序,通过比较提示和令牌使用情况来估计价格,但这可能需要一些时间。
归档时间: |
|
查看次数: |
9462 次 |
最近记录: |