分享一种情感分析的解决方案

描述

情感分析是比较复杂和高阶的AI应用,在AI和人的交互过程中,能够准确地把握人的情感状态,从而极大地提升AI产品体验,对质检、对话交互、风控、舆论监督等都有着重要意义。本次技术分享要点

1、情感分析基础知识与应用场景

2、情感分析落地应用中三个挑战,如何利用多模态信息提升效果、如何利用领域迁移技术减少标注量以及如何利用细粒度情感分析为用户提供更加实用的情感分析结果

3、追一科技情感分析解决方案

情感分析技术介绍

什么是情感分析

情感是人对客观事物所持的态度。最简单的情感可以分为积极(正向)、消极(负向)、中性,又称为情绪。除了中性外,更多样化的情感又可细分为:喜、怒、忧、悲、恐、惊等。这些情感不仅构成了人与人之间沟通交流的多样性,也包含了丰富的信息,帮助我们了解目标对象在特定场景下的状态以及对相关事务的态度。通过算法模型,结合具体场景和数据分析目标对象的情感状态,这就是情感分析。 在人工智能(AI)产品和人的交互过程中,能够准确地把握人的情感状态可以极大地提升AI产品的体验。这在质检,对话交互,风控,舆论监督等方面都有着重要的意义。例如,在服务行业中,对客户的服务满意度分析可以帮助企业提高服务质量;而对于电商领域,分析用户对某商品及其竞品的喜好有助于商家找到提升产品竞争力的门道;在人机交互中掌握会话方的情感状态可以帮助机器人适时地采用恰当话术表达安抚和谅解,提升交互体验。在现实应用中有非常多的场景需要分析情感或者态度的信息,情感分析算法提供了提炼这些关键信息的途径。 从不同的角度可以把情感分析方法做不同的归纳。按照对情感的划分方式,可以分为:情感极性分析、情感类别分析和情感程度分析。按照对象粒度分,又有会话级情感分析、句子级情感分析,以及实体级情感分析等。具体分类因所处理的场景和问题而不同。

什么是多模态

我们平时接触到的信息可以来源于文字、声音、图像、味觉、触觉等。我们把每一个信息的来源域称为一个模态。 之所以划分出不同的模态,首先是因为不同场景下可以接触到的信息不同,其次是不同模态提供的信息往往不同,而最重要的是对不同模态的信息需要采用的处理和建模方式也不同。简单情况下,我们可以仅通过单一的模态就可以得到一个对情感态度的判断,例如一段评价文字,一通对话录音,一段评论视频等。自然地,我们也可以结合多个模态的数据并将其统一建模,这就是多模态方法。 简单来讲,多模态方法的核心驱动就是:更多的信息来源可以帮助我们做出更优的决策。

多模态情感分析

对于情感分析来说,情感表达可以来源于文字、音频、图像,结合两种及以上模态建模情感分析,就是多模态情感分析方法。由于不同模态的信息在数据形式和处理方式上有很大差别,在统一模型中多增加一种模态信息虽然可以带来潜在的建模效果提升,但同时也增加了建模的复杂度和难度。例如,通过一句话的文字和对应的录音建模时,需要先将字符串和音频分别用两种截然不同的处理方式量化为模型可接受的表征。 多模态模型策略在情感分析任务中是十分必要的。首先,很多时候仅通过文本或者语音很难准确判断出情感状态。一个极端例子是反讽。反讽往往结合中性或者积极的文本内容和与内容不匹配的音频来完成消极(负向)的情感表达。而这仅靠单模态模型就很难判断出真实的情感意图。其次,单模态模型容易受噪声影响而导致效果问题,例如上游语音识别(ASR)出现的识别错误往往会对下游分类任务产生较大影响。因此,要想在实际应用中有一个稳定强大的模型,多模态的建模方法就是必行之道。

情感分析的方法

情感本身是一种复杂的信息体现,在情感建模中使用不同的模态信息有着不同的处理方法及对应的挑战,下面简单介绍一下目前通用的一些建模方法及它们所存在的问题。

单模态方法简介

单模态模型指的是通过单一信号进行情感分析的模型,例如仅基于文本内容或音频信号来进行情感分析。

文本模型

