本文主要讲解以recurrent neural network为主,以及使用Chainer和自然语言处理其中的encoder-decoder翻译模型。
并将英中机器翻译用代码实现。
Recurrent Neural Network
最基本的recurrent neural network(RNN),像下面的图一样,最典型的是追加3层神经网络隐含层的反馈。
这是非常简单的模型,本文接下来介绍的翻译模型就是由RNN作成。RNN是比以前的N - gram模型精度性能更加优越的模型。
上图写成式子的话就是
在这里暂且先是考虑“输入单词ID,预测下一个单词ID”的RNN语言模式吧。
首先定义模型。模式是学习可能的参数的集合,上图的W∗∗就是这个意思。这个场合W∗∗是全部线性算子(矩阵),所以使用chainer . functions内的Linear吗EmbedID。EmbedID是输入方面在one-hot向量的Linear,代替vector。
from chainer import FunctionSet from chainer.functions import * model = FunctionSet( w_xh = EmbedID(VOCAB_SIZE, HIDDEN_SIZE), # 输入层(one-hot) -> 隐藏层 w_hh = Linear(HIDDEN_SIZE, HIDDEN_SIZE), # 隐藏层 -> 隐藏层 w_hy = Linear(HIDDEN_SIZE, VOCAB_SIZE), # 隐藏层 -> 输出层 )
VOCAB_SIZE
是单词的数量、HIDDEN_SIZE是隐藏层的维数
。 然后,定义实际的解析函数forward。在这里基本是按照上图的网络结构来再现模型的定义和实际的输入数据,最终进行求值计算。语言模型的情况下,是用下面的式表示句子的结合概率。
以下是代码的例子。