一、Tokenizer 和 Embedding两个模块 Tokenizer 1.ChatGPT 官方目前已经开始对服务收费了,收费方式主要是计算用户使用的 token 数,数量越多,收费越高。 2.token 是任何 NLP 神经网络 模型接收用户输入的最小粒度。 token 本身就是一些字符的组合,如英文单词#cat、中文词汇鞋子、英文词缀ly、中文汉字珂等,都可以看作是一个 token。 3.Tokenizer 算法 BPE 执行流程 Tokenizer 目前最流行的实现方法是 字符对编码 BPE(Byte Pair Encoding) 算法,它也是 ChatGPT 采用的算法。BPE 算法是根据一份 token 词(Vocabulary),将输入的文本拆解成若干个 token。其中,每一个 token 都存在于词表。 4.token 中一般都是以非常高频的字符组合构成的,而且这些 token 往往具备一定的语义。例如,newest被拆解为#new 和 est,前半部分是单词词根,后半部分是英文形容词最高级。
同样地,ChatGPT 模型在回答用户问题,输出答案时,也是首先输出 token 序列,再将 token 序列反转为正常的自然语言文本,这个操作叫做 D e-tokenization。它与 Tokenization 是完全互逆的操作。读者可以尝试把上面的 token 序列合并成完整的文本句子。 二、Byte-level BPE 算法 1.一种基于字节的 BPE 算法(Byte-level BPE)。这种方法,主要是为了克服基于字符的 token 词表,由于各种特殊字符数量太庞大导致效果变差。 2.除了我们常用的中文外,ChatGPT 可以随意操作英文、日文、韩文、法文等至少二十多种文字。这些语言的文字和符号更是多种多样,有英文拉丁字母ABCDabcd,中文汉字千百花鸟风月,西里尔字母БГД,日语假名ピンイ,当然也包括很多 emoji 特殊符号。 3.Unicode 编码是一种用于计算机表示全球范围内各种语言文字字符的标准编码方式,它为世界上所有的字符都分配了一个唯一的数字编号,解决不同国家和地区使用不同语言文字、字符集的问题。 Unicode 编码采用 16 进制表示,每个字符都有一个唯一的码点,例如汉字“中”在 Unicode 编码中的码点是U+4E2D,其中 U+ 表示 Unicode 编码,4E2D 是该字符的 16 进制码点。若以 UTF-8 编码为例,汉字“中”被转换为 3 个字节(byte) 的二进制数据:11100100 10111000 10101101。 4.BPE 的词表主要是根据训练文本语料统计得到的,训练的语料数量越大,得到的 BPE 词表越准确,越具有词根语义。