在读Convolutional Neural Networks for Sentence Classification 这个文章的时候,它在论文中提出一种模型变种就是
CNN-multichannel,也就是多通道CNN。
和最普通的textcnn相比,这个东西最重要的一个区别就是输入为两个通道,一个通道词向量更新,一个通道词向量不更新。
对这个模型的理解我觉得这里解释的比较好。
具体在pytorch实现的这个模型的时候,需要注意的就是维度的变化情况。
在思考维度变化的过程中,我主要是参考了文君在文本分类模型代码中的注释和这里以及这里的注解。
通过对上面的理解,我觉得核心的一点在于pytorch中的RGB的CNN输入是四个维度的,
在多通道CNN应用到文本分类的情况中,维度变化是这样的
首先,我们进行了一个embedding层的变化,变化之后维度是这样的 (batch_size x vocabulary_len x embedding_dim)
这里我们使用两个通道,另一个通道变化之后维度也是 (batch_size x vocabulary_len x embedding_dim)
接着我们使用了torch.stack([x_static, x_no_static], 1)
让维度变化成了 (batch_size x 2 x vocabulary_len x embedding_dim)
因为在cnn中,我们的输入就是需要四个维度,(batch_size, in_channels, num_seq, embedding_length),这里时候用stack函数把两个通道联合起来了。
这个时候再次理解这个双通道cnn就好理解了,每一个卷积核对应两个feature权重矩阵,每个权重矩阵和各自的通道卷积之后相加得到feature map