1、模型原理
TextCNN简介是CNN的一种变形,CNN(2011)主要运用于图片分类,Yoon Kim在论文《Convolutional Neural Networks for Sentence Classification》中提出了TextCNN。将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性。
模型的详细过程如下所示:
Embedding:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5,这个可以类比为图像中的原始像素点。
Convolution:然后经过 kernel_sizes=(2,3,4) 的一维卷积层,每个kernel_size 有两个输出 channel。
MaxPolling:第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示。
FullConnection and Softmax:最后接一层全连接的 softmax 层,输出每个类别的概率。
2、代码实现
本文以简单数据集和网络结构实现TextCNN,使用的参数与原论文的不同,目的是便于读者更好的理解该网络的原理。
1. 导入需要的库,设置数据类型
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
import numpy as np
dtype = torch.FloatTensor
2. 创建数据和字典
// 3 words sentences (=sequence_length is 3)
sentences = ["i love you", "he loves me", "she likes baseball",
"i hate you", "sorry for that", "this is awful"]
labels = [1, 1, 1, 0, 0, 0] // 1 is good, 0 is not good.
word_list = " ".join(sentences).split()
word_list = list(set(word_list))
word_dict = {
w: i for i, w in enumerate(word_list)}
vocab_size = len(word_dict)
3. 创建batch
inputs = [