Pytorch学习记录-torchtext和Pytorch的实例3
0. PyTorch Seq2Seq项目介绍
在完成基本的torchtext之后,找到了这个教程,《基于Pytorch和torchtext来理解和实现seq2seq模型》。
这个项目主要包括了6个子项目
使用神经网络训练Seq2Seq使用RNN encoder-decoder训练短语表示用于统计机器翻译- 使用共同学习完成NMT的构建和翻译
- 打包填充序列、掩码和推理
- 卷积Seq2Seq
- 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
上一个模型中,为了降低信息压缩,我们进行了如下操作:
- 每一个时间步,向Decoder传入Encoder生成的上下文向量z。
- 向Linear层传入上下文向量、输入单词、隐藏状态。最后得到预测结果。
尽管降低了部分压缩,但是上下文向量依旧需要包含所有源语句子信息。而这个模型做了调整,能够在每一个时间步,让Decoder回看整体源语句子(通过隐藏状态)。这个,就是使用注意力机制。
注意力:
- 计算注意力向量,其长度为源语句子长度。注意力向量具有每个元素在0和1之间的属性,并且整个向量总和为1。
- 计算句子隐藏状态加权和。
- 基于以上计算加权源向量
在解码阶段,每一个时间步都要计算一个新的加权源向量,使用这个加权源向量作为Decoder的输入,与Linear层一起做出预测。