中英文翻译

实验任务

(1)基于序列到序列(Seq2Seq)学习框架,设计并训练一个中英文机器翻译模型,完成中译英和英译中翻译任务。具体模型选择可以参考如LSTM,GRU,Transformer等,但不做限制;

(2)实验数据集为WMT18新闻评论数据集News Commentary v13,整个语料库分训练集(约252,700条)、验证集和测试集(分别约2,000条)三部分,每部分包含中英文平行语料两个文件,全部语料已预分词处理;

(3)根据指定的评价指标和测试集数据评价模型性能。

实验知识

由于网络上有很多关于seq2seq的详细知识这里只是简单介绍,不是本实验的重点部分

seq2seq

seq2seq 是一个 Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。

这个结构最重要的地方在于输入序列和输出序列的长度是可变的,可以用于翻译,聊天机器人,句法分析,文本摘要等。

 

Encoder-Decoder结构

中英文翻译

 

(其中的 RNNCell 可以用 RNN ,GRU,LSTM 等结构)

Encoder

Encoder 部分是一个RNNCell(RNN ,GRU,LSTM 等)结构

每个 timestep, 我们向 Encoder 中输入一个字/词,直到我们输入这个句子的最后一个字/词。然后输出整个句子的语义向量 c

  • 每个时刻输入一个词,隐藏层状态根据公式改变。其中**函数f可以是sigmod,tanh,ReLU,sotfplus,LSTM等。

  • 读完序列的每一个词之后,会得到一个固定长度向量

Decoder

Decoder 根据 Encoder 得到的句向量c,一分析得出信息

本次实验我们使用的是双层的LSTM模型,所以下面简介一下LSTM

LSTM

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

相比RNN只有一个传递状态 ,LSTM有两个传输状态,一个 (cell state),和一个 (hidden state)。(Tips:RNN中的 对于LSTM中的 )

实验设计

Step1:构造字典

统计单词出现频率

中英文翻译

 

根据单词出现频率构造字典

中英文翻译

 

字典构造结果

中英文翻译

 

Step2:数据处理

实现词汇映射到数字的过程

中英文翻译

 

数据处理结果

中英文翻译

 

Step3:模型搭建

Step3.1:init初始化

中英文翻译

 

Step3.2:encoder

中英文翻译

 

Step3.3:decoder

中英文翻译

解码器,输出outputs为每一步顶层LSTM的输出

 

Step3.4:优化部分

梯度下降优化

tf.train.GradientDescentOptimizer

Step4:训练数据

获取单词ID

 

根据中文词汇表获取中文ID,计算bleu值

中英文翻译

 

计算perplexity值

 

 

训练结果

训练平台:google drive

训练数据:20000train集合

总共训练了10000步

 

训练次数较少时

 

英译中bleu大小仅能保持在0.2-0.3

 

perplexity值在700-800

训练次数增大

 

英译中bleu大小为0.4-0.5

 

perplexity值在100-200