CS224n-lecture11-CNN for NLP

CS224n-lecture11-CNN for NLP


使用1d cnn去卷积词向量,假设词向量的维度为d(这就是 channel 的深度),句子长度为n,batch_size = bs,输入维度为(bs, n, d),卷积核的kernel size = h,即为h-gram,卷积核维度为h*d,卷积后,输出的维度为(bs, n-h+1, 1),经过max pooling,再squeeze,得到一个实数维度为(bs, )。如果使用k个卷积核,那么输出的channel深度增加为k,即输出维度为(bs, k)

如下图,kernel size = 3,n = 7,卷积后长度变为7-3+1=5

image-20200803150116967

通过首尾padding可以保持句子长度不变

image-20200803150313327

可以使用多个卷积核,如下图使用3个卷积核,则输出channel变为3

image-20200803150334322

使用max pooling后长度压缩为1,也可以使用average pooling

image-20200803150423565

在pytorch中implementation的写法

image-20200803150529098

一个简单的架构图

image-20200803150645320

因为我们使用max pooling,句子的长度变得无关紧要,我们可以使用多个kernel size不同的卷积核,即得 bi-grams, tri-grams, 4-grams,etc

image-20200803150832633

还有一个叫multi channel的方法,使用两份同样预训练的词向量,一份frozen,一份跟随模型训练,它们都在做max pooling的集合c里。

下图是一个很清晰的图例,分别使用kernel size = 2, 3, 4的卷积核,每个卷积核有两个,即每种卷积核输出channel = 2,一共6个卷积核,最后输出channel = 6

image-20200803152947337