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中被编码为一个一个词,在句首和句尾增加作为标签。每一个时间步,encoder输入是当前单词x_t?和上一时间步的隐藏状态h_{t-1}每一个时间步,encoder输出是新的隐藏状态h_t可以将隐藏状态当成表示句子的向量。这样公式就出来了。
- h_t=EncoderRNN(x_t,h_{t-1})
这里的RNN可以是任何卷积结构(LSTM或是GRU)。当输入句子最后一个单词传入RNN后,这时的隐藏状态h_T?就是上下文向量,在这里表示为h_T=z就是示意图中中间的那个z。 有了向量z可以开始对目标句子进行解码,生成目标语言的句子。这样decoder的公式也有了。
- s_t = \text{DecoderRNN}(y_t, s_{t-1})
在decoder中,我们从隐藏状态转到实际单词,每一个时间步都使用s_t?来进行预测\hat{y}t $。
注意我们总是使用作为decoder的第一个输入,$ y_1 $,但是对于后续输入,$ y{t> 1}我们有时会使用序列中的实际的基础真值,y_t?有时使用我们的解码器预测的单词\hat {y} _ {t-1}?。这被称为教师强制,您可以在这里阅读更多内容。在训练/测试我们的模型时,我们总是知道目标句子中有多少单词,所以一旦我们达到那么多,我们就会停止生成单词。在推理(即现实世界使用)期间,通常保持生成单词直到模型输出标记或者在生成一定量的单词之后。一旦我们得到了预测的目标句子,\hat {Y} = {\hat {y} _1,\hat {y} _2,…,\hat {y} _T }我们将它与我们的比较实际目标句子,Y = {y_1,y_2,…,y_T }以计算我们的损失。然后我们使用此损失来更新模型中的所有参数。