前言:本篇是TextCNN系列的第三篇,分享TextCNN的优化经验
前两篇可见:
文本分类算法TextCNN原理详解(一) 一、textCNN 整体框架1. 模型架构
图一:textCNN 模型结构示意
2. 代码架构
图二: 代码架构说明
text_cnn.py 定义了textCNN 模型网络结构
model.py 定义了训练代码
data.py 定义了数据预处理操作
data_set 存放了测试数据集合. polarity.neg 是负面情感文本, polarity.pos 是正面情感文本
train-eval.sh 执行脚本
3.代码地址
项目地址
部分代码参考了 此处代码
4.训练效果说明:
图三:训练效果展示
二、textCNN model 代码介绍
2.1 wordEmbedding
图四:WordEmbedding 例子说明
简要说明:
vocab_size: 词典大小18758
embedding_dim: 词向量大小 为128
seq_length: 句子长度,设定最长为56
embedding_look: 查表操作 根据每个词的位置id 去初始化的w中寻找对应id的向量. 得到一个tensor :[batch_size, seq_length, embedding_size] 既 [?, 56, 128], 此处? 表示batch, 即不知道会有多少输入。
# embedding layer with tf.name_scope("embedding"): self.W = tf.Variable(tf.random_uniform([self._config.vocab_size, self._config.embedding_dim], -1.0, 1.0), name="W") self.char_emb = tf.nn.embedding_lookup(self.W, self.input_x) self.char_emb_expanded = tf.expand_dims(self.char_emb, -1) tf.logging.info("Shape of embedding_chars:{}".format(str(self.char_emb_expanded.shape)))