得益于丰富的文本数据来源,文本模型是最常用的情感分析处理方法,通常的任务是对一句话的文本进行情感分类。从原理上大致可以分基于情感词典的方法、以及基于深度学习的方法。基于感情词典的方法此方法是基于跟情感分类相关的关键词,结合目标场景预先建立一个情感关键词的词典,由关键词的情感汇总判断出句子的情感,是一种自下而上的方法。

实际应用中,基于情感词典的方法往往和规则结合使用,从而实现更准确的判断。但是维护情感词典和规则本身是一项耗时耗力的工作,对词典的调优也有着很大的困难。 而基于深度学习的方法则是当前较为流行的方法,它的好处在于它可以端到端地进行情感分析任务,而不需要像基于情感关键词典的方法那样建立词典并使用规则。随着深度学习技术在NLP应用中的不断发展,许多不同的深度学习模型都能用来进行情感分析,例如CNN/RNN模型等。同时随着大型预训练模型的兴起,预训练+迁移学习的方式也被用于情感分析。关于预训练模型,我们在系列文章的第一篇进行了详细的介绍,这里就不再展开。

音频模型

相对于离散的文本,音频信号输入为近似连续的数值,通常需要做预处理将音频文件转化为频谱。具体步骤大致为:分帧-加窗-STFT-转化梅尔频谱,得到一个维度的特征,其中跟时间长度有关,为特征长度。音频输入由于其序列化的特点,通常也有基于CNN/RNN的方法,以及基于CRNN或CNN+Attention的方法。

多模态方法简介

单模态情感分析方法主要的不足在于没有利用完整的信息来进行情感分析。例如,如果仅仅基于文本来判断情感,则丢失掉了说话人语气与语调等与感情息息相关的信息。因此多模态方法的核心任务是最大化发挥模态融合的优势完成建模。例如通过构建“语音+文本”的双模态模型,以此得到一个效果优于同量级单模态模型的双模态模型,达到1 + 1 》 2的效果,这其中的关键在于如何将不同模态融合到一起。 模态融合可以按照其发生的不同阶段或者融合的具体方式进行大致的归类。模态融合发生的不同阶段可以直观地理解为,“模态融合”这一步发生在模型中的哪个位置,它通常可以划分为:

提前融合(Early Fusion):将不同模态的输入在模型浅层完成融合,相当于将不同单模态的特征统一到同一个模型输入参数空间,融合后的特征再输入到单个模型中完成特征提取和预测。但是由于不同模态本身参数空间的差异性,在输入层统一多个不同参数空间的方法并不能达到预期效果,实际往往很少被使用。

推迟融合(Late Fusion):推迟融合方法尝试通过模型来解决参数空间不统一的问题。首先对不同模态的输入数据分别用不同的网络结构进行建模和特征提取,最终在分类层前将不同模态提取到的特征进行融合,并依赖梯度反向传播将不同模态的特征统一到同一特征空间,最后在这个新的空间上做简单的分类预测。推迟融合由于其简单的实现方式和不错的效果往往应用较普遍。

多阶段融合(Muilti-Stage Fusion):推迟融合虽然通过网络本身在分类层前将不同模态特征映射到同一参数空间 ,但仅仅是在高级特征层对不同的模态特征进行融合,也因此失去了在特征提取阶段不同特征之间的相互关联信息。多阶段融合为了解决以上问题,在多个阶段对特征进行融合操作。通常先通过简单的的网络结构将不同模态参数空间统一化,融合后的特征再继续经过后续深度特征提取网络进行进一步模态相关的深层特征提取并融合,不同模型结构分支提取到的特征在分类层之前做最终的融合后进行分类预测。多阶段融合既保留了使用不同模型结构处理不同模态分支的能力,又自然地达到了不同模态信息融合的目的,对提取到强大特征更有优势。这种方法的缺点是模型结构相对复杂,往往会设置多个损失函数,有时需要进行分阶段调优。

除了按照模态融合的阶段进行划分,多模态方法还可以根据模态融合的具体方法进行划分为:

基于拼接的特征融合:这种方式假设不同模态特征已经被统一在了同一参数空间上,并简单地将不同模态的特征进行拼接来完成融合过程。该方法虽然简单,但它并没有考虑特征之间的相互作用增益,依赖下游分类网络来融合模态信息。

基于注意力的特征融合:这种方法将不同模态的特征通过注意力模块进行打分后融合,以达到充分利用模态间信息增益的目的。

