第四节文本情绪分析
基于前面讲述的分词及词向量技术,可以进行非常有用也更复杂的文本处理工作。这一节将讲述如何利用这些技术来实现文本情绪的识别。很多语句、新闻、台词、评论都带有某种情绪,如果能够理解文本中的这种情绪,不但是有趣的事情,而且也有重要的应用价值。例如,在电商购物网站上,有很多的评论数据,如果能够自动识别这些评论数据的情绪,对于顾客选择商品、商家推荐商品都是很有帮助的。
这是一个相对复杂的工作,作为本教材最后一个实际案例,将采用模块化的方式实现,包括用于训练情绪识别网络的训练模块和使用训练好的网络识别文本情绪的识别模块。这种模块化的编程方式把复杂的任务分解成几个相对简单的任务,流程和可读性更好,在实际工作中十分常见。
本节所使用的训练数据是从电商网站的评论区抓取的商品评论,可从教材资源平台下载。这些文本的情绪已经做了人工标注,被分成了正面评论和负面评论两类。首先通过深度学习,去学习这些评论中正面评论、负面评论的特征。学习完毕后就可以使用训练好的网络判断新的文本表达的情绪是正面还是负面。标注了情绪的数据包括10679条正面评论和10428条负面评论,以Excel表格文件分别存储,文件名分别是pos。xls和neg。xls。表9-2是从中截取的一部分样本。
表9-2
在训练模块中,首先需要使用训练好的词向量把训练数据(具有正负面情绪的文本)向量化,然后使用深度神经网络提取文本中的情绪特征,所用的网络结构中包括在自然语言理解中常用的长短时记忆结构(Long-Short-TermMemory,LSTM)。经过训练后的网络连接权值可以抽取出文本的情绪特征,使用它就可以识别新文本中的情绪了。
需要说明的是,由于训练适用于本任务的向量化词表需要使用内容相符并且规模较大的语料库,所以在教材资源平台提供了训练好的词向量模型,下载后可以直接使用。感兴趣的读者可以自己抓取文本,建立合适的语料库训练自己的词向量。虽然上一节已经介绍过具体的训练方法,为方便起见,本节最后也提供了适用于这个案例的词向量训练模块。
首先给出训练模块的程序,代码的含义请阅读代码中的注释。
#导入所需的模块
importsys
#用来分隔训练集和检测集
fromsklearn。cross_validationimporttrai
#使用多个进程进行计算
importmultiprog
importnumpyasnp
#使用词向量
fromgensim。models。word2vecimportWord2Vec
fromgensim。corpora。diportDiary
#使用序贯模型
fromkeras。preprogimportsequence
#将要用到的网络类型
fromkeras。modelsimportSequential
fromkeras。layers。embeddingsimportEmbedding
fromkeras。layers。retimportLSTM
fromkeras。layers。portDe,A
importjieba
importpandasaspd
np。random。seed(1337)#指定随机种子,保证结果可复制
sys。setreit(1000000)
#设置参数
vocab_dim=100#词向量的维数
maxlen=100
&ions=1
n_exposures=10#出现频率低于10次的词会被忽略
window_size=10#词向量考虑的上下文最大长度
batch_size=30