近些年,NMT 不再依赖预先设计的特征函数。然而,NMT 的目标是设计一个能通过语料可训练的模型(记为 M )。它始于源语言的表达,终于目标语言的表达。 虽然,以 word 作为最小单元,对于自然语言来说可能不够客观,但是,对于基本原理解释,却不失一般性地,用字典中的 index 表示一句话中的每个 word 。设 为源语言序列,为目标语言序列。下面主要讨论建立一个 NN 来近似条件概率 。 对于NLP的任务有个特点,输入和输出的序列长度 T 或 T’ 都不是固定的。目前大多数算法用 RNN 来解决此问题。广泛使用的前馈 NN ,例如 CNN ,不能保持内部状态,因为当一个 sample 进入前馈 NN 后,网络内部状态或隐层单元的激活都从头计算,不受先前 sample 计算的状态影响。然而,RNN 保留了 word 序列输入的内部状态。假设在 t 步,RNN 依赖之前的积累 计算当前输出向量和内部状态,可简单认为,它体现了之前所有信息,公式如下: [Pascanu et al.,2014] 阐述了几种 RNN 类型,框架如下图:
其中 RNN 中的激活函数通常采用变量敏感的非线性函数,以起到仿射变换的目的。 其实,在创新此公式 :上还有很多可做的,前人工作中著名的有 LSTM [Hochreiter and Schmidhuber, 1997]、GRU [Cho et al., 2014]等: 言归正传,用上述 RNN 建模机器翻译中的序列概率问题,需要把问题转成 recurrent 形式:
所以 t 时刻的 RNN 模型可表示如下:
输出基于截止到 t-1 步内的历史的概率分布,即 RNN 在每一步都基于历史预测下一个 word 。 3. 机器翻译的 encoder-decoder 框架 试想一下,我们大脑是怎样把 “ I love you ” 翻译成”我爱你“的呢?一种思路是,翻译过程包括2个过程:一个 encoder 和一个 decoder ,前者把一序列的 words 转换成一系列的神经激活,后者从激活中得到目标语言的序列。在 2013 年 Kalchbrenner and Blunsom 在 Oxford 开始采用此框架,随后著名的工作有 Sutskever et al., 2014; Cho et al., 2014; Bahdanau et al., 2015等。此框架本身不对 encoder 和 decoder 的模型做任何限制,只是大多数论文都用 RNN 表示。下图是一个 NMT 的总体框图:
首先,encoder 过程按照 Fig. 4 中可分为 3 步: 1. 把一个 word 表示为 one-hot 向量; 2. one-hot 向量转化成连续空间表达(例如,word2vec); 3. 由 RNN 网络 summarize 成一个序列; 句子中,每个 word 表示成 one-hot 向量或 1-of-K 编码向量,这种表达让 words 之间失去 relation 信息,是一种最简单的表示。encoder 通过矩阵 E 把每个 word 线性映射成一个连续向量,此向量中的每个元素,通过最大化翻译模型目标来更新。把一序列的 words 转换成一序列的连续向量,输入到 RNN 中,利用 RNN 能 summarize 序列的能力(长时记忆),使得内部状态能表示完整一句的 summary 信息。 为了衡量此 summary 信息到底长啥样,Sutskever et al. 2014做了个实验,通过 PCA 把多维向量映射成 2 维空间上,从而在下图能粗略地观察到原始空间中 summary 向量的相互“距离”。
图中我们可以看到 ,相似句子“距离”更近 ,上述 summary 向量一定程度保留了句子的语义(semantics)和句法结构(syntax)信息(请参见)。 然后,decoder 按照 Fig. 4中可分为3步: 1. 计算内部状态向量 ; 2. 计算下一 word 的概率; 3. 采样下一个 word ; 源语言句子的 summary 向量、前一时刻预测出的词 和前一时刻的内部状态按如下公式计算出 : (责任编辑:本港台直播) |