CNN、GRNN、CLSTM、TD-LSTM/TC-LSTM…你都掌握了吗?一文总结情感分析必备经典模型(一)

2023-06-18 18:07 356 阅读 ID:1162
机器之心
机器之心
  • 第 1 期:CNN、GRNN、CLSTM、TD-LSTM/TC-LSTM
  • 第 2 期:MemNet、AT-LSTM、IAN、AF-LSTM
  • 第 3 期:Bert on ABSA、ASGCN、GAN、Sentic GCN

本期收录模型速览

情感分析(sentiment analysis)是指利用计算机技术对文本、图像、音频、视频甚至跨模态的数据进行情绪挖掘与分析。广义上讲,情感分析还包括对观点、态度、倾向的分析等。情感分析是自然语言处理的一个重要的研究领域。情感分析主要涉及两个对象,即评价的对象(包括商品、服务、组织、个体、话题、问题、事件等)和对该对象的态度、情感等。情感分析在社会的舆情管理、商业决策、精准营销等领域有着广泛的应用。从情感分析的数据来源角度看,可分为人脸情感分析、语音情感分析、肢体语言情感分析、文本情感分析和生理模式情感分析等,本文聚焦于文本的情感分析,这也是目前网络内容理解中使用的重要技术(如无特别说明,下文中提到的情感分析均为文本情感分析)。

在自然语言处理中,情感分析属于典型的文本分类问题,即把需要进行情感分析的文本划分为其所属类别。主流的情感分析方法有两种:基于词典的方法和基于机器学习算法的方法。基于词典的方法主要通过制定一系列的情感词典和规则,拆解文本、提取关键词、计算情感值,最后通过情感值来作为文本的情感倾向判断依据。这种方法往往会忽略其词顺序、语法和句法,将这段文本仅仅看做是一个词集合,因此不能充分的表达文本语义信息。而引入深度学习技术的机器学习方法,利用词嵌入技术可以避免文字长短不均带来的处理困难;使用深度学习抽象特征,可以避免大量人工提取特征的工作;模拟词与词之间的联系,有局部特征抽象化和记忆功能,因此,深度学习技术在情感分析中发挥了越来越重要的作用。

目前情感分析用到的深度学习神经网络有多层神经网络(MLP)、卷积神经网络(CNN)和长短期记忆模型(LSTM),具体不同的模型通过交叉验证技术选取最优参数(比如,几层模型、每层节点数、Dropout 概率等)。情感分析的模型主要分为三个层面,分别为:Document level、Sentence level和Aspect level。其中,Document level是将整个文本作为分析单元并假设该文本讨论的对象为单一实体且情感、观点都是鲜明、清晰的,即neural、positive or negative 。Sentence level则是以每个句子作为单独的分析对象,由于句子与句子间可能存在某些关联,因此我们不能将其认为是观点明确的。而对于Aspect level其分类粒度更细,即我们需要抽取出targets不同层面相互独立的评价,并进行总结综合得到最后的情感。

本文回顾情感分析中必备的TOP模型。一些经典的自然语言处理领域的模型,例如XLNet、Bert及各种变体,适用于NLU、文本生成、情感分析等多个领域,本文均不涉及。本文只专注于专门的sentiment analysis模型。  

一、Document level/Sentence level

1、 CNN

这篇文章引入卷积神经网络(CNN),将层与卷积滤波器应用于局部特征。最初发明用于计算机视觉的CNN模型后被证明对NLP有效,并在语义分析、搜索查询检索、句子建模和其他传统NLP任务中取得了优异的结果。本文训练了一个简单的CNN,在一个无监督的神经语言模型得到的单词向量的基础上再加上一层卷积,最初保持单词向量静态,只学习模型的其他参数。这个简单的模型在多个基准上取得了很好的结果,这表明预先训练的向量是“通用”的特征提取器,可以用于各种分类任务。通过微调学习特定于任务的向量,可以得到进一步的改进。最后,作者描述了对网络结构的一个简单修改,通过拥有多个通道,允许使用预先训练的和任务特定的向量。

                                                     图1 有两个通道的例句的模型结构

设xi ∈ Rk 为对应于句子中的第i个单词的k维词向量,句子长度为n,图1左侧是一个n*k的矩阵,表示一句话的n个词语,每个词语是一个k维向量,假设文本中最长的句子中的词个数为n,则 小于n 的句子填充为m。最终得到的词向量矩阵为 n * k。表示为:

其中,⊕是串联运算符。X_i:n为单词xi的串联(从第i个单词到第n个单词,把它们串联起来),卷积运算包含一个滤波器w∈R^hk,它被应用于单词h的窗口以生成一个新的特征。例如,特征c_i由单词x_i:i+h−1的窗口生成:

