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
通过首尾padding可以保持句子长度不变
可以使用多个卷积核,如下图使用3个卷积核,则输出channel变为3
使用max pooling后长度压缩为1,也可以使用average pooling
在pytorch中implementation的写法
一个简单的架构图
因为我们使用max pooling,句子的长度变得无关紧要,我们可以使用多个kernel size不同的卷积核,即得 bi-grams, tri-grams, 4-grams,etc
还有一个叫multi channel的方法,使用两份同样预训练的词向量,一份frozen,一份跟随模型训练,它们都在做max pooling的集合c里。
下图是一个很清晰的图例,分别使用kernel size = 2, 3, 4的卷积核,每个卷积核有两个,即每种卷积核输出channel = 2,一共6个卷积核,最后输出channel = 6