Pytorch学习记录-使用共同学习完成NMT的构建和翻译

Pytorch学习记录-torchtext和Pytorch的实例3

0. PyTorch Seq2Seq项目介绍

在完成基本的torchtext之后,找到了这个教程,《基于Pytorch和torchtext来理解和实现seq2seq模型》。
这个项目主要包括了6个子项目

  1. 使用神经网络训练Seq2Seq
  2. 使用RNN encoder-decoder训练短语表示用于统计机器翻译
  3. 使用共同学习完成NMT的构建和翻译
  4. 打包填充序列、掩码和推理
  5. 卷积Seq2Seq
  6. Transformer

3. 使用共同学习完成NMT的堆砌和翻译

这一节通过实现基于共同学习的NMT来学习注意力机制。通过在Decoder部分提供“look back”输入语句,允许Encoder创建Decoder隐藏状态加权和的上下文向量来进一步缓解信息压缩问题。通过注意力机制计算加权和的权重,其中Decoder学习如何注意输入句子中最相关的单词。
本节依旧使用Pytorch和Torchtext实现模型,参考论文《 Neural Machine Translation by Jointly Learning to Align and Translate》

3.1 介绍

首先看一下一般的Encoder-Decoder


Pytorch学习记录-使用共同学习完成NMT的构建和翻译_第1张图片
image.png

上一个模型中,为了降低信息压缩,我们进行了如下操作:

  • 每一个时间步,向Decoder传入Encoder生成的上下文向量z。
  • 向Linear层传入上下文向量、输入单词、隐藏状态。最后得到预测结果。

尽管降低了部分压缩,但是上下文向量依旧需要包含所有源语句子信息。而这个模型做了调整,能够在每一个时间步,让Decoder回看整体源语句子(通过隐藏状态)。这个,就是使用注意力机制。
注意力:

  • 计算注意力向量,其长度为源语句子长度。注意力向量具有每个元素在0和1之间的属性,并且整个向量总和为1。
  • 计算句子隐藏状态加权和。
  • 基于以上计算加权源向量

    在解码阶段,每一个时间步都要计算一个新的加权源向量,使用这个加权源向量作为Decoder的输入,与Linear层一起做出预测。
Pytorch学习记录-使用共同学习完成NMT的构建和翻译_第2张图片
image.png

你可能感兴趣的:(Pytorch学习记录-使用共同学习完成NMT的构建和翻译)