情感分析或观点挖掘是对人们对产品、服务、组织、个人、问题、事件、话题及其属性的观点、情感、情绪、评价和态度的计算研究。该领域的开始和快速发展与社交媒体的发展相一致,如评论、论坛、博客、微博、推特和社交网络,因为这是人类历史上第一次拥有如此海量的以数字形式记录的观点数据。早在 2000 年,情感分析就成为 NLP 中最活跃的研究领域之一。它在数据挖掘、Web 挖掘、文本挖掘和信息检索方面得到了广泛的研究。实际上,因其对商业和社会的整体重要性,它已经从计算机科学扩展到管理学和社会学,如营销、金融、政治学、传播学、健康科学,甚至历史学。这种发展原因在于观点是几乎所有人类活动的核心,是人类行为的重要影响因素。我们的信念、对现实的感知,以及我们所做的决策在很大程度上依赖于别人看到和评价世界的方式。因此,我们在做决策的时候,通常会寻求别人的意见。不只是个人,组织也是如此。
现有研究已经产生了可用于情感分析多项任务的大量技术,包括监督和无监督方法。在监督方法中,早期论文使用所有监督机器学习方法(如支持向量机、最大熵、朴素贝叶斯等)和特征组合。无监督方法包括使用情感词典、语法分析和句法模式的不同方法。现有多本综述书籍和论文,广泛地涵盖了早期的方法和应用。
大约十年前,深度学习成为强大的机器学习技术,在很多应用领域产生了当前最优的结果,包括计算机视觉、语音识别、NLP 等。近期将深度学习应用到情感分析也逐渐变得流行。本文首先概述深度学习,然后对基于深度学习的情感分析进行综述。
论文:Deep Learning for Sentiment Analysis: A Survey
论文链接:https://arxiv.org/pdf/1801.07883.pdf
作为一项学习数据的多层特征或表征的强大机器学习技术,深度学习的出现实现了当前最优的预测结果。伴随着在诸多应用领域的成功,深度学习近年来也被广泛应用于情感分析。本论文首先概述深度学习,接着全面调研深度学习在情感分析领域的应用现状。
情感分析中的基本模型
前馈神经网络
常规前馈神经网络(FNN)不考虑输入数据可能具备的任何特定结构。尽管如此,它仍是非常强大的机器学习工具,尤其是与先进的正则化技术一起使用时。这些正则化技术帮助解决人们处理「深度」网络时遇到的训练问题:神经网络有大量隐藏层,隐藏层非常难以训练(梯度消失和过拟合问题)。
图 4.1:有 N + 1 层(N − 1 个隐藏层)的神经网络。浅层网络架构仅使用一个隐藏层。深度学习需要使用多个隐藏层,通常包含同样数量的隐藏神经元。数量大约是输入和输出变量数量的平均值。
FNN 由一个输入层、一个(浅层网络)或多个(深层网络,因此叫作深度学习)隐藏层,和一个输出层构成。每个层(除输出层以外)与下一层连接。这种连接是 FNN 架构的关键,具有两个主要特征:加权平均值和激活函数。
加权平均过程,即将前一层给神经元的激励值和对应的权重矩阵相乘而得出后一个神经元的输入值,这一过程展示在下图 4.2 中,我们可以说前一层神经元的加权和就是后一层神经元的输入。
正式地,加权平均的过程可以使用如下方程式表达:
此外,每一层的隐藏神经元可以定义为:
其中其中 v∈[0,N−1]、f∈[0,(F_v+1)−1]、t∈[0,(T_mb)− 1]。在这里 g 为非线性激活函数,是 FNN 另外一个十分重要的元素。因为激活函数的非线性属性,所以它允许预测任意的输出数据。
Word2Vec 词嵌入
一般来说,Word2Vec 方法由两部分组成。首先是将高维 one-hot 形式表示的单词映射成低维向量。例如将 10,000 列的矩阵转换为 300 列的矩阵,这一过程被称为词嵌入。第二个目标是在保留单词上下文的同时,从一定程度上保留其意义。Word2Vec 实现这两个目标的方法有 skip-gram 和 CBOW 等,skip-gram 会输入一个词,然后尝试估计其它词出现在该词附近的概率。还有一种与此相反的被称为连续词袋模型(Continuous Bag Of Words,CBOW),它将一些上下文词语作为输入,并通过评估概率找出最适合(概率最大)该上下文的词。
对于连续词袋模型而言,Mikolov 等人运用目标词前面和后面的 n 个词来同时预测这个词。他们称这个模型为连续的词袋(CBOW),因为它用连续空间来表示词,而且这些词的先后顺序并不重要。
连续的词袋(Mikolov 等人,2013 年)
CBOW 可以看作一个具有先知的语言模型,而 skip-gram 模型则完全改变将语言模型的目标:它不像 CBOW 一样从周围的词预测中间的词;恰恰相反,它用中心语去预测周围的词:
Skip-gram(Mikolov 等人,2013)
自编码器与降噪自编码器
自编码器神经网络是一个三层神经网络,其目标是使输出值近似等价于输入值。下图展示了自编码器的一般架构:
图 3:自编码器神经网络
因为神经元使用了非线性激活函数,自编码器可以学习非线性表征。这令自编码器比主成分分析(PCA)或潜在语义分析(LSA)等线性方法要强大很多。
若我们将自编码器以层级的形式堆叠,那么高层的自编码器就使用低层自编码器的输出作为输入。这种堆叠的自编码器与受限玻尔兹曼机(RBM)是构建深度神经网络的早期方法。一旦我们以无监督的形式训练自编码器,那么描述 x(中间表征)多级表征的参数就能用来初始化监督式深度神经网络,这种神经网络在实验上已经证明要比随机初始化优秀。
降噪自编码器(DAE)是自编码器的扩展,DAE 背后的思想是强制隐藏层发现更鲁棒的特征,并阻止自编码器简单地学习恒等变换。也就是说,模型应该在存在噪声时仍能重构输入。这种技术也体现在情感分析中,例如从文档中删除或添加一些文字不应该改变文档的语义。
卷积神经网络
CNN 非常擅长处理图像数据,如下图所示,它们一般由若干个卷积和池化操作组成,通常跟随着一个或多个全连接层(与传统的 FNN 层相似)。
相比于全连接神经网络,卷积网络每一个单元都只会和上一层部分单元相连接。一般每个卷积层的单元都可以组织成一个三维张量,即矩阵沿第三个方向增加一维数据。例如 Cifar-10 数据集的输入层就可以组织成 32×32×3 的三维张量,其中 32×32 代表图片的尺寸或像素数量,而 3 代表 RGB 三色通道。
卷积神经网络中最重要的就是卷积层,卷积层试图将神经网络中的每一小块进行更加深入的分析,从而得出抽象程度更高的特征。一般来说通过卷积层处理的神经元结点矩阵会变得更深,即神经元的组织在第三个维度上会增加。
图4:卷积神经网络
为了理解卷积层,下图展示了卷积核或滤波器(filter)将当前层级上的一个子结点张量转化为下一层神经网络上的一个长和宽都为 1,深度不限的结点矩阵。下图输入是一个 32×32×3 的张量,中间的小长方体为卷积核,一般可以为 3×3 或 5×5 等,且因为要计算乘积,那么卷积核的第三个维度必须和其处理的图像深度(即输入张量第三个维度 3)相等。最右边的矩形体的深度为 5,即前面使用了五个卷积核执行卷积操作。这五个卷积核有不同的权重,但每一个卷积层使用一个卷积核的权重是一样的,所以下图五层特征中每一层特征都是通过一个卷积核得出来的,也就是该层共享了权重。
循环神经网络
在传统的前馈神经网络中,所有的示例都被认为是独立的,它们没有时间关联性。这种时间关联性是由循环神经网络实现的。一个典型的 RNN 结构如下:
如果将其展开,它会变成这样:
在这些图表中, x_t 是时间序列上的输入,而 h_t 是循环过程中的隐藏状态。我们看到 f 重复作用于不同时间步上的隐藏状态,并将它传入下一个时间步中,这就是 RNN特有的方式。基本上,你能输入句子中的词或者甚至是像 x_t 这样的字符串中的字符,然后通过该循环神经网络它会得出一个 y_t。
目标是用 y_t 作为输出,并将它与你的测试数据(通常是原始数据的一个小子集)比较。然后你会得出你的误差率。比较完之后,有了误差率,你就能使用一种叫随时间反向传播(BPTT)的技术。BPTT 返回检查这个网络,并基于误差率调整权重。这样也调整了这个网络,并让它学习去做得更好。
LSTM 网络
下面我们简要地向读者介绍 LSTM 单元选择记忆或遗忘的具体处理流程。
以下是 LSTM 单元的详细结构,其中 Z 为输入部分,Z_i、Z_o 和 Z_f 分别为控制三个门的值,即它们会通过激活函数 f 对输入信息进行筛选。一般激活函数可以选择为 Sigmoid 函数,因为它的输出值为 0 到 1,即表示这三个门被打开的程度。
图片来源于李弘毅机器学习讲义。
若我们输入 Z,那么该输入向量通过激活函数得到的 g(Z) 和输入门 f(Z_i ) 的乘积 g(Z) f(Z_i ) 就表示输入数据经筛选后所保留的信息。Z_f 控制的遗忘门将控制以前记忆的信息到底需要保留多少,保留的记忆可以用方程 c*f(z_f)表示。以前保留的信息加上当前输入有意义的信息将会保留至下一个 LSTM 单元,即我们可以用 c' = g(Z)f(Z_i) + cf(z_f) 表示更新的记忆,更新的记忆 c' 也表示前面与当前所保留的全部有用信息。我们再取这一更新记忆的激活值 h(c') 作为可能的输出,一般可以选择 tanh 激活函数。最后剩下的就是由 Z_o 所控制的输出门,它决定当前记忆所激活的输出到底哪些是有用的。因此最终 LSTM 的输出就可以表示为 a = h(c')f(Z_o)。
RNN 与注意力机制
一般来说,我们可能会认为双向 RNN 与 LSTM 就能处理数据中的长期依赖性。但是在实践中,时序数据的长期依赖性问题仍然很难处理。因此,Bahdanau 等人提出了注意力机制。
神经网络中的注意力机制受到人类视觉中注意力的启发,即人类视觉注意力能够聚焦到图像的特定区域,并在这个区域有非常高的分辨率,而在其它区域有较低的分辨率。在自然语言处理中,注意力机制允许模型根据输入文本以及它到目前为止已经生成的隐藏状态来学习要注意什么,而不像标准 RNN 与 LSTM 那样将全部原文本编码成固定长度的向量。
下图 8 展示了在双向 RNN 中使用注意力机制的方法。其中每个解码器输出的序列 y_t 取决于所有输入状态的加权组合,而不只是如标准情况那样选择最后一个隐藏状态。a_t,T 定义了每个输入的隐藏状态应该加权多少以结合为输出向量。例如,a_2,2 有较大的值,那么它就代表着在第二个时间步上,解码器更多注意原语句中的第二个隐藏状态。所有的权重 a_t,T 加和为 1,因此能保证输出值的归一化。
图 8:双向循环神经网络中的注意力机制
记忆网络
Weston 等人介绍了记忆网络(MemNN)这个概念,它能用于问答系统。记忆网络通过结合多个推断组件和长期记忆而执行任务,这些组件可以是多个神经网络,而长期记忆充当着动态知识库的角色。记忆网络基本的四个可学习或推断组件分别为:I 组件将输入数据转化为内部特征表示;G 组件在给定新的输入下更新旧的记忆;O 组件生成输出(同样是在特征表示空间中完成);R 组件将输出特征转化为响应格式。例如,给定问答系统一系列语句和问题,MemNN 会从这些语句中抽取特征并生成答案。
在推断的过程中,I 组件一次只读取一条语句,并将它编码为向量表征。然后 G 组件基于当前的语句表征更新一小块记忆,在所有语句都处理完后,记忆网络就生成了一个记忆矩阵(每一行表示一个语句),该矩阵储存了从语句中抽取的语义。对于问题,记忆网络会将它编码为向量表征,然后 O 组件使用向量从记忆中选择一些相关的证据,并生成一个输出向量。最后,R 组件将输出向量作为输入,并输出最终响应。
递归神经网络
词嵌入是将单词表示成低维的稠密的实数向量。自从词向量技术的提出,到目前为止已经有很多方法来得到句法和语义方面的向量表示,这种技术在 NLP 领域发挥着重要的作用。
如何用稠密的向量表示短语,这是使用词向量的一个难题。在成分分析中,我们一般使用递归神经网络 (Recursive Neural Network) 来解决这个问题。递归神经网络是一种通用的模型,用来对句子进行建模。句子的语法树中的左右子节点通过一层线性神经网络结合起来,根节点的这层神经网络的参数就表示整句句子。递归神经网络能够给语法树中的所有叶子节点一个固定长度的向量表示,然后递归地给中间节点建立向量的表示。
图 9:递归神经网络
情感分析任务
我们现在开始概述情感分析中的深度学习应用。但在此之前,我们首先简单介绍主要的情感分析任务。若想了解更多细节,请参考 Liu 写的关于情感分析的书。
研究者主要在三个粒度级别上研究情感分析:文档级、语句级和 aspect level。文档级情感分类将观点鲜明的文档(例如,产品评论)分类为整体积极的或消极的观点。它将整个文档当做基本的信息单元,并假定文档是观点鲜明的,包含对单个实体(例如,某个型号的手机)的观点。语句级情感分类对文档内单独的语句进行分类。然而,单独的语句不能假定为观点鲜明的。
传统上,人们首先将一个语句分类为观点鲜明的(或相反),即主观性分类。然后观点鲜明的语句进一步被分类为积极的或消极的。语句级情感分类可以被形式化为三类分类问题,即判断某语句是中性的、积极的或消极的。和文档级、语句级情感分类相比,aspect level 情感分析或基于 aspect 的情感分析更加细粒化。它的任务是提取和总结人们对某实体的观点以及实体(也被称为目标)的特征。例如一篇产品评论,aspect level 情感分析的目的是分别总结对产品不同方面的积极和消极观点,虽然对产品的总体情感可能是倾向积极的或消极的。
基于 aspect 的情感分析由多个子任务构成,例如 aspect 提取、实体提取和 aspect 情感分类。例如,句子「the voice quality of iPhone is great, but its battery sucks」的实体提取应该识别「iPhone」作为实体,而 aspect 提取需要识别「voice quality」和「battery」作为两个 aspect。aspect level 情感分类需要将对音质的评论分类为积极的,将对电池续航的评论分类为消极的。出于简洁性,大多数算法将 aspect 提取和实体提取结合起来,称为 aspect 提取或情感/观点目标提取。
除了这些核心任务以外,情感分析还研究了情绪分析、嘲讽检测、多语言情感分析等。在接下来的章节中,我们将概述所有这些情感分析任务中的深度学习应用。
文档级情感分类
文档级情感分类是指为观点型文档标记整体的情感倾向/极性,即确定文档整体上传达的是积极的还是消极的观点。因此,这是一个二元分类任务,也可以形式化为回归任务,例如为文档按 1 到 5 星评级。一些研究者也将其看成一个五类分类任务。
情感分类通常被当做文档分类的特殊案例。在这种分类任务中,文档表征是很重要的部分,需要反映出文档字里行间所传达的原始信息。传统上,词袋模型(BoW)通过将文档看成其中单词的袋装形式,被用于在 NLP 和文本挖掘中生成文本表征。通过 BoW,文档被转换成固定长度的数值特征向量,其中每个元素可能代表词的存在(没出现或出现)、词频或 TF-IDF 分数。向量的维度等于词汇量大小。用 BoW 表征的文档向量通常是很稀疏的,因为单个文档仅包含少量的词汇。早期的神经网络使用的基本是这种特征设定。
虽然 BoW 很常用,它也有一些缺点。首先,BoW 模型忽略词的顺序,这意味着包含相同单词的两个文档的表征是完全相同的。BoW 的扩展版本 Bag-of-N-Grams 在短文本(n-gram)中考虑词序,但仍然存在数据稀疏性和高维度的缺陷。其次,BoW 几乎不能编码词的语义。例如,在 BoW 中,单词「smart」、「clever」和「book」之间的距离是相同的,但在语义上,相比「book」,「smart」应该更接近于「clever」。
为了克服 BoW 的缺陷,人们提出了基于神经网络的词嵌入技术以生成密集向量(或低维向量)用于词表征,从而在某种程度上可以编码单词的某些语义和句法属性。以词嵌入作为词的输入,可以利用神经网络得到文档的密集向量(或称为密集文档向量)表征。
除了以上两种方法,实际上也可以直接用 BoW 学习密集文档向量。我们在表 2 中区分了相关研究使用的不同方法。
当文档被适当地表征时,我们可以通过传统的监督学习方式,用多种神经网络模型进行情感分类。在某些案例中,神经网络可能只被用于提取文本特征或文本表征,然后这些特征被馈送到其它非神经网络的分类器(如 SVM),以获得最终的全局最优分类器。神经网络和 SVM 的特性以某种方式彼此互补,从而能结合各自的优势。
除了复杂的文档/文本表征之外,研究者还利用数据特征(如产品评论)进行情感分类。一些研究者发现产品评论对情感和其它附加信息(例如,用户信息和产品信息)进行联合分类建模很有帮助。此外,由于文档通常包含长期依赖关系,注意力机制也经常用于文档级情感分类。我们在表 2 中总结了已有的技术。
表 2:文档级情感分类的深度学习方法。
语句级的情感分类
语句级情感分类用来标定单句中的表达情感。正如之前所讨论的,句子的情感可以用主观性分类和极性分类来推断,前者将句子分为主观或客观的,而后者则判定主观句子表示消极或积极的情感。在现有的深度学习模型中,句子情感分类通常会形成一个联合的三类别分类问题,即预测句子为积极、中立或消极。
与文档级的情感分类相同,神经网络生成的语句表征对于语句级的情感分类也非常重要。另外由于句子相对文档而言较短,因此可以使用一些语法和语义信息(如解析树、观念词典和词性标签)来帮助分类。其他一些信息如评测打分、社会关系和跨域信息也可以考虑在内。例如,社会关系已被用于探索社交媒体数据中(如推文)的情感。
在早期的研究中,解析树(提供了一些语义和语法信息)与原始词一同用作神经模型的输入,这意味着我们可以更好地推断情感构成。但在那之后,CNN 和 RNN 成为主流,它们不需要利用解析树从句子中提取特征。取而代之的是,CNN 与 RNN 使用词嵌入(已经编码了一些语义和语法信息)作为输入。此外,CNN 和 RNN 模型架构也可以帮助我们学习语句内词间的固有联系。
Aspect Level 情感分类
与文档级和语句级的情感分类不同,aspect level 情感分类同时考虑了情感信息和目标信息(情感一般都会有一个目标)。如前所述,目标通常是一个实体或实体特征。出于简洁性,实体和实体特征通常都称为特征(aspect)。给定一个句子和目标特征,aspect level 情感分类可以推断出句子在目标特征的情感极性/倾向。例如,句子「the screen is very clear but the battery life is too short.」中,如果目标特征是「screen」,则情感是积极的,如果目标特征是「battery life」,则情感是消极的。下一节将讨论自动特征提取或目标提取。
Aspect Level 情感分类很有难度,因为建模目标与上下文的语境词的语义相关性很难。不同的语境词对句子在目标特征的情感极性有不同的影响。因此,使用神经网络构建学习模型时,捕捉目标词和语境词之间的语义关系非常必要。
使用神经网络的 aspect level 情感分类有三个重要任务。第一个任务是表示目标的语境词。该问题可以使用前两节提到的文本表示方法来解决。第二个任务是生成目标表示,其可与语境词进行恰当地互动。通常的解决方案是学习目标嵌入(与词嵌入类似)。第三个任务是识别特定目标的重要情感语境词。例如,在句子「the screen of iPhone is clear but batter life is short」中,「clear」是「screen」的重要语境词,「short」是「battery life」的重要语境词。近期该任务通过注意力机制得到解决。尽管很多深度学习技术可用于处理 aspect level 情感分类,但文献中仍然没有主导性技术。
带有词嵌入的情感分析
很明显词嵌入在深度学习情感分析模型中扮演了重要角色。研究也表明,即使不使用深度学习模型,词嵌入也可以在不同任务中用作非神经网络学习模型的特征。因此,该部分特别强调了词嵌入对情感分析的贡献。
我们首先介绍了情感编码词嵌入的工作。对于情感分析,直接使用 CBOW 或 Skip-gram 等常规的单词方法学习语境中的词嵌入可能会遇到问题,因为具有相似语境但情感极性相反(例如,「好」或「坏」)的单词可能被映射到嵌入空间的相近向量。因此,人们提出了情感编码词嵌入方法。Mass el al.101 学习了可以捕捉语义和情感信息的词嵌入。Bespalov et al.102 表明,n-gram 模型结合潜在表征将为情感分类提供更合适的嵌入。通过把语句的情感监督作为正则化项,Labutov and Lipson103 将带有 logistic 回归的现有词嵌入进行重嵌入。
用于情感分析的多模态数据
多模态数据已被用于情感分析,因为其比文本提供了更多的信息。深度学习模型把输入映射到一些特征空间,来自多模态数据的不同形式的输入也可以被这些模型投射到一些联合潜在空间或表征。因此,使用深度学习模型处理多模态数据的趋势不断增长。
例如 Wang et al. 提出一个 CNN 结构的深度网络,命名为深度耦合形容词与名词神经网络(DCAN),可用于视觉情感分类。DCAN 的核心思想是利用形容词和名词性文本描述,把它们看作两个(弱)监督信号以学习两个中间情感表征,然后结合学习的表征并用于情感分类。