文本情感色彩分类
一.模型原理
NLP问题中的数据是时间序列数据,每个单词的出现都依赖于它的前一个单
词和后一个单词。由于这种依赖的存在,所以使用循环网络来处理这种时间序列
数据。
RNN网络结构如下:
表示隐藏层第 t时刻或第 t步的状态,它是网络的记忆单元。其中 =
( + − 1),f一般为非线性的激活函数。
表示t时刻或者t步,t=1,2,3,……的输入。
是第t时刻或第t步的输出。
对于基本RNN来说,它能够处理一定的短期依赖,但无法处理长期依赖问题。
当句子比较长,RNN就无法处理这种问题。因为当序列较长时,序列后部的梯度
很难反向传播到前面的序列,这就产生了梯度消失问题。当然,RNN也存在梯度
爆炸问题。
RNN本时刻的隐藏层信息只来源于当前输入和上一时刻的隐藏层信息,没有
记忆功能。为了解决RNN的长期依赖也即梯度消失问题,LSTM应运而生。LSTM
的网络结构图如下:
信息。
LSTM某个timestep的计算公式如下:
LSTM引入了细胞状态,并使用输入们、遗忘们、输出门三种门来保持和控制
= ( ∗ [ℎ −1, ] + )
= ( ∗ [ℎ −1, ] + )
̃ = tanh( ∗ [ℎ −1, ] + )
∗ −1 + ∗ ̃
=
= ( ∗ [ℎ −1, ] + )
上述公式中,为遗忘门,为输入门,为输出门,为细胞状态,̃为细
胞状态候选值,ℎ为隐藏层的状态值,和为权重和偏置。
ℎ =
∗ tanh( )
二.文本数据处理
(1)制作词向量
因为计算机只识别数字,所以要先将文字转化成数字。我们将一句话中的每
个词都转化为一个向量,称为词向量。词向量是具有空间意义的,并不是简单地
映射。即意思相近的词的词向量在空间中的距离比较近。
使用 Word2vec模型来构建词向量。此处使用的是别人训练好的词向量,包
括40万个词向量,每个向量的维度为50。
测试一下效果,打印出baseball所对应的词向量。
(2)文本数据清洗
我们可以看见,打印出的文本中有很多无关数据,所以我们要先对数据进行
清洗,来实现html标签、标点符号去除以及大小写转换
(3)生成索引矩阵
将生成的索引矩阵保存到idsMatrix.npy文件中。避免了每次都要生成索引
矩阵。
三.网络架构
定义输入数据和输出数据占位符,即确定好数据维度。
构建基本的LSTM细胞单元,单元中的单位数为64。
设置dropout参数来避免过拟合问题。
最后将LSTM cell和数据输入到tf.nn.dynamic_rnn,展开整个网络。
初始化权重矩阵和偏置项。
将dynamic RNN函数的的第一个输出值向量重新确定维度。权重矩阵相乘后
加上偏置项得到输出值。
定义判断是否预测正确的函数以及准确率函数。
定义损失函数,使用交叉熵损失函数作为损失值。优化器选择Adam。
训练模型,将模型保存下来,以便后续使用
训练结果如下
三.使用模型
使用和处理训练数据相同的方法处理待测试数据,将对应的索引矩阵保存为
test_review.npy。
使用模型进行预测。
将积极情感保存至possubmission.txt中