编码器和解码器
总体来看,Transformer 模型主要由两个块组成:
- Encoder (左侧):编码器接收输入并构建其表示 (其特征)。这意味着对模型进行了优化,以从输入中获得理解。
- Decoder (右侧):解码器使用编码器的表示 (特征) 以及其他输入来生成目标序列。这意味着该模型已针对生成输出进行了优化。
编码组件是若干个 encoder 堆叠而成,解码组件也是若干个 decoder 堆叠而成的。层数是一个超参数,在原始论文中设置为 6。
理解编码器和解码器
编码器和解码器实际 上是寻找 token 的内在特征。
举例来说:
- This pear is delicious.
- The orange is yummy.
- That watermelon tastes terrible.
假设我们现在对“pear”,“delicious”,“orange”,“yummy”,“watermelon”,“terrible”进行 one-hot 编码:
1 0 0 0 0 0 # pear
0 1 0 0 0 0 # delicious
0 0 1 0 0 0 # orange
0 0 0 1 0 0 # yummy
0 0 0 0 1 0 # watermelon
0 0 0 0 0 1 # terrible
但是这种编码不能代表词语之间的内在联系,因此有了 Word2Vec 编码,比如对于上面的单词, 我们编码成二维:
- 第一维:水果属性
- 第二维:好吃程度
[64, 0] # pear
[0, 80] # delicious
[57, 0] # orange
[0, 96] # yummy
[83, 0] # watermelon
[0, -77] # terrible
这种编码格式更符合人们的直觉。但是在实际情况中,语言编码的复杂性非常高:
- 由于几万个单词,有很多维度,人工编码不可行。
- 固定的编码不能很好的表征其含义,在不同语境下,相同的单词可能有不同的意义。
Transformer 的解码器和编码器, 在翻译任务中,可以理解为 token 的特征提取器。解码器和编码器会自动提取源语言和目标语言中的 token 的特征。