评论情感极性分析

  1. 情感分析(也是一个分类问题,这个可以和emoji预测的放到一起搞)

参考论文: file:///C:/Users/wanglulu08/Downloads/02-2018-12-009.pdf

目的

我们想对评论进行一个情感极性的分类,目前做的是把评论的情感极性分为正向、中向和负向,是一个三分类问题。主要的应用就是比如我们发布了一篇文章,或者做了一个明星的卡片,需要一批正向的评论来解决冷启动问题。或者我们生成文章的时候,根据需要来选择相应情感的评论。或者是对于像汽车,酒店之类的评论,会对这些实体进行评论的优缺点的聚合,因此需要对评论进行情感分析。

数据

针对11个垂类,包括(汽车、酒店、电影、新闻、书、明星等),随机抽取了1w多条评论数据,总共11w,得到了有标签的训练数据标注的标准是:如果一条评论是针对某个实体的好几个点进行评论,每个点有不同的感情色彩,那么整条评论的情感极性为出现最多的极性。比如:一个饭店,评论是环境差,服务不好,但是菜品不错。正向的情感极性出现了1次,负向的出现了2次,就还是算负向的。

模型:

拿到这11w条已经标注的数据,开始训练情感极性分析的模型,大体的思路是这样的:先构建一个各个垂类通用的情感极性分析模型,通过分析调研、综合对比,选择了使用双向GRU和CNN进行融合,再结合上attention机制来进行模型训练。

然后对于汽车、酒店、餐厅、电影等这些结构化的垂类,用了一些规则+统计的方法,通过提取实体的子特征和对子特征的评价,来将对一条评论的情感分类问题,转换成多条对特征评论的情感分类问题,对实体的每个子特征的评论,进行情感极性分析,根据每个极性出现的频数,选择这条评论的极性,通过这种方法,对这些评论非常结构化的垂类进行优化,得到更准确的模型。

具体过程

预训练词向量

https://zhuanlan.zhihu.com/p/24217324 (为啥要用感情色彩)

训练词向量时所用的评论为评论库11个垂类,每个垂类各抽取了500w的评论,共5500w来预训练词向量。在训练词向量的时候,除了考虑上下文信息,同时还考虑了一些情感信息,来得到具有融合情感信息的词向量。这是因为如果只考虑上下文的语义信息,而忽略情感信息时,可能会把 今天天气真好,今天天气真差,会把 好 和 差 这种上下文相似,但是情感极性相反的词,得到一个相似向量。

主要做法是:考虑到用户在进行评论的时候,会选择一些emoji表情,这些表情很大程度上能够表达用户的情感倾向。所以在使用word2vec训练词向量的时候,我们对CBOW进行了改进,在输入层不仅输入了中心词的前后词(选择了两个),还输入了评论中用户的表情信息。这样就相当于我们把评论中的表情也进行了向量化,充分利用数据。

讲清楚才表现出来熟悉。

精度会高一点。

网络模型训练:

使用了CNN与双向GRU进行融合,使用CNN是因为觉得这是一个文本分类问题,使用CNN一个是模型简单,训练速度快,而且一句话的情感色彩大多数都是由情感词决定的,所以最开始就先使用了CNN。

但是在分析badcase的时候我们发现,CNN对短评的效果比较好,但是遇上中长评,就准确率很低了,因为CNN在处理短文本的时候,可以整体提取句子的语义信息,但是对于中长文本,CNN只能处理窗口内的信息,如果要考虑相邻窗口的信息,就要再增加一层卷积层来进行信息融合,这样参数过多,会导致模型复杂化。

GRU对于中长评的效果比较好,对于短评的分类效果并不理想。所以就想到与CNN进行模型融合。使用双向GRU的原因是语法具有滞后性,比如有的评论是“我今天真开心”,开心 这个词出现在最后面,标准的GRU是只能处理当前信息之前的信息,这样就往往忽略了未来的信息。而双向的GRU可以从两个方向同时扫描文本序列,这样网络在处理当前信息时,就可以结合之前和之后的内容来理解了。我们对比的结果也表明,使用双向GRU的结果比普通的GRU的准确率和召回率都要好。

CNN和双向GRU的融合是采用,就是先使用CNN进行特征提取,这里CNN只用了一层卷积层,激活函数使用的ReLu,然后输出采用和预训练词向量一样的维度,这里主要是为了方便Bi-GRU的计算。

之后再进行模型优化的时候,在双向GRU层之后又加了一层attention层,将Bigru的正反层输出合并作为attention层的输入。因为加了Attention层能进一步得提取针对情感极性分析的有效信息。加了attention之后效果也确实有明显提升。

accuracy 

对结构化垂类进行优化:

之后我们在进行优化的时候,发现商品评价类的评论,是非常结构化的。比如说汽车的评论,很多评论就会按照网站的建议,逐个评论动力、油耗、内饰、外观等这种实体的子属性。对于这种评论,我们就想把评论拆分成各个子属性的子评论,方便我们之后进行一些聚类应用。还有一点就是我们发现,情感分析非常具有领域特性,比如“声音大”这个评论放在音箱类的商品中就是正向的评价,放在汽车这个领域就是负面的评价。

所以我们将训练数据按照领域进行了划分,然后针对汽车、酒店、电子产品、餐厅这4个具有结构化特征的垂类,重新训练了分类模型来进行子评论的情感分析。这里用的标签是抓取到的用户对于实体子属性的评分,就比如汽车这个领域,用户会对动力、油耗、空间等进行打分,然后我们将各个站点的打分都归一化为0-5之间的得分。3分为中性,小于三分为负向,大于三分为正向。

然后对于每一条评论,抽取他的子属性和子属性的评论词,将一条评论转化为多条子评论,然后以子评论为训练数据、评分为标签,训练了fasttext模型进行分类。然后针对这四个领域的评论,预测的时候,我们也是先将这四个领域的评论,进行子属性和子属性评论词的抽取,将一条评论转为多条,然后获得每一条子评论的情感极性。对于评论中没有涉及到的子属性,我们就将这条评论的子属性判断为中性。因为我们在应用的时候,一般只关注正向和负向的。

猜你喜欢

转载自blog.csdn.net/baidu_33718858/article/details/81294085