首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用户评论情感极性分析

使用CNN进行用户评论情感极性分析

上半年闲来无事参加了一个小比赛《用户评论情感极性分析》,主要是通过摘取的8w数据训练模型,预测3w的测试集,提交预测结果,评测标准为F1-score。最近开始复习,通过写一篇总结整理一下。水平不高,能力有限,写作仓促,部分代码可能未精细整理,难免出现错误,欢迎指正。

数据初见

经验上,首先要对给定数据进行分析,一般分析数据量大小(估计机器运行要求),数据预处理:有无空值(是否需要插值),确定如何进行特征提取。模型输入输出类型等等。

output:

8w的数据集有五种,每一条记录分别是[记录id,评论类型,评论内容,情感标注]。情感标注分别是(0,1,2)分别代表(负面,中立,正面)。比赛的任务也就是训练出模型,输入文本,得到情感极性。明白基本任务,贴几段关键代码(不贴代码的技术博文都是耍流氓)

词向量构建

获取数据、标注,对文本记录打标签

output:

词向量训练

output: 部分进度。

构造词向量--单词索引的映射

output:

构造模型

构造层次化CNN,依次对2,3,4-gram取特征,最后feed给全连接层,输出多分类

CNN:通过设置滤波器窗口大小为2-gram,选取二元文法;最大池化;第一层卷积后输入到第二层卷积选取三元文法;紧接最大池化;……同理4-gram。

卷积后输入到全连接层,通过softmax层输出各类别的概率值,损失函数选取交叉熵损失,批量大小8,训练5-6轮。

预测结果

CNN输出的是三个概率值,分别是归为(2,1,0)的概率。取最大值下标作为最终类别。

总结

模型方面参考连接A,github;根据应用场景调参主要参考文献B。

问题1:使用原模型训练数据时,构造词典;单词词典索引词向量,主要是构造三者的一一映射;原文中只使用训练数据构造词典,第一次预测时发现预测集中的词汇可能不存在对应词向量,个人认为根本上是数据集太小导致的,中文分词太多,对于新的一条中文句子分词后找不到词向量并不稀奇。

解决办法:使用训练集和预测集同时feed进词向量,构造全局词向量,这样对于整个数据集的单词都有对应的词向量。

问题2:关于Tokenizer单词索引

Tokenizer构造单词index的一一映射,特别需要注意的是,输入的分词顺序不同,最终单词对应的索引也是不同的。笔者在发现部分词向量不可见时,为简便构造了测试集词向量,最终结果很差,原因是,同一个词在不同词典里索引是不同的,而且单词索引也并不是从1递增开始的。因此需要构造一个全局的词典。否则会出现一个单词对应的索引和词向量,并不适合训练集训练出的模型的情况。

问题3:关于模型调参

最开始笔者也是经验调参,后来借鉴了一篇论文,里面介绍的还算详细,而且是针对不同类型的评论采取不同的模型,对于CNN窗口大小,词向量大小,是否输入潜入层等也给了参考等等。

(总结以上,还是先把别人代码看透,多借鉴几篇论文,确定好策略以后再开始)

最终成绩

参考文献及连接

A:推特情感分析

https://github.com/tthustla/twitter_sentiment_analysis_part11/blob/master/Capstone_part11.ipynb

B:基于卷积神经网络参数优化的中文情感分析

http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=jsjgc201708034

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181027G0X09C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券