概述
深度学习做NLP的方法,基本上都是先将句子分词,然后每个词转化为对应的词向量序列。这样一来,每个句子都对应的是一个矩阵X=(x1,x2,…,xt),其中xi都代表着第i个词的词向量(行向量),维度为d维,故X∈Rn×d。这样的话,问题就变成了编码这些序列了。
RNN层
第一个基本的思路是RNN层,RNN的方案很简单,递归式进行:
yt=f(yt−1,xt)
不管是已经被广泛使用的LSTM、GRU还是最近的SRU,都并未脱离这个递归框架。RNN结构本身比较简单,也很适合序列建模,但RNN的明显缺点之一就是无法并行,因此速度较慢,这是递归的天然缺陷。另外RNN无法很好地学习到全局的结构信息,因为它本质是一个马尔科夫决策过程。
第二个思路是CNN层,其实CNN的方案也是很自然的,窗口式遍历,比如尺寸为3的卷积,就是
yt=f(xt−1,xt,xt+1)
CNN
在FaceBook的论文中,纯粹使用CNN卷积也完成了Seq2Seq的学习,是卷积的一个精致且极致的使用案例,热衷卷积的读者必须得好好读读这篇论文。CNN方便并行,而且容易捕捉到一些全局的结构信息.
《Convolutional Sequence to S