本文阅读时间约5分钟 01 前言 在讨论模型的支持的上下文能力时,我们会听到类似:
当在讨论gpt的收费模式时,我们能看到:
在这些表示数量的地方,都用token在表示。token是一个什么概念,为什么要用它来作为计量单位,而不是字或词来作为单位呢? 02 为什么要用token 如果使用便于人理解的字符来作为计量单位会有什么问题吗? 我们知道,ChatGPT支持多种自然语言,而每种自然语言的词法和语法都不一样,且有些语言的单个字/词是不定长的。比如在英语中:hi和hello,两个都是一个单词,但长度却不一样。 中文虽然每个字看起来是定长的,但实际在计算机中存储的时候,也不是定长的。比如在UTF-8编码中,大部分的中文汉字占3个字节,而一些生僻字:比如𠜎,则占位4个字节。 因此,需要有另外的统一的计量方式,来支持不同的自然语言。 在许多自然语言处理模型,如Transformer架构(ChatGPT也是基于此架构),是基于token进行操作的。这些模型通常接受一系列的token作为输入,并输出相应的token序列。 token是这些自然语言处理模型的最小处理单位。在英文中,一个token可以是一个词,一个标点符号,或者一个空格。在中文中,一个token可能是一个字或一个词。 使用token作为计量单位可以使模型更容易地处理不同的语言和文本风格。不同的语言和文本风格可能有不同的词汇和语法结构,使用token作为计量单位可以帮助模型更好地理解和处理这些差异。 03 token是怎么计算的 在自然语言处理中,划分文本为token的过程称为'tokenization”,这个过程的目标是将输入的文本划分为一些可以被模型处理的单元。相关的算法有多种:
其中,ChatGPT就是采用的字词分割中的BPE算法进行tokenization。 04 BPE算法浅析 该算法主要分如下几步:
比如要划分:no cross, no crown,大致步骤如下: 注意:
对于ChatGPT来说,有一个粗略的token估算公式: 1000 tokens ≈ 750个英文单词 1000 tokens ≈ 500个汉字 参考:
90后技术宅 一线码农成长点滴分享 |
|