一、ChatGPT 模型的输入输出转换概述
在之前的内容里,我们已经清楚 ChatGPT 模型的输入和输出本质是一个 “文字接龙” 式的语言模型。文字在进入 ChatGPT 模型之前和得出结果之后,都需要进行转换,这个转换包含 Tokenizer 和 Embedding 两个重要模块,本节就着重对这两部分进行介绍。
(一)Tokenizer 模块
1. Tokenizer 的基本概念与收费关联
ChatGPT 官方已对服务收费,收费依据是用户使用的 token 数。那么什么是 token 呢?它是任何 NLP 神经网络模型接收用户输入的最小粒度,比如英文单词、中文词汇、词缀、单个汉字等都可看作一个 token。将用户输入的文本转换为 token 序列的过程就是 Tokenizer,它包括文本转 token(进入 ChatGPT 之前)和 token 转文字(模型输出之后)两部分。
2. BPE 算法执行流程
Tokenizer 目前常用的实现方法是字符对编码 BPE 算法,ChatGPT 也采用此算法。它依据一份 token 词表,将输入文本拆解成若干个存在于词表中的 token。
以 “The newest car has a lower price and the lowest fuel.” 为例,假设已有特定的 token 词表,该文本会被拆分成如 “#The, #new, est, #car, #has, #a, #low, er, #price, #and, #the, #low, est, #fuel,.” 这样的 15 个 token 形式。英文单词一般首字母添加 #作为起始标识,一些单词会被拆分,像 newest 拆成 #new 和 est。对于中文,常用汉字虽多但也可采用类似算法,不过 token 开头一般不添加 #符号,多数中文以单字为 token。
3. Byte-level BPE 算法
除了基于字符的 BPE 算法,还有基于字节的 Byte-level BPE 算法。由于 Unicode 编码下各种语言的字符形式多样,直接基于字符构造 token 词表可能过于庞大,影响模型训练,而 Byte-level BPE 算法把文本的字节作为直接操作对象,能有效克服这一问题。比如 “中” 字在基于字符的 BPE 算法中当作一个字符匹配 token,在 Byte-level BPE 算法中则当作 3 个字节进行匹配。
4. BPE 的词表训练
BPE 的词表主要根据训练文本语料统计得到,通过不断提取高频字符对放入词表,当达到预定最大数 N 时,就得到可用于执行流程的最终词表。
5. Tokenizer 的好处
- 克服长尾效应 OOV:自然语言存在长尾效应,低频词若直接作 token 可能不在词表中,影响 NLP 模型性能。Tokenizer 采用 BPE 算法可避免低频词作为 token,比如 #strangest 可能不在词表,但 #strang 和 est 可能在。
- 多语言支持:早期 NLP 模型功能单一,仅支持一种语言。而 BPE 算法使词表可包含多种语言字符,支持 ChatGPT 的多语言处理功能。
(二)Embedding 模块
1. Embedding 的基本概念
ChatGPT 将输入文字转换为 token 后,还需将 token 转换为张量,这个过程叫词嵌入(Embedding),得到的张量本身也叫 Embedding。在神经网络中,张量是多维数组,是基本的数据结构,一般以浮点数填充。将用户输入的 token 转换为浮点数张量的过程就是 Embedding,模型计算完后也要将浮点数转换为 token 输出。
2. Embedding 的具体操作示例
仍以上述句子为例,假设 token 词表数量为 N,每个 token 用 M 维浮点数张量表示,如 #price 对应的 embedding 是一个 M 维向量。所有词表组成 N×M 维度的张量,输入给 ChatGPT 的 token 对应的 embedding 可按顺序排列成一组张量输入模型。同时,要考虑 token 的顺序,需明确标识出每个 token 的位置张量(Position Embedding),两者融合后输入模型。对于多轮对话,不同部分信息(如输入 1、输出 1、输入 2 等)作为 segment,它们共享同一个 segment embedding,输入给 ChatGPT 的 embedding 可由多种 embedding 相加表示。
3. Embedding 的好处
- 方便接入大规模神经网络:早期 NLP 直接处理文本字符串,没有 Embedding 操作。Embedding 将 token 转换为固定维度张量,使 NLP 迈入深度神经网络领域,便于扩展模型规模。
- 抽象了 token 的语义:训练好 ChatGPT 模型后,计算语义相近词汇对应的 embedding 向量的余弦距离,可发现语义相近的词汇其 embedding 向量距离更近,说明 Embedding 建立了自然语言语义与数学的关联关系。
二、总结
Tokenizer 负责将模型输入的文字转换为 token 序列,ChatGPT 主要采用 BPE 算法实现 Tokenizer 功能。而 Embedding 则将 token 序列映射为张量矩阵,从而方便模型进行张量矩阵运算,这两个模块在 ChatGPT 模型的输入输出转换过程中起着至关重要的作用。