基于层次化LSTM的篇章级别情感分析方法

基于层次化LSTM的篇章级别情感分析方法

目录


代码: https://github.com/AI-luyuan/Hierarchical-LSTM
数据: https://download.csdn.net/download/u011748542/12381181

1 摘要

篇章级别的情感分析是一个很重要的自然语言处理任务,但是由于篇章文本中句子关系复杂、语义信息多样,所以篇章级别的情感分析也是一个很有挑战的任务。近年来常见的深度学习情感分析模型有卷积神经网络、循环神经网络和递归神经网络等,这些模型在处理篇章级别的文本时效果表现不佳。本文提出一个层次化LSTM的篇章级别情感分析方法,利用多层LSTM提取篇章文本的语义信息。实验证明,我们的基于层次化LSTM的情感分析方法在YELP数据集上能够达到62%的准确率。
##1 引言
文本情感分析在数据挖掘和自然语言处理领域有着很重要的地位。这个任务的内容是根据文本来分析人的情感或者观点。近来,大量研究者开始关注对网上的在线评论的情感分析,通过对评论的情感分析,可以更加个性化地对商品进行推荐。
文本情感分析根据文本的层级分为句子级别的情感分析和篇章级别的情感分析。句子级别的情感分析根据一个句子判断人的情感,如对商品的喜好程度,对电影的推荐程度等。而篇章级别的情感分析是对含有多个句子的篇章进行分析,由于句子之前可能有转折、顺承等复杂的关系,因此篇章级别的情感分析比句子级别的情感分析难度要大很多。因为现实生活中遇到的具体任务多是篇章级别的文本,如网上的美食评论、电影评论、商品评论等,因此篇章级别的情感分析就显得更加重要。现有的情感分析系统更多地集中在句子级别的情感分析,鲜有篇章级别的情感分析系统。
现有的情感分析方法大部分把这个任务当作文本分类问题,因此很多现有的方法都是经典的分类方法,如词袋模型、朴素贝叶斯方法、支持向量机模型等。但是这些方法严重依赖于人工抽取的特征,需要耗费大量的人力,而且也不一定能够取得满意的效果。
近年来,随着神经网络和深度学习的发展,越来越多的方法采用深度学习的模型来解决情感分析问题。大部分现有的方法把文本中的单词转换成词向量,然后输入到神经网络模型中,最后预测出一个代表情感喜好程度的类别。现有的神经网络模型包括卷积神经网络、循环神经网络、递归神经网络和这些网络的结合。卷积神经网络把句子当成一个个离散的单词,把这些单词全部输入到卷积神经网络中就能预测出对应的类别。但是卷积神经网络忽略了单词之间的先后顺序,使得难以把握一个句子的语义信息。循环神经网络则是依照时间序列将一个个单词依次输入到神经网络中,依照最后一个时刻输出的信息来预测句子的类别。但是循环神经网络难以处理长句子和篇章级别的文本,因为当单词太多时循环神经网络只会保留最后的单词的信息,而遗忘了先前时刻的信息,使得保留下来的语义信息太少而难以准确预测情感。递归神经网络则能够利用句子的句法结构信息,先对句子预测出一个句法树,然后依照句法树的顺序依次传递信息,最后用根结点的信息来预测情感类别。还有的方法将循环神经网络和卷积神经网络结合起来,先用循环神经网络捕捉句子的语义信息,再用卷积神经网络在顶层依照语义信息进行分类预测。
在本文中,我们要解决的是篇章级别的情感分析问题。由于篇章级别的文本单词数量多、句子关系复杂、语义信息多样,因此常见的模型都很难准确地进行情感分析预测。我们采用层次化的长短时记忆网络(LSTM)来进行情感分析。经典的长短时记忆网络(LSTM)存在依赖关系短,可处理的文本较少等缺点。而层次化的LSTM能够对篇章级别的文本在多个层次上提取文本的语义信息。我们先用预训练的词向量获得单词级别的语义信息,然后用一层LSTM把句子作为输入得到句子级别的语义信息(语义向量),接着再用一层LSTM把语义向量作为输入得到篇章级别的语义信息(篇章向量),最后用篇章向量对文本进行情感分类,得到预测的类别。实验证明,我们的情感分析方法在YELP数据集上能够达到62%的准确率。

2 情感分类方法

在本节中,我们将详细介绍基于神经网络的情感分类模型,总流程如图1所示。首先,我们给出文件级的情感分类的形式化表达。然后,我们将讨论如何通过分层的LSTM网络获取文档语义表示。进一步,我们介绍相应的attention机制,引入用户和产品的全局信息来增强文档的语义表示效果。最后,对增强后的文档表示进行情感分类。

这里写图片描述

3 文件级形式化表示

