直接看代码:github传送门
数据集:随机生成如下形式的日期对,输入是人可以阅读的各种日期形式,输出为正规化的日期形式。参考吴恩达老师网易云深度学习课程作业5。
输入 | 输出 |
---|---|
monday march 7 1983 | 1983-03-07 |
9 may 1998 | 1998-05-09 |
08 jul 2008 | 2008-07-08 |
9/10/70 | 1970-09-10 |
1. 数据预处理
机器翻译任务需要在输出的句子前后添加一个标签做标志,通常在输出句子开头添加一个<start>标签,末尾添加一个<end>标签。
2. 模型定义
翻译模型的任务就是将源语言的句子转换为相同语义的目标语言的句子,在本实验用到的数据集中,源语言就是人可读的日期,目标语言就是机器可读的日期。
seq2seq模型是一种基于编码解码思想的模型,具体而言就是先对源语言句子进行编码(encoding),得到一个包含源句子语义信息的状态矩阵,然后对状态矩阵进行解码(decoding),输出转换后的句子。
编码(encoding)部分前面在介绍使用RNN做文本分类时有做过,其核心目的就是得到包含句子语义的矩阵。
解码(decoding)部分需要注意,在编码完成后得到了包含句子语义的矩阵,通常是源语言句子得到的最后一个time step的隐状态矩阵,我们使用该矩阵作为解码RNN的初始隐状态矩阵,这样解码器就得到了源句子包含的语义信息,有了隐状态矩阵,解码RNN每个time step的输入是什么呢?下面的图展示的训练过程中的处理方式:
对于训练数据集,我们知道源句子对应的目标句子是什么,所以在解码的时候可以在每一个time step输入标准答案,如上图所示,输入到decoder中的序列是标准答案前加上一个<start>标签[ < s t a r t > , x 1 , x 2 , x 3 , .