1 目的和思想
textcnn 模型的目的:分类
textcnn 的整体思想:cnn也可以用于nlp,filter不会左右移动,只往下移
2 模型原理
模型实现:
- 输入词向量,每个词向量维度相同,不够的补零,多的去掉
- (卷积)用多个filter框词向量,框住的部分与filter做矩阵计算,得到一个值,依次往下移动
- (池化)将卷积后的矩阵进行池化,变为一个固定长度的矩阵
- (全连接)把定长的所有矩阵拼在一起,通过softmax输出每个类的概率
3 textcnn 总结
textcnn 可以利用训练好的词向量进行分类,能和word2vec结合,但是关于nn的都不能完全解释
4 textcnn 函数使用
4.1 输入
- 导入数据
- 查看数据缺失情况
train_data.info()
- 查看每类的数量
from collections import Counter
Counter(list(train_data.label))
- 再jieba分词,分割的词不能在停用词中
import jieba
def cut(sentence):
return [token for token in jieba.lcut(sentence) if token not in stopwords]
- 利用训练好的词向量匹配词,建立两个字典,一个是{word:index},一个是{index:word},目的是为了能够把word和词向量矩阵对应起来
词表的大小
4.2 函数及参数
创建 textcnn 类,需要自己写textcnn,给定必要参数,然后输入数据训练
class textcnnconfig(object):
"""配置参数"""
embedding_dim = 64 # 词向量宽度
seq_length = 1000 # 输入矩阵的宽度
num_classes = 11 # 类别数
num_filters = 256 # 卷积核数目
kernel_size = 5 # 卷积核尺寸,即卷积核覆盖的词汇数量
vocab_size = 6000 # 词汇表大小
hidden_dim = 128 # 全连接层神经元
dropout_keep_prob = 0.5 # dropout保留比例
learning_rate = 1e-3 # 学习率
batch_size = 64 # 每批训练大小
num_epochs = 10 # 总迭代轮次
print_per_batch = 100 # 每多少轮输出一次结果
save_per_batch = 10 # 每多少轮存入tensorboard
4.3 输出及应用
查看训练中 loss 函数的值,便训练好模型了