文本分类:TextCNN(pytorch实现)

TextCNN

  • 原理:核心点在于使用卷积来捕捉局部相关性,在文本分类任务中可以利用CNN提取句子中类似n-gram的关键信息。

    文本分类:TextCNN(pytorch实现)_第1张图片

  • textcnn详细过程:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5。然后经过不同 filter_size的一维卷积层(这里是2,3,4),每个filter_size 有filter_num(这里是2)个输出 channel。第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示了,最后接一层全连接的 softmax 层,输出每个类别的概率。

  • 一维卷积(conv-1d):经过词向量表达的文本为一维数据,因此在TextCNN卷积用的是一维卷积。

使用数据集:CNEWS

pytorch代码实现:textcnn_baseline

TextCNN网络

class TextCNN(nn.Module):
    """CNN模型"""

    def __init__(self):
        super(TextCNN, self).__init__()
        self.embedding = nn.Embedding(5000, 64)
        self.conv = nn.Sequential(nn.Conv1d(in_channels=64, out_channels=256, kernel_size=5),
                                  nn.ReLU(),
                                  nn.MaxPool1d(kernel_size=596))
        self.f1 = nn.Linear(256, 10)

    def forward(self, x):
        x = self.embedding(x)  # batch_size,length,embedding_size  64*600*64
        x = x.permute(0, 2, 1)  # 将tensor的维度换位。64*64*600

        # batch_size,卷积核个数out_channels,(句子长度-kernel_size)/步长+1
        x = self.conv(x)  # Conv1后64*256*596,ReLU后不变,MaxPool1d后64*256*1;

        x = x.view(-1, x.size(1))  # 64*256
        x = F.dropout(x, 0.8)
        x = self.f1(x)  # 64*10 batch_size * class_num
        return x

参考

  1. Convolutional Neural Networks for Sentence Classification
  2. nlp-beginner-finish

你可能感兴趣的:(自然语言处理,NLP学习笔记,pytorch,深度学习,自然语言处理)