在讀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