- Window 10 x64
- Python 3.6.3
- Packages: gensim-3.2.0, jieba-0.39, xlrd-1.1.0, tensorflow-1.4.0, tensorboard-0.4.0, pandas-0.20.32
随着互联网的发展,人们越来越倾向于在网上表达自己的情绪与观点。在舆情分析、产品反馈等多个应用场景下都需要我们知道用户的情感,这就是自然语言处理中的“情感分析”任务,同时它也是人机交互中的一个重要课题。
其中,情感分析问题主要有两个难点:
- 数据量大,直接用借助人力去分析的话十分耗时耗力。
- 机器难以理解人类高级语言的含义,导致规则方法或者情感词频统计法等传统方法的准确率不高。
针对以上两种情况,本文尝试将深度学习运用在情感分析任务上,利用收集到的足够多的数据,构建长短期记忆网络(LSTM)模型,得到一个自动化的且准确率较高的情感分析判别模型。
- 收集网上开源的中文文本情感分析数据集
- 调研近几年深度学习网络在情感分析上的应用,并对比各模型的效果,选定需要实现的模型
- 确定实现模型的深度学习框架
- 实现模型并分析实验结果
- 词向量模型一种基于神经网络的语言模型,它可以把词语建模成指定维度的向量,并且语义相近的词语在向量空间中的余弦距离会十分接近。借助词向量我们可以将机器难以理解的文本转换成易于理解的数值向量特征。
- LSTM模型适合于处理和预测时间序列中间隔和延迟相对较长的重要事件,正是由于这个特点,LSTM在这各种关于序列预测的问题上往往会取得不错的效果。本文中利用LSTM的最后一层的输出,将其理解为模型对于句子在情感方面抽取的特征,并将这些特征再与2个神经元全连接,最后利用Softmax方法得到最终预测结果。
本次实验训练数据均来源于网上,内容为用户对于商品的评论,其中正向评论有10679条、负向评论有10428条,数据分布均衡。另外,中文停用词典stopword_ch.txt也来源于网上,包括全部常见标点符号以及无意义的词语。
训练数据样式如下:
- (postive) 我送了一本给我阿姨,她看了后大很好,大有启发,看来我多了一样送长辈的东西了,所以后来我又买了四本,准备送其他长辈,看来送朋友也很不错喔,正好现在流行如何养生呢。
- (positve) 电热水器非常好,性价比高,顾客买的放心。
- (negative) 美的售后太垃圾,其他售后都是两小时回电话,美的是24小时,结果超过市区不到五公里问我收五十,服务很差。再不买美的的东西了。卖家服务还不错。
- (negative) 1.不支持MP3铃声。2.开启程序时速度较慢。3.2M的内存真让人有些伤感。
- 对全部评论进行整合、分词、去停用词,得到语料库。
- 利用语料库进行Word2Vec的训练,得到词向量模型,同时建立相应的word-idx字典。
- 将整合后的评论重新排列(shuffle),然后按照8:2的比例划分训练集和测试集,并且根据word-idx将句子转成index列表,得到训练集train.npy和测试集test.npy。
- 基于tensorflow建立LSTM模型,训练得到最终的结果并可视化。
- Training Accuracy: 0.845899
- Testing Accuracy: 0.819517
在未经过仔细调整模型参数的情况下,准确率可达到80%以上,说明我们的模型在情感分析问题上的应用是可行的。后续如果再增加训练集的数量以及做好调参的工作,准确率应该可以达到90%以上。
结果显示我们的模型对于正向情感的识别能力强于负向情感。猜想是因为人们在表达正向情感时,往往会比较直接,机器容易识别。而有一些人在表达负向情感时,喜欢用婉转或者嘲讽的方式,这时候机器就会难以判别。
在实验过程中,发现了一个有趣的现象:模型初期训练提升十分有限,准确率仅有60%波动。但在第15次迭代左右时,准确率和损失函数均有跳跃式的提升,猜想是此时模型跳出了局部最优解,成功跳到了全局最优解附近。



