Pytorch学习记录-torchtext和Pytorch的实例1
0. PyTorch Seq2Seq项目介绍
在完成基本的torchtext之后,找到了这个教程,《基于Pytorch和torchtext来理解和实现seq2seq模型》。
这个项目主要包括了6个子项目
- 使用神经网络训练Seq2Seq
- 使用RNN encoder-decoder训练短语表示用于统计机器翻译
- 使用共同学习完成NMT的堆砌和翻译
- 打包填充序列、掩码和推理
- 卷积Seq2Seq
- Transformer
1. 使用神经网络训练Seq2Seq
第一篇教程介绍了PyTorch与TorchText seq2seq项目的工作流程。我们将介绍使用encoder-decoder模型的seq2seq网络的基础知识,如何在PyTorch中实现这些模型,以及如何使用TorchText完成文本处理方面的所有繁重任务。该模型本身将基于使用多层LSTM的神经网络的序列到序列学习的实现。完成一个GE翻译器,这个模型是一个通用seq2seq的相关问题,比如摘要。
[基于的论文《Sequence to Sequence Learning with Neural Networks》]简书貌似不让放这样的外链,大家可以搜一下看看Google2014年的。
1.1 简介,对论文中公式的解读
最普通的seq2seq模型是encoder-decoder模型,通常使用RNN对源语进行编码,生成独立的向量。这个教程中将独立向量成为上下文向量,我们可以将上下文向量视为整个输入句子的抽象表示。然后,该向量由第二个RNN进行解码,通过一次生成一个字来学习输出目标(输出)句子。
这张图是流程图,输入德语“guten morgen”,在绿色的encoder中被编码为一个一个词,在句首和句尾增加<sos><eos>作为标签。
- 每一个时间步,encoder输入是当前单词和上一时间步的隐藏状态
- 每一个时间步,encoder输出是新的隐藏状态
可以将隐藏状态当成表示句子的向量。这样公式就出来了。
这里的RNN可以是任何卷积结构(LSTM或是GRU)。
当输入句子最后一个单词传入RNN后,这时的隐藏状态就是上下文向量,在这里表示为就是示意图中中间的那个z。
有了向量,可以开始对目标句子进行解码,生成目标语言的句子。这样decoder的公式也有了。
在decoder中,我们从隐藏状态转到实际单词,每一个时间步都使用来进行预测
。
注意我们总是使用<sos>作为decoder的第一个输入,,但是对于后续输入,,我们有时会使用序列中的实际的基础真值,有时使用我们的解码器预测的单词。这被称为教师强制,您可以在这里阅读更多内容。
在训练/测试我们的模型时,我们总是知道目标句子中有多少单词,所以一旦我们达到那么多,我们就会停止生成单词。在推理(即现实世界使用)期间,通常保持生成单词直到模型输出<eos>标记或者在生成一定量的单词之后。
一旦我们得到了预测的目标句子,,我们将它与我们的比较实际目标句子,,以计算我们的损失。然后我们使用此损失来更新模型中的所有参数。