chatGPT是如何处理文字输入的
文字在进入 ChatGPT 模型之前,需要先经过一个转换,形成另外一种数据形式。在 ChatGPT 计算处理完之后,也需要将结果再做逆转换,形成文字形式,反馈给用户。这种转换包括两个步骤,Tokenizer 和 Embedding。本节主要介绍这两个模块。
1、Tokenizer
token 是任何 NLP 神经网络 模型接收用户输入的最小粒度。 token 本身就是一些字符的组合,如英文单词#cat、中文词汇鞋子、英文词缀ly、中文汉字珂等,都可以看作是一个 token。
将用户输入的文本转换为 token 序列的过程就叫做 Tokenizer。它包含两部分,一部分是从文字转换为 token(设置在进入 ChatGPT 之前),另一部分是将 token 转换为文字,也就是逆转换(设置在 ChatGPT 模型输出之后)。
Tokenizer 算法 BPE 执行流程
字符对编码 BPE(Byte Pair Encoding) 算法BPE 算法是根据一份 token 词表(Vocabulary),将输入的文本拆解成若干个 token。其中,每一个 token 都存在于词表。
BPE 算法就是根据上述 token 词表对文本进行匹配,从文本中拆分出存在于词表中的 token,将文本转换成如下的形式:
Byte-level BPE 算法
基于字节的 BPE 算法(Byte-level BPE)。这种方法,主要是为了克服基于字符的 token 词表,由于各种特殊字符数量太庞大导致效果变差。
所有的字符在计算机中都是以 Unicode 编码格式实现的。
Unicode 编码是一种用于计算机表示全球范围内各种语言文字字符的标准编码方式,它为世界上所有的字符都分配了一个唯一的数字编号,解决不同国家和地区使用不同语言文字、字符集的问题。 Unicode 编码采用 16 进制表示,每个字符都有一个唯一的码点,例如汉字“中”在 Unicode 编码中的码点是U+4E2D,其中 U+ 表示 Unicode 编码,4E2D 是该字符的 16 进制码点。若以 UTF-8 编码为例,汉字“中”被转换为 3 个字节(byte) 的二进制数据:11100100 10111000 10101101。
BPE 的词表是如何训练得到的?
BPE 的词表主要是根据训练文本语料统计得到的,训练的语料数量越大,得到的 BPE 词表越准确,越具有词根语义。
Tokenizer 的好处
#### 克服长尾效应 OOV
在英文单词中,最常出现的 5000 个单词占据了实际使用量的 90%。而那些极低频的单词数量极多,但总共加起来的实际使用量也不超过 2%。这就是自然语言的长尾效应 , 这种现象也出现在其它语言中
词嵌入
ChatGPT 的输入文字转换为 token 之后,还需要将 token 再转换为张量,这个过程叫做词嵌入( Embedding),同时 embedding 也指被转换后得到的张量本身。
在神经网络中,张量 ( Tensor ) 是指多维数组,它可以存储和处理大量的数据,是神经网络中最基本的数据结构。张量一般都以浮点数(小数的一种计算机表示形式)作为元素进行填充。
token 需要先转换为 浮点 数字,再进入模型中进行计算。将用户输入的 token 转换为浮点数张量的过程,就叫做词嵌入(Embedding) 。
### Embedding 的好处
#### Embedding 方便接入大规模神经网络
#### Embedding 抽象了 token 的语义