基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Transformer在处理输入序列时,是如何将文本转化为模型可以理解的向量的?

知识点图片

Transformer 将自然语言文本转化为模型可以理解的向量,是一个经过多步处理的流水线过程。因为计算机本质上只能处理数字,而 Transformer 的核心机制(自注意力机制)又没有处理序列顺序的能力,所以这个转化过程必须同时解决“词汇的数学表示”“顺序信息的保留”两个问题。

具体来说,这个过程可以分为以下 5 个核心步骤

1. 分词(Tokenization)—— 拆解文本

首先,模型需要将连续的文本字符串切分成一个个基本的处理单元,称为 Token

  • 过去的方法:按空格拆成单独的词(Word-level),或者拆成单个字母/汉字(Character-level)。
  • Transformer 通常使用的方法子词分词(Subword Tokenization),如 BPE、WordPiece。这种方法能有效解决生僻词(OOV)问题,同时保持语义。
  • 举例
    输入句子:"Transformer is amazing!"
    分词后可能变成:["Transform", "##er", "is", "am", "##azing", "!"]

2. 词表映射(Vocabulary Mapping)—— 转化为数字

分词结束后,模型会查阅一个预先构建好的“字典”(Vocabulary),把每一个 Token 映射成一个唯一的整数索引(ID)。

  • 举例
    "Transform" -> 1045
    "##er" -> 312
    "is" -> 2003
    此时,一段文本变成了一个整数数组[1045, 312, 2003, ...]

3. 词嵌入(Token Embedding)—— 转化为高维稠密向量

整数 ID 只是一个编号,不能表达词与词之间的语义关系(比如 ID 10 和 ID 11 之间并没有必然联系)。因此,需要将这些离散的数字转化为高维连续的浮点数向量

  • 机制:模型内部维护着一个巨大的词向量矩阵(Embedding Matrix)。矩阵的行数是词表大小,列数是向量维度(通常是 512、768 或更大,记为 dmodeld_{model})。
  • 作用:通过查表操作,每个 ID 都会提取出一条对应的向量。在这个高维空间中,语义相近的词(比如“狗”和“猫”)它们的向量距离会比较接近。
  • 举例
    ID 1045 -> [0.12, -0.45, 0.89, ..., -0.02] (一个 768 维的向量)
  • 注意:这个词向量矩阵是可学习的参数,会在模型训练过程中不断更新优化。

4. 位置编码(Positional Encoding)—— 注入顺序信息

这是 Transformer 独有且非常关键的一步!
与 RNN(循环神经网络)按顺序逐个处理词不同,Transformer 是并行处理所有输入的。在 Transformer 眼中,"我 爱 你""你 爱 我" 如果仅通过词嵌入,输入给模型的集合是一模一样的。为了让模型知道每个词在句子中的位置,必须人为地加入位置信息。

  • 机制:为每个位置(第1个词、第2个词...)生成一个与词向量维度完全相同(比如 768 维)的位置向量
  • 计算方式
    • 绝对位置编码:在原版 Transformer(《Attention Is All You Need》)中,使用了不同频率的正弦和余弦函数(Sine/Cosine)来直接计算出位置向量。
    • 可学习位置编码:像 BERT、GPT 早期版本,位置向量也是像词向量一样通过训练学出来的。
    • 相对位置编码:现代大模型(如 LLaMA、ChatGLM)多采用旋转位置编码(RoPE),在后续计算中引入相对位置信息。

5. 组合形成最终输入(Input Representation)

最后一步非常简单,直接将词嵌入向量(Token Embedding)与对应的位置向量(Positional Encoding)进行相加(Element-wise Addition)。

最终输入向量=词向量+位置向量最终输入向量 = 词向量 + 位置向量

  • 为什么是相加而不是拼接? 拼接会增加向量的维度,增加计算量。相加相当于把空间位置信号叠加到语义信号上,高维空间具有足够的容量同时容纳这两种信息,神经网络可以通过训练学会从中分离出语义和位置。

总结流程图

我们可以用一个简单的流程图来回顾整个过程:

plaintext
原始文本:    "I love AI"
     ↓
1. 分词:     ["I", "love", "A", "##I"]
     ↓
2. 映射ID:   [10, 234, 55, 992]
     ↓
3. 词嵌入:   [ [0.2, 0.5...], [-0.1, 0.8...], [0.9, 0.1...], [-0.5, 0.4...] ]  (语义信息)
     +       (直接相加)
4. 位置编码: [ [0.0, 1.0...], [0.8, 0.5...], [0.9, -0.4...], [0.1, -0.9...] ] (位置信息)
     ↓
5. 最终向量: [ [0.2, 1.5...], [0.7, 1.3...], [1.8, -0.3...], [-0.4,-0.5...] ]

经过这 5 步,一段自然语言文本就变成了一个矩阵(形状为 [序列长度, 向量维度]),这就是 Transformer 中自注意力层(Self-Attention)所接收到的标准数学输入。

00:00
00:00