语音和文本之间的模态差异虽大,但利用训练过的Tokenizer将所有未标注的语音和文本转换到相同的离散表示空间。这样,两种模态亦能在预训练中通过共享接口自然地交互。
如今,人工智能技术已经能够通过语音识别与语音合成实现两者的相互转换。随着自监督表征学习分别在自然语言处理(NLP)与语音领域取得了显著进展,研究者们开始关注语音和文本的联合预训练方法。
近期,微软亚洲研究院与微软云计算平台 Azure 语音组的研究员们提出了文本数据增强的语音预训练模型SpeechLM。神经科学研究显示,人类在接收语音和文字信息时会使用不同的大脑皮层分别预处理语音和文本,然后再将预处理的结果投射至同一个被称为Broca and Wernicke的区域提取语义等信息。受此启发,研究员们开始使用音素单元(phoneme unit)或隐藏单元(hidden unit)作为共享的语义接口[LZ1] 来桥接语音和文本模态。该接口具有很强的可解释性和可学习性。通过这个共享的语义接口,SpeechLM可以利用额外的文本数据来提升语音预训练模型的性能。在典型的语音-文本跨模态任务(如语音识别、语音翻译)和语音表征学习基准数据集SUPERB [1]上,SpeechLM表现优异。图1展示了在LibriSpeech数据集中使用不同数量的文本数据后,SpeechLM显示出的语音识别性能。仅仅使用少量文本数据(10K个文本句子)的SpeechLM显著地超越了之前的SOTA模型。目前,该模型已经在GitHub开源,并将集成到 Hugging Face框架中供研发者参考。
回首语音和语言联合训练
与NLP不同,语音信号是连续的,因此很难直接找到类似于BERT预训练的预测标签。想要解决这个问题,就需要一个Tokenizer将连续的语音特征映射至离散的标签。受文本预训练方法BERT的启发,语音表示学习模型HuBERT [2]利用MFCC特征或者Transformer中间层表示的k-means模型作为Tokenizer,将语音转换为离散的标签,通过迭代的方法进行模型预训练。
以往的联合预训练方法大多简单地让语音和文本共享神经网络的模型参数。这种训练方法不能保证语音和文本在同一语义空间内,存在迁移干扰和容量稀释的问题。为了缓解这两个问题,SLAM [3]和mSLAM [4]利用额外有监督的语音识别任务来增强语音与文本的一致性。然而,这些方法仍然无法使用相同的建模单元对未标注的语音和文本数据进行建模。虽然MAESTRO能够在RNN-T框架下通过模态匹配算法从语音和文本模态中学习共享表示,但该算法只能在成对的语音-文本数据上进行优化。
SpeechLM的目标就是利用文本数据来改善语音表征的学习。不同于之前的研究,SpeechLM能够利用训练过的Tokenizer将所有未标注的语音和文本转换到相同的离散表示空间。这样,两种模态亦能在预训练中通过共享接口自然地交互。
构建语音和文本的共享桥梁
语音和文本之间的模态差异极大。首先,语音信号比文本数据具有更多更丰富的信息,如韵律、音色、情感等。其次,语音是由一连串音素组成的连续信号,通常表示为连续平滑的波形,而文本是由词语、字词或字符表示的离散数据。第三,语音表示比文本表示更长,例如,一秒16KHZ的语音包含16000个采样点和几个单词。因此,如何弥合语音和文本之间的模态差异是构建两者桥梁的关键。
为了解决这一问题,研究员们探索使用了一个定义好的离散标签来桥接语音和文本,将语音和文本映射到共享离散空间中进行联合预训练。利用音素单元或者隐藏单元作为语音和文本之间的桥梁具有以下优点:
(1)将语音和文本分别对齐成共享的中间表示比直接对齐两者更容易
(2)可以充分利用额外的未标注数据来提升对齐学习
(3)可以利用更细粒度的对齐信息(例如帧级别对齐)来促进联合建模。
研究员们定义了两套不同的离散Tokenizer来实现这个目的,分别将语音文本映射到基于音素单元的表示空间和基于隐藏单元的表示空间。音素单元Tokenizer使用混合ASR模型,将未标记的语音序列转录成帧级别的音素单元,并通过词典转换未标记的文本。而隐藏单元Tokenizer使用基于HuBERT的k-means模型将语音聚类为隐藏单元,并利用非自回归模型将未标记的文本转换为隐藏单元。所有的Tokenizer模型都是用无监督数据或少量ASR数据训练获得的,并在预训练前离线使用,不直接参与预训练过程。
信息抽取(information extraction),简称IE,即从自然语言文本中,抽取出特定的事件或事实信息,帮助我们将海量内容自动分类、提取和重构。这些信息通常包括实体(entity)、关系(relation)、事件(event)。 例如从新闻中抽取时间、地点、关键人物,或者从技术文档中抽取产品名称、开发时间、性能指标等。能从自然语言中抽取用户感兴趣的事实信息,无论是在知识图谱、信息检索、问答系统还是在情感分析、文本挖掘中,信息抽取都有广泛应用。
信息抽取主要包括三个子任务 :
关系抽取 :通常我们说的三元组(triple)抽取,主要用于抽取实体间的关系。
实体抽取与链指 :也就是命名实体识别。
事件抽取 :相当于一种多元关系的抽取。
关系抽取(RE)是为了抽取文本中包含的关系,是信息抽取(IE)的重要组成部分 。主要负责从无结构文本中识别出实体,并抽取实体之间的语义关系,被广泛用在信息检索、问答系统中。本文从关系抽取的 基本概念 出发,依据不同的视角对 关系抽取方法进行了类别划分 ;最后分享了基于深度学习的关系抽取方法常用的数据集,并总结出基于深度学习的关系抽取框架。
完整的关系抽取包括实体抽取和关系分类两个子过程。实体抽取子过程也就是命名实体识别,对句子中的实体进行检测和分类; 关系分类子过程对给定句子中两个实体之间的语义关系进行判断,属于多类别分类问题 。
例如,对于句子“青岛坐落于山东省的东部”,实体抽取子过程检测出这句话具有“青岛”和“山东”两个实体。关系分类子过程检测出这句话中“青岛”和“山东”两个实体具有“坐落于”关系而不是“出生于”关系。在关系抽取过程中,多数方法默认实体信息是给定的,那么关系抽取就可以看作是分类问题。
目前, 常用的关系抽取方法有5类,分别是基于模式匹配、基于词典驱动、基于机器学习、基于本体和混合的方法 。基于模式匹配和词典驱动的方法依靠人工制定规则,耗时耗力,而且可移植性较差,基于本体的方法构造比较复杂,理论尚不成熟。 基于机器学习的方法以自然语言处理技术为基础,结合统计语言模型进行关系抽取,方法相对简单,并具有不错的性能,成为当下关系抽取的主流方法,下文提到的关系抽取方法均为机器学习的方法 。
关于信息关系抽取,可以 从训练数据的标记程度 、 使用的机器学习方法 、 是否同时进行实体抽取 和 关系分类子过程以及是否限定关系抽取领域和关系专制 四个角度对机器学习的关系抽取方法进行分类。
根据训练数据的标记程度可以将关系抽取方法分为 有监督、半监督和无监督三类 。
有监督学习 ,处理的基本单位是包含特定实体对的句子,每一个句子都有类别标注。 优点 :取能够有效利用样本的标记信息,准确率和召回率都比较高。 缺点 :需要大量的人工标记训练语料,代价较高。
半监督学习 ,句子作为训练数据的基本单位,只有部分是有类别标注的。此类方法让学习器不依赖外界交互,自动地利用未标记样本来提升学习性能。
无监督学习 ,完全不需要对训练数据进行标注,此类方法包含实体对标记、关系聚类和关系词选择三个过程。
根据使用机器学习方法不同,可以将关系抽取划分为三类: 基于特征向量的方法 、 基于核函数的方法 以及 基于神经网络的方法 。
基于特征向量的方法 ,通过从包含特定实体对的句子中提取出语义特征,构造特征向量,然后通过使用支持向量机、最大熵、条件随机场等模型进行关系抽取。
基于核函数的方法 ,其重点是巧妙地设计核函数来计算不同关系实例特定表示之间的相似度。 缺点 :而如何设计核函数需要大量的人类工作,不适用于大规模语料上的关系抽取任务。
基于神经网络的方法 ,通过构造不同的神经网络模型来自动学习句子的特征,减少了复杂的特征工程以及领域专家知识,具有很强的泛化能力。
根据是否在同一个模型里开展实体抽取和关系分类,可以将关系抽取方法分为 流水线(pipeline)学习 和 联合(joint)学习两种 。
流水线学习 是指先对输入的句子进行实体抽取,将识别出的实体分别组合,然后再进行关系分类,这两个子过程是前后串联的,完全分离。
联合学习 是指在一个模型中实现实体抽取和关系分类子过程。该方法通过使两个子过程共享网络底层参数以及设计特定的标记策略来解决上述问题,其中使用特定的标记策略可以看作是一种序列标注问题。
根据是否限定抽取领域和关系类别,关系抽取方法可以划分为 预定义抽取 和 开放域抽取 两类。
预定义关系抽取 是指在一个或者多个固定领域内对实体间关系进行抽取,语料结构单一,这些领域内的目标关系类型也是预先定义的。
开放域关系抽取 不限定领域的范围和关系的类别。现阶段,基于深度学习的关系抽取研究集中于预定义关系抽取。
基于深度学习的关系抽取方法常用的数据集有 ACE关系抽取任务数据集 、 SemEval2010 Task 8数据集 、 NYT2010数据集 等
ACE关系抽取任务数据集 :ACE2005关系抽取数据集包含599篇与新闻和邮件相关的文档,其数据集内包含7大类25小类关系。
SemEval2010 Task 8数据集 :该数据集包含9种关系类型,分别是Compoent-Whole、Instrument-Agency、Member-Collection、Cause-Effect、Entity-Destination、Content-Container、Message-Topic、Product-Producer和Entity-Origin。 考虑到实体之间关系的方向以及不属于前面9种关系的“Other”关系,共生成19类实体关系。其中训练数据 8000个,测试数据2717个。
NYT2010数据集 是Riedel等人在2010年将Freebase知识库中的知识“三元组”对齐到“纽约时报”新闻中得到的训练数据。该数据集中,数据的单位是句包,一个句包由包含该实体对的若干句子构成。其中,训练数据集从《纽约时报》2005—2006年语料库中获取,测试集从2007年语料库中获取。
基于深度学习的关系抽取方法模型构建的重点在于利用不同神经网络的特点来抽取样本的特征,以学习样本的向量表示。在学习过程中,根据所用的神经网络基本结构的不同,可将基于深度学习的关系抽取方法分为 基于递归神经网络(recursive neural network,Rec-NN)的方法 、 基于卷积神经网络的方法 、 基于循环神经网络(recurrent net neural net-work,RNN)的方法 和 基于混合网络模型的方法 四类。
基于递归神经网络的关系抽取方法 首先利用自然语言处理工具对句子进行处理,构建特定的二叉树,然后解析树上所有的相邻子节点,以特定的语义顺序将其组合成一个父节点,如下图3所示。这个过程递归进行,最终计算出整个句子的向量表示。向量计算过程可以看作是将句子进行一个特征抽取过程,该方法对所有的邻接点采用相同的操作。
由于句子含义跟单词出现的顺序是相关的,因此关系抽取可以看作是一个时序学习任务,可以使用循环神经网络来建模。
基于循环神经网络的方法 在模型设计上使用不同的循环神经网络来获取句子信息,然后对每个时刻的隐状态输出进行组合,在句子层级学习有效特征。在关系抽取问题中,对每一个输入,关系的标记一般只在序列的最后得到。Zhang等首次使用双向循环神经网络来进行关系抽取,提出了BRNN模型。如下图7 所示,在双向循环神经网络中某一时刻的输出不仅依赖序列中之前的输入,也依赖于后续的输入。
为了更好地抽取句子中的特征,研究人员 使用递归神经网络、卷积神经网络与循环神经网络3种网络及其他机器学习方法进行组合建模来进行关系抽取 。
Vu等提 出 了 基 于 文 本 扩 展 表 示 的ECNN和基于链接的UniBRNN模型 ,将每个神经网络得到的多个结果根据投票机制得到关系的最终抽取结果。
Xiao等将 注意力机制引入一个多级的循环神经网络 ,该方法使用文本序列作为输入,根据标记实体的位置将句子分为5部分,使用同一个双 向LSTM网络在3个子序列上独立学习,然后引入词层级的注意力机制关注重要的单词表示,分别得到子序列的向量表示;随后,使用双向RNN网络进一步抽取子序列和实体的特征,并再次使用注意力机制将其转换成句子的最终向量表示,并送入到分类器中。
Nguyen等将 传统基于特征的方法(log-linear模型)、卷积神经网络方法和循环神经网络方法使用集成、投票等机制进行组合 。
zhang等提出 在双向LSTM 的基础上叠加注意力机制 ,以及使用卷积神经网络层获取句子的表示,再送入到一个全连接层和softmax层进行分类。
在联合学习问题上,Zheng等 使用递归神经网络和卷积神经网络组合来进行联合学习 ,也是一种共享底层网络参数的方法。
[1]庄传志,靳小龙,基于深度学习的关系抽取研究综述[J]中文信息学报,2019,33(12):1-18
更多自然语言处理相关知识,还请关注 AINLPer公众号 ,极品干货即刻送达。
与其他的人工智能技术相比,情感分析(Sentiment Analysis)显得有些特殊,因为其他的领域都是根据客观的数据来进行分析和预测,但情感分析则带有强烈的个人主观因素。情感分析的目标是从文本中分析出人们对于实体及其属性所表达的情感倾向以及观点,这项技术最早的研究始于2003年Nasukawa和Yi两位学者的关于商品评论的论文。
随着推特等社交媒体以及电商平台的发展而产生大量带有观点的内容,给情感分析提供了所需的数据基础。时至今日,情感识别已经在多个领域被广泛的应用。例如在商品零售领域,用户的评价对于零售商和生产商都是非常重要的反馈信息,通过对海量用户的评价进行情感分析,可以量化用户对产品及其竞品的褒贬程度,从而了解用户对于产品的诉求以及自己产品与竞品的对比优劣。在社会舆情领域,通过分析大众对于社会热点事件的点评可以有效的掌握舆论的走向。在企业舆情方面,利用情感分析可以快速了解社会对企业的评价,为企业的战略规划提供决策依据,提升企业在市场中的竞争力。在金融交易领域,分析交易者对于股票及其他金融衍生品的态度,为行情交易提供辅助依据。
目前,绝大多数的人工智能开放平台都具备情感分析的能力,如图所示是玻森中文语义开放平台的情感分析功能演示,可以看出除了通用领域的情感分析外,还有汽车、厨具、餐饮、新闻和微博几个特定领域的分析。
那么到底什么是情感分析呢?从自然语言处理技术的角度来看,情感分析的任务是从评论的文本中提取出评论的实体,以及评论者对该实体所表达的情感倾向,自然语言所有的核心技术问题,例如:词汇语义,指代消解,此役小气,信息抽取,语义分析等都会在情感分析中用到。因此,情感分析被认为是一个自然语言处理的子任务,我们可以将人们对于某个实体目标的情感统一用一个五元组的格式来表示:(e,a,s,h,t)
以图为例,e是指某餐厅,a为该餐厅的性价比属性,s是对该餐厅的性价比表示了褒义的评价,h为发表评论者本人,t是19年7月27日。所以这条评论的情感分析可以表示为五元组(某餐厅,性价比,正向褒义,评论者,19年7月27日)。
情感分析根据处理文本颗粒度的不同,大致可以分为三个级别的任务,分别是篇章级、句子级和属性级。我们分别来看一下。
1 篇章级情感分析
篇章级情感分析的目标是判断整篇文档表达的是褒义还是贬义的情感,例如一篇书评,或者对某一个热点时事新闻发表的评论,只要待分析的文本超过了一句话的范畴,即可视为是篇章级的情感分析。
对于篇章级的情感分析而言有一个前提假设,那就是全篇章所表达的观点仅针对一个单独的实体e,且只包含一个观点持有者h的观点。这种做法将整个文档视为一个整体,不对篇章中包含的具体实体和实体属性进行研究,使得篇章级的情感分析在实际应用中比较局限,无法对一段文本中的多个实体进行单独分析,对于文本中多个观点持有者的观点也无法辨别。
例如评价的文本是:“我觉得这款手机很棒。”评价者表达的是对手机整体的褒义评价,但如果是:“我觉得这款手机拍照功能很不错,但信号不是很好”这样的句子,在同一个评论中出现了褒义词又出现了贬义词,篇章级的分析是无法分辨出来的,只能将其作为一个整体进行分析。
不过好在有很多的场景是不需要区分观点评价的实体和观点持有者,例如在商品评论的情感分析中,可以默认评论的对象是被评论的商品,评论的观点持有者也是评论者本人。当然,这个也需要看被评论的商品具体是什么东西,如果是亲子旅游这样的旅游服务,那么评论中就很有可能包含一个以上的观点持有者。
在实际工作中,篇章级的情感分析无法满足我们对于评价更细致,如果需要对评论进行更精确,更细致的分析,我们需要拆分篇章中的每一句话,这就是句子级的情感分析研究的问题。
2 句子级情感分析
与篇章级的情感分析类似,句子级的情感分析任务是判断一个句子表达的是褒义还是贬义的情感,虽然颗粒度到了句子层级,但是句子级分析与篇章级存在同样的前提假设是,那就是一个句子只表达了一个观点和一种情感,并且只有一个观点持有人。如果一个句子中包含了两种以上的评价或多个观点持有人的观点,句子级的分析是无法分辨的。好在现实生活中,绝大多数的句子都只表达了一种情感。
既然句子级的情感分析在局限性上与篇章级是一样的,那么进行句子级的情感分析意义何在呢?关于这个问题,需要先解释一下语言学上主观句与客观句的分别。在我们日常用语当中,根据语句中是否带有说话人的主观情感可以将句子分为主观句和客观句,例如:“我喜欢这款新手机。”就是一个主观句,表达了说话人内心的情感或观点,而:“这个APP昨天更新了新功能。”则是一个客观句,陈述的是一个客观事实性信息,并不包含说话人内心的主观情感。通过分辨一个句子是否是主观句,可以帮助我们过滤掉一部分不含情感的句子,让数据处理更有效率。
但是在实操过程中,我们会发现这样的分类方法似乎并不是特别准确,因为一个主观句也可能没有表达任何的情感信息,知识表达了期望或者猜测,例如:“我觉得他现在已经在回家的路上了。”这句话是一个主观句,表达了说话人的猜测,但是并没有表达出任何的情感。而客观句也有可能包含情感信息,表明说话者并不希望这个事实发生,例如:“昨天刚买的新车就被人刮花了。”这句话是一个客观句,但结合常识我们会发现,这句话中其实是包含了说话人的负面情感。
所以,仅仅对句子进行主客观的分类还不足以达到对数据进行过滤的要求,我们需要的是对句子是否含有情感信息进行分类,如果一个句子直接表达或隐含了情感信息,则认为这个句子是含有情感观点的,对于不含情感观点的句子则可以进行过滤。目前对于句子是否含有情感信息的分类技术大多都是采用有监督的学习算法,这种方法需要大量的人工标注数据,基于句子特征来对句子进行分类。
总之,我们可以将句子级的情感分析分成两步,第一步是判断待分析的句子是否含有观点信息,第二步则是针对这些含有观点信息的句子进行情感分析,发现其中情感的倾向性,判断是褒义还是贬义。关于分析情感倾向性的方法与篇章级类似,依然是可以采用监督学习或根据情感词词典的方法来处理,我们会在后续的小节详细讲解。
句子级的情感分析相较于篇章级而言,颗粒度更加细分,但同样只能判断整体的情感,忽略了对于被评价实体的属性。同时它也无法判断比较型的情感观点,例如:“A产品的用户体验比B产品好多了。”对于这样一句话中表达了多个情感的句子,我们不能将其简单的归类为褒义或贬义的情感,而是需要更进一步的细化颗粒度,对评价实体的属性进行抽取,并将属性与相关实体之间进行关联,这就是属性级情感分析。
3 属性级情感分析
上文介绍的篇章级和句子级的情感分析,都无法确切的知道评价者喜欢和不喜欢的具体是什么东西,同时也无法区分对某一个被评价实体的A属性持褒义倾向,对B属性却持贬义倾向的情况。但在实际的语言表达中,一个句子中可能包含了多个不同情感倾向的观点,例如:“我喜欢这家餐厅的装修风格,但菜的味道却很一般。”类似于这样的句子,很难通过篇章级和句子级的情感分析了解到对象的属性层面。
为了在句子级分析的基础上更加细化,我们需要从文本中发现或抽取评价的对象主体信息,并根据文本的上下文判断评价者针对每一个属性所表达的是褒义还是贬义的情感,这种就称之为属性级的情感分析。属性级的情感分析关注的是被评价实体及其属性,包括评价者以及评价时间,目标是挖掘与发现评论在实体及其属性上的观点信息,使之能够生成有关目标实体及其属性完整的五元组观点摘要。具体到技术层面来看,属性级的情感分析可以分为以下6个步骤:
关于文本中的实体抽取和指代消解问题,我们已经在知识图谱的相关章节中做了介绍,这里就不再赘述。针对篇章级、句子级、属性级这三种类型的情感分析任务,人们做了大量的研究并提出了很多分类的方法,这些方法大致可以分为基于词典和基于机器学习两种,下面我们进行详细的讲解。
做情感分析离不开情感词,情感词是承载情感信息最基本的单元,除了基本的词之外,一些包含了情感含义的短语和成语我们也将其统称为情感词。基于情感词典的情感分析方法,主要是基于一个包含了已标注的情感词和短语的词典,在这个词典中包括了情感词的情感倾向以及情感强度,一般将褒义的情感标注为正数,贬义的情感标注为负数。
具体的步骤如图所示,首先将待分析的文本先进行分词,并对分词后的结果做去除停用词和无用词等文本数据的预处理。然后将分词的结果与情感词典中的词进行匹配,并根据词典标注的情感分对文本进行加法计算,最终的计算结果如果为正则是褒义情感,如果为负则是贬义情感,如果为0或情感倾向不明显的得分则为中性情感或无情感。
情感词典是整个分析流程的核心,情感词标注数据的好坏直接决定了情感分类的结果,在这方面可以直接采用已有的开源情感词典,例如BosonNLP基于微博、新闻、论坛等数据来源构建的情感词典,知网(Hownet)情感词典,台湾大学简体中文情感极性词典(NTSUSD),snownlp框架的词典等,同时还可以使用哈工大整理的同义词词林拓展词典作为辅助,通过这个词典可以找到情感词的同义词,拓展情感词典的范围。
当然,我们也可以根据业务的需要来自己训练情感词典,目前主流的情感词词典有三种构建方法:人工方法、基于字典的方法和基于语料库的方法。对于情感词的情感赋值,最简单的方法是将所有的褒义情感词赋值为+1,贬义的情感词赋值为-1,最后进行相加得出情感分析的结果。
但是这种赋值方式显然不符合实际的需求,在实际的语言表达中,存在着非常多的表达方式可以改变情感的强度,最典型的就是程度副词。程度副词分为两种,一种是可以加强情感词原本的情感,这种称之为情感加强词,例如“很好”相较于“好”的情感程度会更强烈,“非常好”又比“很好”更强。另外一种是情感减弱词,例如“没那么好”虽然也是褒义倾向,但情感强度相较于“好”会弱很多。如果出现了增强词,则需要在原来的赋值基础上增加情感得分,如果出现了减弱词则需要减少相应的情感得分。
另一种需要注意的情况是否定词,否定词的出现一般会改变情感词原本的情感倾向,变为相反的情感,例如“不好”就是在“好”前面加上了否定词“不”,使之变成了贬义词。早期的研究会将否定词搭配的情感词直接取相反数,即如果“好”的情感倾向是+1,那么“不好”的情感倾向就是-1。但是这种简单粗暴的规则无法对应上真实的表达情感,例如“太好”是一个比“好”褒义倾向更强的词,如果“好”的值为+1,那么“太好”可以赋值为+3,加上否定词的“不太好”变成-3则显然有点过于贬义了,将其赋值为-1或者-05可能更合适。
基于这种情况,我们可以对否定词也添加上程度的赋值而不是简单的取相反数,对于表达强烈否定的词例如“不那么”赋值为±4,当遇到与褒义词的组合时褒义词则取负数,与贬义词的组合则取正数,例如贬义词“难听”的赋值是-3,加上否定词变成“不那么难听”的情感得分就会是(-3+4=1)。
第三种需要注意的情况是条件词,如果一个条件词出现在句子中,则这个句子很可能不适合用来做情感分析,例如“如果我明天可以去旅行,那么我一定会非常开心。”,在这句话中有明显的褒义情感词,但是因为存在条件词“如果”,使得这个句子的并没有表达观点持有者的真实情感,而是一种假设。
除了条件句之外,还有一种语言表达也是需要在数据预处理阶段进行排除的,那就是疑问句。例如“这个餐厅真的有你说的那么好吗?”,虽然句子中出现了很强烈的褒义情感词“那么好”,但依然不能将它分类为褒义句。疑问句通常会有固定的结尾词,例如“……吗?”或者“……么?”,但是也有的疑问句会省略掉结尾词,直接使用标点符号“?”,例如“你今天是不是不开心?”,这个句子中含有否定词和褒义词组成的“不开心”,但不能将其分类为贬义情感。
最后一种需要注意的情况是转折词,典型词是“但是”,出现在转折词之前的情感倾向通常与转折词之后的情感倾向相反,例如:“我上次在这家酒店的住宿体验非常好,但是这次却让我很失望。”在这个转折句中,转折词之前的“非常好”是一个很强的褒义词,但真实的情感表达却是转折词之后的“很失望”,最终应该将其分类为贬义情感。当然,也存在出现了转折词,但语句本身的情感并没有发生改变的情况,例如“你这次考试比上次有了很大的进步,但是我觉得你可以做得更好”,这里的转折词没有转折含义,而是一种递进含义。在实际操作中,我们所以需要先判断转折句真实的情感表达到底是哪个,才能进行正确的分析计算。
构建情感词典是一件比较耗费人工的事情,除了上述需要注意的问题外,还存在精准度不高,新词和网络用语难以快速收录进词典等问题。同时基于词典的分析方法也存在很多的局限性,例如一个句子可能出现了情感词,但并没有表达情感。或者一个句子不含任何情感词,但却蕴含了说话人的情感。以及部分情感词的含义会随着上下文语境的变化而变化的问题,例如“精明”这个词可以作为褒义词夸奖他人,也可以作为贬义词批评他人。
尽管目前存在诸多问题,但基于字典的情感分析方法也有着不可取代的优势,那就是这种分析方法通用性较强,大多数情况下无需特别的领域数据标注就可以分析文本所表达的情感,对于通用领域的情感分析可以将其作为首选的方案。
我们在机器学习算法的章节介绍过很多分类算法,例如逻辑回归、朴素贝叶斯、KNN等,这些算法都可以用于情感识别。具体的做法与机器学习一样需要分为两个步骤,第一步是根据训练数据构建算法模型,第二步是将测试数据输入到算法模型中输出对应的结果,接下来做具体的讲解。
首先,我们需要准备一些训练用的文本数据,并人工给这些数据做好情感分类的标注,通常的做法下,如果是褒义和贬义的两分类,则褒义标注为1,贬义标注为0,如果是褒义、贬义和中性三分类,则褒义标注为1,中性标注为0,贬义标注为-1
在这一环节中如果用纯人工方法来进行标注,可能会因为个人主观因素对标注的结果造成一定影响,为了避免人的因素带来的影响,也为了提高标注的效率,有一些其他取巧的方法来对数据进行自动标注。比如在电商领域中,商品的评论除了文本数据之外通常还会带有一个5星的等级评分,我们可以根据用户的5星评分作为标注依据,如果是1-2星则标注为贬义,如果是3星标注为中性,4-5星标注为褒义。又比如在社区领域中,很多社区会对帖子有赞和踩的功能,这一数据也可以作为情感标注的参考依据。
第二步是将标注好情感倾向的文本进行分词,并进行数据的预处理,前文已经对分词有了很多的介绍,这里就不再过多的赘述。第三步是从分词的结果中标注出具备情感特征的词,这里特别说一下,如果是对情感进行分类,可以参考情感词典进行标注,也可以采用TF-IDF算法自动抽取出文档的特征词进行标注。如果分析的是某个特定领域的,还需要标注出特定领域的词,例如做商品评价的情感分析,需要标注出商品名称,品类名称,属性名称等。第四步根据分词统计词频构建词袋模型,形成特征词矩阵,如表所示。在这一步可以根据业务需要给每个特征词赋予权重,并通过词频乘以权重得到特征词分数。最后一步就是根据分类算法,将特征词矩阵作为输入数据,得到最终的分类模型。
当训练好分类模型之后,就可以对测试集进行分类了,具体的流程与建模流程类似,先对测试的文本数据进行分词并做数据预处理,然后根据特征词矩阵抽取测试文本的特征词构建词袋矩阵,并将词袋矩阵的词频数据作为输入数据代入之前训练好的模型进行分类,得到分类的结果。
采用基于机器学习的方法进行情感分析有以下几个不足之处,第一是每一个应用领域之间的语言描述差异导致了训练得到的分类模型不能应用与其他的领域,需要单独构建。第二是最终的分类效果取决于训练文本的选择以及正确的情感标注,而人对于情感的理解带有主观性,如果标注出现偏差就会对最终的结果产生影响。
除了基于词典和基于机器学习的方法,也有一些学者将两者结合起来使用,弥补两种方法的缺点,比单独采用一种方法的分类效果要更好,另外,也有学者尝试使用基于LSTM等深度学习的方法对情感进行分析,相信在未来,情感分析会应用在更多的产品中,帮助我们更好的理解用户需求,提升用户使用智能产品的体验。
随着深度神经网络等算法的应用,情感分析的研究方向已经有了非常大的进展,但依然存在着一些难题是目前尚未解决的,在实操过程中需特别注意以下几种类型数据:
情绪轮在用户体验设计上被广泛的应用,很多情感化设计都是基于情绪轮进行的。但是在人工智能领域,将情绪进行多分类比情感分析的三分类任务要难得多,目前大多数分类方法的结果准确性都不到50%。这是因为情绪本身包含了太多的类别,而且不同的类别之间又可能具有相似性,一个情绪词在不同的语境下有可能表达的是不同的情绪类别,算法很难对其进行分类。即使是人工对文本进行情绪类别标注也往往效果不佳,因为情绪是非常主观性的,不同的人对不同的文本可能产生不同的理解,这使得人工标注情绪类比的过程异常困难。如何让机器可以理解真实的情绪目前还是一个未能攻克的难题。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)