大模型token分词和词向量

在构建大模型的过程中,token分词与词向量扮演着举足轻重的角色。它们不仅是模型理解文本语言的基础,还深刻影响着模型的性能与精度。

一、Token分词

首先,大模型会对用户输入的文本进行Token分词,这一步是将原始文本分解为更小的Token单元,如单词、子词或字符。不同的模型使用不同的Token分词策略,例如BPE(Byte-Pair Encoding)或WordPiece(用于 BERT)等。例如有一个句子:I am a student,经过分词(tokenization)后,每个token默认是以字符串的形式存在的,以下是整个过程的详细说明:分词是将句子转换为 token 的过程,在这个例子中,句子 “I am a student” 被分成了以下几个token:
“I”
“am”
“a”
“student”
在这个阶段,每个token仍然是一个字符串,表示为:Tokens=[“I”,”am”,”a”,”student”]这些token还没有被转换为数值向量,它们仅仅是字符串,不能直接用于模型的计算。Token分词是将文本分割成可管理的单元,使得模型能够有效理解和处理。完整字符直接输入会导致信息丢失或复杂性增加,而Token化能保持语义、减少稀疏性,最终提高模型的训练效率和预测准确性。

如何选择token化的方法

选择Tokenization(分词)方法通常取决于多个因素,包括但不限于使用的具体自然语言处理(NLP)任务、所处理文本的语言特性以及所采用的机器学习或深度学习模型的要求。并不是所有的Tokenization方法都是通用的,不同的模型可能会有自己的Tokenization方式,特别是那些预训练的模型,如BERT、GPT等,它们往往使用特定的方法来处理输入数据。以下是一些考虑Tokenization方法时需要考虑的因素:

  • 任务需求
    不同的任务可能需要不同的分词粒度。例如,对于情感分析而言,词级别的信息可能更为重要;而对于命名实体识别,字符级别的信息可能会更有用。
  • 语言特性
    不同语言的结构决定了适合它们的分词策略。例如,英语和其他以空格分隔单词的语言可以使用简单的基于空格的分词方法,而像中文这样的语言则需要更复杂的分词技术。
  • 模型要求
    一些现代的预训练模型使用特定的分词方法,如WordPiece(用于BERT),BPE(Byte Pair Encoding,用于GPT-2),或者SentencePiece(一种无空格的分词工具)。这些方法可以帮助模型更好地理解和处理未见过的词汇。
  • 上下文相关性
    某些Tokenization方法能够保留上下文信息,这对于理解语义非常重要。例如,在处理长句子时,能够捕捉到上下文依赖性的分词方法会更有优势。
  • 计算效率
    在处理大规模数据集时,分词的速度和内存消耗也是重要的考量因素。
  • 可解释性
    在某些应用场景中,分词结果的可解释性也是一个重要因素。例如,在医疗领域,保持术语的一致性和准确性是至关重要的。

二、词向量(Embedding)

接下来,模型会将这些Token转换为数值表示,即向量化。具体来说,模型将每个Token映射到一个高维稠密向量空间。这些向量能够捕捉到词的语义信息和上下文关系。在分词之后通常使用嵌入层(Embedding Layer)来实现这一点。嵌入层会将每个token映射到一个高维空间,例如12288维(gpt3)。

假如本次输入的就是上面这句话,那么embeding层会生成一个4x12288维的矩阵,作为encoder层的输入在Transformer架构中,这一步通常是通过一个嵌入层(Embedding Layer)来完成的。嵌入层负责将每个Token转换成对应的向量表示。

三、token分词、词向量与大模型的关系

向量化使用的嵌入矩阵因不同模型而异。像LLaMA-2和GPT-4这样的模型,它们的嵌入矩阵会根据各自的词汇表(vocabulary)和训练数据的不同而有所差别。嵌入矩阵的主要差异体现在以下几个方面:

  • 词汇表(vocabulary)不同
    每个模型都有自己的词汇表,这取决于模型在训练时使用的Token化方式、数据集、语言以及预处理步骤。例如,LLaMA-2和GPT-4可能使用不同的Token化算法(如BPE或WordPiece),并且针对的语言任务可能不同,因此它们的词汇表也会不同。词汇表的不同意味着每个模型的词表ID映射到嵌入矩阵的方式也会有所不同。
  • 嵌入矩阵的大小不同
    嵌入矩阵的大小由词汇表的大小和词向量的维度决定。不同模型的词汇表大小和嵌入向量维度可能不同,因此嵌入矩阵的维度也会不同。例如:如果LLaMA-2的词汇表有50,000个词,每个词的嵌入向量维度是768,那么其嵌入矩阵的大小就是50,000x768。如果GPT-4的词汇表更大,嵌入矩阵的大小就可能是100,000x1024,因为模型可能使用了更大的词汇表和更高维度的词向量。
  • 嵌入矩阵的初始化与学习
    嵌入矩阵在模型的训练过程中通过训练数据进行学习。虽然在模型训练之前,嵌入矩阵可能是随机初始化或使用预训练的嵌入向量(如GloVe、Word2Vec等),但在训练过程中,嵌入向量会根据模型的损失函数和训练任务进行更新,从而学习到具体的语义表示。
    嵌入矩阵在模型训练结束后一般是固定的,即不再进一步调整(除非在微调过程中进行再次训练),这意味着一旦LLaMA-2或GPT-4完成训练,其嵌入矩阵中的每个词向量就确定了。在使用模型时(推理阶段),这些嵌入向量会作为输入送入模型的后续层进行处理,不会发生变化。