情感分析实际应用挑战

我们在前面简单介绍了单/多模态情感分析中最常用的基本方法,而情感分析技术在落地使用中,也面临着一些实际的挑战。

首先面临的是训练速度、推理速度、模型大小等与模型性能相关的问题。前面的介绍中指出,采用多模态方法理论上可以更好地进行情感分析。但在实际落地使用中,如果采用多模态模型,则代表着模型需要对多个模态进行建模,因此模型的体量通常都比单模态模型要大,而性能也随之变差。

其次是标注数据需求量的问题,这是深度学习方法普遍存在的问题。而情感分析也与多数的基于深度学习的NLP技术一样,存在着跨领域的数据标注问题。具体来说,在某一特定场景(如保险客服)下训练的模型往往不能直接用在其它场景(如运营商客服)。这是由于情感表达本身依赖于场景,在一个场景下的表达可能在另外一个场景下蕴含着不同的情感态度。同时,不同场景对情感态度判读的界定也会有差别。除此以外,如果采用的是多模态方法,还需要对不同模态的数据都进行标注,并且需要在标注过程中综合考虑各模态表达的信息。这类数据获取的难度和标注成本也对多模态情感模型的实际应用有着影响。

最后是情感分析应用场景的问题。在一些场景中,用户需要的不仅仅是“正向”、“负向”这种简单的感情标签,更希望知道感情投射的对象。例如针对句子“虽然服务态度还不错,但我的问题还是没有解决”,对客户来说更加有价值的是给出不同对象的情感分析结果,例如“服务态度-正向;问题没解决-负向”。

追一科技情感分析解决方案

我们将在这一部分介绍追一科技在解决上述问题的方法。

轻量级双模态情感分析模型

为了解决模型的性能问题,我们在2020年提出了新的轻量级双模态模型,该模型在IEMOCAP情感分类数据集上取得了【音频+文本】双模态模型的当前最优效果(SOTA),同时发表论文Efficient Speech Emotion Recognition Using Multi-Scale CNN and Attention, icassp 2021,并被世界人工智能语音领域顶会ICASSP(2021)录用,这标志着追一科技多模态情感分析算法能力处于业内领先水平。

具体来说,我们提出基于多尺度卷积和统计池化相结合的方法来进行不同模态的特征抽取以及模态融合。

相对于其它双模态情感模型,我们提出的模型没有使用性能较低的RNN网络及深层卷积网络,也没有利用大型的预训练模型,而是用了简单的单层多尺度卷积提取局部多样性浅层特征,借助平均、最大、标准差池化得到综合的全局统计特征,最终结合特征拼接和Attention机制融合语音和文本特征并作分类。此外,我们还引入了音频说话人识别中常用的xvector特征做为辅助全局音频特征。模型不仅在效果上赶超已有的最优模型,同时由于浅层CNN结构及高度并行化的模型设计,训练/推理速度也更优。

在模态融合层面,为了保证模型的轻量性同时获得好的模型效果,我们用了基于Attention的Late-Fusion方法,并结合图像领域中常用的多尺度特征:

具体来说,音频信号(MFCC)与文本信号(Word Embedding)分别经过各自的多尺度卷积(MSCNN)与统计池化(SPU)后,再利用Attention机制进行融合,最后辅以xvector进行感情类别的预测。值得指出的是,该方法相比与基于BERT等大型预训练的方法在预测准确率上,有相当大的性能优势。在我们的实际应用场景测试中,该方法比基于BERT的方法分别快5倍(CPU)/2倍(GPU)。

无监督域适应(Unsupervised Domain Adaption)

第二个需要解决的是标注数据量的问题。前文已经分析过,现有模型存在跨域困难的问题,同时由于标注成本高,在实际应用落地中难度较大。我们尝试找到了一个将已训练模型通过无监督域适应方法迁移到新领域上的方法,使得在新的业务领域上,已有的其它领域模型也能获得不错的初始表现。 域适应的核心思想是:在特征空间上某一度量准则下, 如果能够使得源域与目标域特征分布尽可能接近,那么源域上已经训练好的预测模块可更好地直接用于目标域,从而达到模型跨域迁移的目的。