其中,b∈R是一个偏置项,w是权重,f是一个非线性函数。这个过滤器应用于句子{X_1:h, X_2:h+1, …, X_n-h+1:n}生成特征图:

然后在特征映射上应用max超时池化操作,并将最大值ˆc=max{c}作为与此对应的特征特殊过滤器。其思想是为每个特征映射捕获最重要的特征,即具有最高值的特征。这种池化方案可以处理可变的句子长度。

此外,本文在倒数第二层使用了dropout以解决过拟合问题,当模型参数太多而训练样本少的时候容易出现过拟合问题。  

2、 GRNN

这篇文章引入了一个神经网络,以统一的、自底向上的方式来学习基于向量的文本表示方法。该模型首次使用CNN/LSTM来学习句子表示,利用Gated RNN自适应地对句子的语义及其之间关系进行编码。

                图2 文本级情感分类的神经网络模型。(w_i)^n代表第n个句子中的第i个词,l_n是句子长度

词向量表示
词向量表示有两种实现方式:随机初始化或者预训练的方式。作者参考的是word2vec实现方案,并且用预训练词向量的方式以保留更多的语义信息。

句子表示
CNN和LSTM模型都可以用于句子编码。两种模型可以将非固定长度的句子表示成定长的向量,且不需依赖依存句法分析或者成分句法分析就能保留句子的词序等信息。作者在本文中使用CNN with multiple conventional filters of different widths的方式实现句子编码。作者在文章中分别使用宽度为1,2,3的卷积核去获取unigrams,bigrams和trigrams。为了得到句子的全局语义信息,作者随后接入一个average pooling layer,再接入tanh激活函数(作用是引入非线性),最后将整个句子的不同宽度卷积核的向量表示接入一个Average层,从而得到该句平均向量表示。整个过程如图3所示。  

                                                           图3 使用卷积神经网络进行句子合成

篇章表示

一个最简单的实现策略是:忽略句间顺序,直接使用句向量的平均值作为该文本向量表示。先不考虑计算效率问题,这种方式并不能有效的保留句子之间复杂的语言关系(比如:原因结构,反义结构等)。CNN模型可以用来表示篇章,这种模型通过其线性层储存句间关系。RNN也可以实现,但基本的RNN模型存在缺陷:梯度消失或者梯度爆炸。在长句中问题就会凸显出来:梯度可能会呈指数级上升或者衰减,这就使得长距离依赖问题变得棘手。为了解决这个问题,作者将基本RNN改造成一种带有门控结构的RNN,这种方式类似于LSTM或者GNN,区别见下列转换函数:

该模型可以被看作是一个LSTM,它的输出门永远是打开的,因为我们更倾向于不抛弃句子的任何部分语义来获得更好的文本表示。图4(a)显示了一个标准的顺序方式,其中最后一个隐藏向量被视为情感分类的文本表示。我们可以做进一步的扩展,比如将隐性向量的平均值作为文本表示,这需要考虑具有不同颗粒度的历史语义的层次结构。该方法如图4(b)所示。进一步,可以以同样的方式使用前面的历史和后面的证据,并利用双向门控RNN作为计算工具。

                图4 用门控递归神经网络进行文本文建模。GNN代表了门控递归神经网络的基本计算单元

组合的文本表示可以自然地被视为文本特征,用于情感分类而不需要特征工程。具体来说,首先添加一个线性层,将文本向量转化为实值向量,其长度为类号C。之后,添加一个softmax层,将实值转化为条件概率,其计算方式如下:

对于模型训练,作者使用黄金情感分布P^g(d)和预测的情感分布P(d)之间的交叉熵误差作为损失函数:

然后通过反向传播对整个参数集求损失函数的导数,使用随机梯度下降算法更新参数:

3、  CLSTM

神经网络在情感分类任务中取得了巨大的成功,因为它们能够减轻特征工程的任务压力。然而,由于存储单元的缺陷,如何在递归架构下对文档级情感分类的长文本进行建模仍有待研究。为了解决这个问题,本文提出了一个缓存的长短期记忆神经网络(Cached Long Short-Term Memory Neural Networks ,CLSTM)来捕捉长文本中的整体语义信息。CLSTM引入了一个缓存机制,它将内存分为具有不同遗忘率的几组,从而使网络能够在一个循环单元中更好地保持情感信息。

由于标准的LSTM不可避免地会丢失有价值的特征,本文提出了一种缓存的长短期记忆神经网络(cached long short-term memory neural networks,CLSTM),通过引入缓存机制,在较长的步骤中捕捉信息。此外,为了更好地控制和平衡历史信息和传入信息,采用了LSTM的一个特殊变体,耦合输入和遗忘门LSTM(Coupled Input and Forget Gate LSTM,CIFG-LSTM)。在CIFG-LSTM中,输入门和遗忘门被耦合为一个统一的门,即i(t)=1-f(t)。用f(t)来表示耦合门:  

