Seq 2 Seq

在 NLP 中,Seq 2 Seq 的模型很常用,因为大多数问题都可以转化为 QA,然后用 S2S 模型解决(当然,进行额外的客制化的模型会取得更好的效果)

甚至可以用来做文法解析。Grammar as a Foreign Language

Encoder & Decoder

Encoder

  • Post-Normalization

先做 Layer Normalization,然后再进行残差连接,效果可能会更好。

import torch.nn as nn
 
self.encoder = nn.TransformerEncoderLayer(d_model=d_model,dim_feedforward=4*d_model, nhead=8, dropout=dropout, batch_first=True, norm_first=True)
 
# norm_first is important for this!

Decoder

Autoregressive(AT)

  1. Masked Self-Attention

因为 Decoder 是一个个输出的,所以事实上,在运行时根本没有后面序列的信息。因而训练的时候也要遮住后面序列的信息,来模仿实际情况。

  1. Cross Attention

至于 encoder 的输入,具体从哪一层拿,也有很多讨论。

Training

  • Teacher Forcing:训练时,使用正确答案作为输入,在 Mask self-attention 层会盖住未来序列

  • Copy Mechanism

  • Guided Attention:适合用于语音识别,语音合成

  • Beam Search

具体效果如何要视任务而定,例如完成句子、语音合成,都需要一些随机性,因此往往不用 Beam Search

  • Scheduled Sampling

训练时,给数据内加入一些错误的内容,防止测试时一步错步步错。

Non-Autoregressive(NAT)

其他注意事项

  • 如果 Padding 的话,一定要用 mask 挡住,防止参与注意力计算,以及防止参与 Loss 计算等。