更进一步地,这个过程我们希望尽量地节约成本,最好是在不需要对新的目标领域数据进行标注的前提下完成。为了完成以上域适应和无监督的目的,我们需要解决以下两个问题:

如何度量源域和目标域特征的相似程度

如何无监督地优化并构建目标域上的模型

针对第一个问题,简单的解决方案是人为设定好度量的metric,例如我们可以用consine距离,L1、L2距离等。但这些毕竟是人为规定的,我们也无法确定哪一种度量最合适。换一种思路,利用神经网络的学习能力,完全可以构建一个网络并让它去学习一个最合适的度量,而我们只需要站在高处对这个度量效果做出简单的指点。这即是基于对抗学习的对抗迁移思想。而站在高处的指点,完全可以依据判段特征是来自源域还是目标域来实现。数学上相当于是实现了用Jensen-Shannon散度(用交叉熵损失)或者Wasserstein距离(用Wasserstein距离损失,又叫推土机距离)做为度量metric。

第二个问题,目标域上的模型构建和优化需要分阶段进行,但是仍然统一在一个模型框架下,简要的步骤为:

1.有监督训练: 源数据 → 源模型 [Gs+ Fs] 2.对抗训练(无监督): a)复制特征提取网络, 构建判别器 [Gs → Gt, D] b)循环至稳定: i.训练m轮D ii.训练n轮Gs 3.得到目标模型: [Gt + Fs]为了测试这种无监督域适应的模型迁移效果,我们在多个领域数据上做了测试:

可以看到,在有标注数据的服务商领域上,我们的双模态情感模型二分类效果可达94%的准确率。在三个其它场景中,不做无监督迁移的模型测试结果非常糟糕(迁移前),基本上接近于盲猜。而做了无监督迁移的模型(迁移后)效果较之前有了大幅度提升,这种提升完全是建立在不需标注数据的条件下实现的,在实际应用中有重要意义。

细粒度情感分析

单纯的分类模型只能够给出情感的判断结果而不能给出情感的指向目标,例如:“这个电饭煲非常好用“,得到结果为积极(正向)。而细粒度情感分析则可以在更加精细的维度上给出情感分析的结果,如下图所示:

从上面的例子可以看出,同一句话,在更细的粒度上的情感倾向是可能存在不同的,因此有时候直接给出一句话的整体情感分析结果并不能满足实际使用的需要。为了使模型能够输出细粒度的情感分析结果,我们将此问题看作是一个序列标注问题,这也是细粒度情感分析任务的通常做法。

通常来说,在大型预训练模型的输出上额外增加序列标注的输出模块即可以完成序列标注任务。序列标注的输出模块形式较为灵活,例如采用线性层、RNN、Self Attention或者是CRF等,在这里不再对这些常规的方法做一一介绍。 值得一提的是,这个任务可以用我们提出的Global Pointer方法来解决,因此这里主要介绍如何用Global Pointer来进行序列标注。首先,序列标注的任务是需要识别出文本中的片段位置,并给出该片段的标签。因此对于输入长度为的文本,首尾组合一共有个候选的可能组合。如果该序列中有个需要定位的实体,那么该问题则变成了从个类别中选取个目标类的多标签分类问题,可以按照常规的多标签分类方式来解决。而Global Pointer则正是采用了这一简单直观的思路来解决序列标注的问题,这种方式的优势在于在预测过程中,所有实体是一次给出的,并且可以识别出嵌套实体的情况,非常简便快捷。而如果目标实体有种标签,那么只需要进行次分类,即每种实体标签用一个多标签分类来建模。

依照上面的思路,对于长度为的序列,通过编码器得到每个位置上的表征,令代表序列中第个位置到第个位置的片段的实体类型为的分数,则: 其中,。我们采用自研的多标签分类损失作为最后的优化目标:

其中是该样本的所有类型为的实体的首尾集合,是该样本的所有非实体或者类型非的实体的首尾集合,注意我们只需要考虑的组合,即

另外需要指出的是,在进行分数计算的时候,由于需要考虑到q与k的位置关系,因此我们在这一步中加入了自研的旋转位置编码。旋转位置编码的加入可以大大提升Global Pointer的最终效果。 我们在不同的领域对细粒度情感分析方法进行了测试,效果如下:

可以看出细粒度情感分析可以明确给出客户反馈中,针对不同对象的感情效果。

责任编辑:lq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分