跳到主要内容

编码器和解码器

总体来看,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

这种编码格式更符合人们的直觉。但是在实际情况中,语言编码的复杂性非常高:

  1. 由于几万个单词,有很多维度,人工编码不可行。
  2. 固定的编码不能很好的表征其含义,在不同语境下,相同的单词可能有不同的意义。

Transformer 的解码器和编码器,在翻译任务中,可以理解为 token 的特征提取器。解码器和编码器会自动提取源语言和目标语言中的 token 的特征。