假设一个用户 u ∈ U u\in U uU对一个产品 p ∈ P p\in P pP给予了一个评论,其中 U U U表示用户集, P P P表示产品集。我们把一个评论用其 n n n个句子 { S 1 , S 2 , ⋯   , S n } \{S_1,S_2,\cdots,S_n \} {S1,S2,,Sn}表示为一个文档 d d d。进一步把第 i i i个句子 S i S_i Si表示为 { w 1 i , w 2 i , ⋯ , w l i i } \{w_1^i,w_2^i,⋯,w_{l_i}^i\} {w1i,w2i,,wlii},其中 l i l_i li表示句子的长度, w j i w_j^i wji表示其第 j j j个词。文件层情感分类通过大量的训练样本学得模型进而预测通过用户的为文本信息来预测其对事物的评价好坏。

4 神经网络文本表示模型

我们通过分级架构对文本语义进行建模,分别由词层,句子层和文档层构成。对于长文档分类学习,长短期记忆网络LSTM有着显著的效果,因此我们采用LSTM对句子的语义以及文档的语义表示进行建模。
在word层我们embed每一个词为一个低维的语义空间,也就是说将每一个词映射为对应的embedding w j i ∈ R d w_j^i\in R^d wjiRd。每一步的更新由下列公式给出:

这里写图片描述

其中 i , f , o i,f,o ifo是gate activations, σ \sigma σ是sigmoid函数, W , b W,b Wb是需要训练学习的参数。然后我们把隐层的状态 [ h 1 i , h 2 i , ⋯ , h l i i ] [h_1^i,h_2^i,⋯,h_{l_i}^i ] [h1i,h2i,,hlii]通过pooling层得到句子表示。在句子层,我们把上一步得到的句子的表示 [ s 1 , s 2 , ⋯ , s n ] [s_1,s_2,⋯,s_n ] [s1,s2,,sn]通过LSTM用同样的方式得到相应的文档表示 d d d,如图2。

这里写图片描述

5 Attention机制

我们引入用户和产品的attention机制,以期获知各语义层各部分对情感划分的重要程度。我们分别采用word层和sentence层attention机制来产生对应的句子表示和文档表示。这一节将给出该机制的具体实现细节如图3。

这里写图片描述

对不同用户和产品来说,每个句子中各个单词所能体现出的情感层次是有差别的,因此我们在word层引入用户和产品的attention机制,而不是将隐层数据直接放入平均pooling层。然后通过聚合这些更为重要的词汇得到句子表示。形式上,可以对不同单词进行加权处理,进而得到增强的句子表示:

这里写图片描述

W H W_H WH W U W_U WU W P W_P WP是权值矩阵, v v v是权重向量。
对于sentence层,我们采用相同的attention机制,得到表示如下:
d = ∑ i = 1 n β i h i d=\sum_{i=1}^n \beta_i h_i d=i=1nβihi

6 情感分类

通过上一节的分层次语义学习模型得到文档的一个高层次表示,下面我们把它作为文档的特征进行情感分类。该阶段我们设置一个隐层,通过sigmoid激活函数和softmax层,得到情感划分。同时采用croos-entropy损失函数进行训练。

7 实验

数据集:
我们实验采用的实验数据集有Yelp13、Yelp14和IMDB数据集。Yelp是美国最大的点评网站,用户可以给各种产品提交评论并打分;IMDB数据主要提供一些关于影视作品的评论和打分信息。我们希望通过我们的模型,根据用户的评论,推测用户对于产品的打分,也就是对用户的情感分析。具体数据情况如下:
这里写图片描述

对于每个数据集,我们随机选取大约10%的数据作为测试数据,其余数据作为训练数据,来测试我们的模型。

代码:
代码方面,把整个工作封装成了三个类:

  • Embeddings:该类主要负责对单词Embedding的加载(英语单词的Embedding使用的是前人的结果),用户和产品Embedding的生成和加载,以及建立单词、用户和产品与其Embedding向量的对应。
  • Sentiment:该类主要负责加载数据,并调用Embeddings,将读取的单词、用户和产品转换为ID,该ID与Embedding一一对应;这个数据最终将用于模型的输入。
  • Model:模型的建立、训练和验证。模型的建立使用tensorflow,训练时,训练多个epcho,每个epcho中分batch进行训练,每个epcho结束时进行一次验证。

源码:https://github.com/AI-luyuan/Hierarchical-LSTM

  • train.py:设定训练参数,开始执行训练;
  • embeddings.py:Embeddings类;
  • sentiment.py:Sentiment类;
  • model.py:Model类,未使用Attention;
  • model_upa.py:Model类,使用了Attention;

实验结果:
由于时间和设备有限,我们目前只在yelp13数据集上进行了实验,结果,BatchSize为16,Dropout为0.5,测试集上准确率对比结果如下:

这里写图片描述

时间和设备有限,只跑了15个epcho。从图中可见,无论是Size为20还是200,使用Attention机制的模型的准确率都更高,并且Size=200的结果更优。从图中可以看出,准确率仍有上升的空间。我们尝试了在不采用Attention、中间层Size取200时,执行40个epcho准确率可达0.62左右,所以对比来看,在有Attention的情况下,我们相信通过增加epcho可以获得更高的准确率。

  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值