使用TextCNN进行中文文本分类
1 定义网络结构
根据论文Convolutional Neural Networks for Sentence Classification中给出的TextCNN模型基本结构来构建模型。
TextCNN模型基本结构示意图:
from tensorflow.keras import Input, Model
from tensorflow.keras.layers import Embedding, Dense, Conv1D, GlobalMaxPooling1D, Concatenate, Dropout
class TextCNN(object):
def __init__(self, maxlen, max_features, embedding_dims, class_num=5, last_activation='softmax'):
'''
参数说明:
maxlen:句子最大长度
max_features:作为特征的词汇数量
embeding_dims:词向量维度
class_num:类别数量(本任务类别数量为5)
last_activation:激活函数(多分类问题使用softmax函数)
'''
self.maxlen = maxlen
self.max_features = max_features
self.embedding_dims = embedding_dims
self.class_num = class_num
self.last_activation = last_activation
def get_model(self):
input = Input((self.maxlen,))
embedding = Embedding(
self.max_features, self.embedding_dims, input_length=self.maxlen)(input)
convs = []
for kernel_size in [3, 4, 5]:
c = Conv1D(128, kernel_size, activation='relu')(embedding)
c = GlobalMaxPooling1D()(c)
convs.append(c)
x = Concatenate()(convs)
x = Dropout(0.5)(x)
output = Dense(self.class_num, activation=self.last_activation)(x)
model = Model(inputs=input, outputs=output)
return model
2 读取数据及数据处理
这里直接使用保存在processed_data目录下分好类的txt格式文件。
2.1 定义一些数据处理的函数
from collections import Counter
import os
def build_vocab