NLP——机器翻译中的Seq2Seq

框架

在这里插入图片描述

简介

Seq2Seq,全称Sequence to Sequence(序列到序列),它是一种通用的编码器-解码器框架。这个框架最初是为了机器翻译构建的,但是后来也广泛应用到各种其他任务,包括文本摘要、会话建模和图像字幕等。最基础的 Seq2Seq模型包含了三个部分,即Encoder、Decoder以及连接两者的中间语义向量,Encoder通过学习输入,将 其编码成一个固定大小的语义向量C,继而将C传给Decoder,Decoder再通过对状态向量C的学习来进行输出。
在这里插入图片描述

Encoder

编码器(Encoder)是将输入序列通过非线性变换编码成一个指定长度的向量C(中间语义表示),得到C 有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给C,还可以对最后的隐状态做一个变换得到 C,也可以对所有的隐状态做变换。
在RNN中,当前时间的隐状态由上一时间的状态和当前时间输入决定的,即:
在这里插入图片描述
获得了各个时间段的隐藏层以后,再将隐藏层的信息汇总,生成最后的语义向量:
在这里插入图片描述
另一种最简单的方法就是将最后的隐藏层作为语义向量C:
在这里插入图片描述

Decoder

可以看做编码的逆过程。这个阶段,根据给定的语义向量C和之前已经生成的输出序列y1,y2,…,yt-1来预测下 一个输出的单词yt,即:
在这里插入图片描述
也可以写作:
在这里插入图片描述
在RNN中,也可以简化成:
在这里插入图片描述
其中s是输出RNN(即RNN解码器)中的隐藏层,C代表之前编码器得到的语义向量,yt-1表示上个时间段 的输出,反过来作为这个时间段的输入。g可以是一个非线性的多层神经网络,产生词典中各个词语属于yt的概率。

CNN-Seq2Seq

早期大多数场景下使用的Seq2Seq模型是基于RNN构成的,虽然取得了不错的效果,但也有一些学者发现使用CNN来替换Seq2Seq中的encoder或decoder可以达到更好的效果,Facebook提出的完全使用CNN来构成 Seq2Seq模型,用于机器翻译,超越了谷歌提出的基于LSTM机器翻译的效果。CNN-Seq2Seq的优势主要体现在以下几个方面:
• 捕获long-distrance依赖关系。底层的CNN捕捉相距较近的词之间的依赖关系,高层CNN捕捉较远词之间的依赖关系。通过层次化的结构,实现了类似RNN(LSTM)捕捉长度在20个词以上的Sequence的依赖关系的功能。
• 效率高。假设一个Sequence长度为n,采用RNN(LSTM)对其进行建模需要进行n次操作,时间复杂度O (n)。相比,采用层叠CNN只需要进行n/k次操作,时间复杂度O(n/k),k为卷积窗口大小。
• 并行化实现。RNN对Sequence的建模依赖于序列的历史信息,因此不能并行实现。相比,层叠CNN对整个 Sequence进行卷积,不依赖序列历史信息,可以并行实现,特别是在工业生产,面临处理大数据量和实时要 求比较高的情况下,模型训练更快。

Seq2Seq模型缺点

Seq2Seq模型虽然非常经典,但是局限性也非常大。较大的局限性就在于编码和解码之间的联系就是一个固 定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。这样做有两个弊端:
1)语义向量C无法完全表示整个序列的信息
2)先输入的内容携带的信息会被后输入的信息稀释掉
输入序列越长,这个问题就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息,那么 解码时准确率也会大打折扣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章