CLSTM旨在通过缓存机制捕捉长距离信息,该机制将记忆分为若干组,不同的遗忘率被视为过滤器,分配给不同的组。不同的组别通过 squashing 遗忘率的尺度来捕捉不同尺度的依赖性。遗忘率高的组是短期记忆,而遗忘率低的组是长期记忆。特别是,把存储单元分为K组{G_1, - -, G_K}。每组包括一个内部存储器c_k、输出门o_k和遗忘率r_k。不同组的遗忘率被压制在不同的范围内。LSTM修改如下:

为了更好地区分每组的不同作用,其遗忘率被squash到一个明显的区域。squash函数ψ_k(z)可以被形式化为:

图5 模型架构。不同风格的箭头表示不同的遗忘率。将带有星星的组送入全连接层进行softmax分类。下面是一个B-CLSTM的实例,文本长度等于4,记忆组的数量是3

双向CLSTM(B-LSTM)模型利用了额外的后向信息,从而增强了记忆能力。作者继续向CLSTM上引入双向机制,文本中的单词能够从上下文中获得信息。形式上,第k组的前向LSTM的输出为:

第k组的后向LSTM的输出为:

因此,将给定文本w_1:T中的每个词wt编码为(h_k()^t):

至此,用于文档级情感分类的特定任务输出层具有了对长文本进行建模的能力,可以使用本文提出的模型来分析文档中的情感。

二、Aspect level

4、 TD-LSTM/TC-LSTM

本文首先提出了一种基本的长短期记忆(LSTM)方法,建模一个句子的语义表示,而不考虑被评价的目标词。然后,考虑目标词对LSTM进行扩展,得到目标依赖的长短期记忆模型(TD-LSTM)。TD-LSTM是对目标词与其上下文词的相关度进行建模,并选择上下文的相关部分来推断指向目标词的情感极性。该模型采用标准的反向传播方法进行端到端的训练,其损失函数为监督情感分类的交叉熵误差。最后,对目标连接的TD-LSTM进行了扩展,其中,合并目标与上下文词的语义关联。

图6 基本长短期记忆(LSTM)方法及其用于目标相关情感分类的目标相关扩展TD-LSTM。其中,w代表长度为n的句子中的词,{w_l+1, w_l+2, …, w_r-1} 为目标单词,{w_1, w_2, …, w_l}是前面的上下文单词,{w_r, …, w_n−1, w_n}是上下文词

  如图6,TD-LSTM是以目标词为分界点利用两个LSTM,从目标词的左右向目标词方向进行上下文信息融合。具体来说,使用两个LSTM神经网络,一个左LSTM L和一个右LSTM R,分别对前面和后面的上下文进行建模。LSTM L的输入是前面的上下文加上目标字符串,LSTM R的输入是后面的上下文加上目标字符串。从左到右运行lstm l,从右到左运行lstm r,因为作者认为将目标字符串作为最后一个单元可以更好地利用目标字符串的语义。然后,将LSTM L和 LSTM R的最后一个隐藏向量连接到一个softmax层,对情感极性标签进行分类。还可以尝试对LSTM L和LSTM R的最后隐藏向量进行平均或求和。

TD-LSTM相较于LSTM可以更好的结合上下文的信息,但是人在阅读时除了会考虑到上下文信息,还会考虑到语境,就是目标词与上下文之间的交互关系。由此本文提出了TC-LSTM,TC-LSTM就是简单粗暴的在输入上concat一个目标词的向量表示。该组件在构成句子时明确地利用目标词与上下文词之间的连接。目标字符串t,将目标t表示为{w_l+1, w_l+2…, W_r−1},因为目标可以是可变长度的单词序列,通过对t所包含单词的向量进行平均,得到目标向量v_target。TC-LSTM与TD-LSTM模型的区别是在TC-LSTM中,每个位置的输入是单词嵌入和目标向量v_target的连接。TC-LSTM可以更好地利用目标词和上下文词之间的联系来构建句子的表征。  

图7 目标连接长短期记忆(TC-LSTM)模型用于目标依赖的情感分类,其中w代表长度为n的句子中的词,{w_l+1, w_l+2, ..., w_r-1}是目标词,v_target是目标表示,{w_1, w_2, ..., w_l}是前面的上下文词,{w_r, ..., w_n-1, w_n}是后面的上下文词

最后,模型训练交叉熵损失函数:

其中,S为训练数据,C为情感类别数,s为一句话,Pc(s)是通过softmax层给出的预测s为C类的概率,(P_c)^g (s)表示C类是否是正确的情感类别,其值为1或0。通过反向传播对损失函数对所有参数求导,并用随机梯度下降法更新参数。

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn