1.Embedding 层:将自然语言序列转为机器能够处理的向量。输入的自然语言序列后,把每个词(或者子词)转换成一个固定长度的数字向量。
例子(有一本 “词 → 向量”的大字典:字典里有几万个词,每个词对应一个独一无二的编号(比如“我”是0,“喜欢”是1)。输入句子“我喜欢你”时,先查字典得到编号序列 [0, 1, 2]。)
Embedding 层内部存着一个巨大的表格(可训练的矩阵),根据编号取出对应的向量行。
最终输出一个形状为 (句子长度, 向量维度) 的数字矩阵,供神经网络处理。
2.位置编码:输入序列的顺序是重要的信息,可以利用。(位置编码就像给每个词贴上“第几排第几座”的座位号,防止模型认错顺序)
注意力机制的问题:它看不出词和词的先后顺序。在它眼里,“我喜欢你”和“你喜欢我”的单词集合一模一样,会得出相同的理解。
为了让模型知道每个词在第几个位置,Transformer 引入了 位置编码。
根据序列中 token 的相对位置对其进行编码(使用正弦和余弦函数计算不同位置的编码值),再将位置编码加入词向量编码中。
3.一个完整的Transformer
输入 → 经过 Tokenizer 变成编号序列。
Embedding 层 → 查表变成词向量矩阵。
位置编码 → 给词向量加上位置。
Encoder 堆叠:多层自注意力模块反复融合输入序列的上下文信息,输出一个语义编码矩阵供解码器查阅。
Decoder 堆叠:先用掩码自注意力约束当前生成词只能看到过去内容,再用交叉注意力从编码器输出中提取相关上下文,逐词生成目标序列。
线性层 + Softmax → 把最后输出的向量映射回词表大小的概率分布,选出概率最高的词作为下一个输出。