为了准备引入序列顺序信息,Transformer需要一种方式来表示输入词元本身,使其适合神经网络处理。原始文本首先通过词元化过程(使用字节对编码或WordPiece等方法)转换为整数序列,称为词元ID。然而,这些离散的词元ID不直接适合作为注意力机制或后续神经网络层的输入。它们无法体现不同词元之间的相似性或关联。输入嵌入层作为最初的转换步骤,将这些整数词元ID转换为密集的、连续的向量表示。这与独热编码等旧技术形成鲜明对比,后者会生成维度非常高且稀疏的向量(大部分为零,只有一个一)。而密集嵌入则能在维度低得多的空间中捕获词元间的语义相似性,这个空间通常称为 $d_{model}$(模型的隐藏维度)。机制:嵌入查找其核心是,输入嵌入层作用为一个查找表。该表由一个权重矩阵表示,我们称之为 $E$,其维度为 $V \times d_{model}$,这里的 $V$ 是词汇表的大小(模型识别的唯一词元总数),$d_{model}$ 是选定的嵌入维度。当给定输入词元ID序列 $[t_1, t_2, ..., t_n]$ 时,嵌入层会从矩阵 $E$ 中获取每个词元ID对应的向量。如果 $t_k$ 是位置 $k$ 的词元ID,它的嵌入向量 $e_k$ 就是矩阵 $E$ 中由 $t_k$ 索引的行:$$ e_k = E_{t_k} $$此操作有效地将输入序列中的每个整数ID映射到大小为 $d_{model}$ 的密集向量。digraph G { rankdir=LR; node [shape=plaintext, fontsize=10]; subgraph cluster_0 { label = "输入词元ID"; bgcolor="#e9ecef"; style=filled; "Input" [label="[ 71, 8, 1234, 5 ]\n(序列长度 = 4)"]; } subgraph cluster_1 { label = "嵌入矩阵 E (V x d_model)"; bgcolor="#d0bfff"; style=filled; "EmbeddingTable" [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD BGCOLOR="#dee2e6">ID</TD><TD>嵌入向量 (d_model)</TD></TR> <TR><TD>0</TD><TD>[0.1, -0.2, ...]</TD></TR> <TR><TD>...</TD><TD>...</TD></TR> <TR><TD BGCOLOR="#91a7ff">8</TD><TD BGCOLOR="#91a7ff">[0.5, 0.1, ...]</TD></TR> <TR><TD>...</TD><TD>...</TD></TR> <TR><TD BGCOLOR="#91a7ff">71</TD><TD BGCOLOR="#91a7ff">[-0.3, 0.9, ...]</TD></TR> <TR><TD>...</TD><TD>...</TD></TR> <TR><TD BGCOLOR="#91a7ff">1234</TD><TD BGCOLOR="#91a7ff">[0.8, -0.1, ...]</TD></TR> <TR><TD>...</TD><TD>...</TD></TR> <TR><TD BGCOLOR="#91a7ff">5</TD><TD BGCOLOR="#91a7ff">[0.0, 0.4, ...]</TD></TR> <TR><TD>...</TD><TD>...</TD></TR> <TR><TD>V-1</TD><TD>[...]</TD></TR> </TABLE> >]; } subgraph cluster_2 { label = "输出嵌入"; bgcolor="#96f2d7"; style=filled; "Output" [label=< <TABLE BORDER="0" CELLBORDER="0" CELLSPACING="2"> <TR><TD BGCOLOR="#a5d8ff">[-0.3, 0.9, ...]</TD></TR> <TR><TD BGCOLOR="#a5d8ff">[0.5, 0.1, ...]</TD></TR> <TR><TD BGCOLOR="#a5d8ff">[0.8, -0.1, ...]</TD></TR> <TR><TD BGCOLOR="#a5d8ff">[0.0, 0.4, ...]</TD></TR> </TABLE> >]; "Dim" [label="(序列长度 x d_model)"]; } "Input" -> "EmbeddingTable" [label="查找", style=dashed, arrowhead=open, constraint=false]; "EmbeddingTable" -> "Output"; }通过嵌入查找将离散词元ID映射到连续向量表示。可学习表示值得注意的是,嵌入矩阵 $E$ 不是固定的;它的值是可学习的参数。在训练过程中,梯度通过网络反向传播,嵌入向量被调整以最小化总损失函数。这意味着模型学会在 $d_{model}$ 维嵌入空间中,将具有相似语义或功能的词元放置得更近。例如,训练后“国王”和“王后”等词语可能最终具有相似的嵌入向量,反映出它们的语义关联。输出与维度输入嵌入层的输出是一个向量序列,$[e_1, e_2, ..., e_n]$,每个 $e_k$ 都是大小为 $d_{model}$ 的向量。此序列现在在连续空间中表示输入词元,但保留了原始序列长度。维度 $d_{model}$(例如512、768、1024)是Transformer架构的一个基本超参数,决定了模型大部分层中向量表示的宽度。这个词元嵌入序列是后续加入位置信息的基本组成,正如接下来将讨论的。尽管这些嵌入现在带有从数据中学到的语义,但它们仍然缺乏对其在原始序列中位置的固有表示,这是一个通过位置编码解决的局限。