文 治,李 旸,王素格,2,廖 健,陈 鑫
(1. 山西大学 计算机与信息技术学院,山西 太原 030006;2. 山西大学 计算智能与中文信息处理教育部重点实验室,山西 太原 030006)
文本情感分析是指通过对文本的主观性分析发现作者所表达的情感倾向。依据文本中是否包含有显性情感词,将其又分为显示情感分析和隐式情感分析[1]。随着情感分析的研究不断深入,人们开始更多的关注隐式情感分析。我们通过对真实微博语料的标注,发现反问句在隐式情感句中占有12.31%,可见对反问句的研究也是隐式情感分析的一个不可或缺的问题。反问句作为一种间接言语行为[2],所表达的真实意图是不同于其字面含义的。如果无法正确地识别反问句就可能对情感分析任务造成一定的偏差,甚至错误。因此,有效地对反问句进行识别,具有较大的应用价值,它可以帮助企业正确理解用户对其产品和服务的态度,并做出正确的决策。例如,“售后服务工作人员来电质问我们半天,要知道哪里坏了,知道怎么弄的话,还要你们干嘛呢?”,这条评论表达了用户对售后服务强烈的不满,如果公司能够正确地了解用户态度并及时做出补救策略,可以有效地避免公司客户的流失。
目前,对于汉语反问句的研究大都集中在语言学领域,包括反问句、疑问句与陈述句的区别、反问句句式结构、反问句的语用价值以及反问句的标记等[3],并且取得了丰硕的研究成果。吕叔湘[4]先生就反问句和疑问句曾指出“反问和询问是作用的不同,在句子形式上并无差别。”,即反问句与疑问句就表面句式结构而言是非常相似的,仅从句式结构对反问句识别会造成混淆。刘钦荣[5]认为反问句有其特有的表达形式,这为我们进行自动反问识别研究提供了一定的理论支持。他认为反问与疑问句的不同是在语义不发生变化的情况下,反问句的特指问和是非问是可以互相变换的,甚至特指问内部有的也可以互换。而疑问句则没有这样的特性。从反问句本身出发,黄伯荣等人[6]认为反问是无疑而问;明知故问即作者在已经知道了答案的情况下发出询问,但并不需要从他人那里获取答案。殷树林[7]则结合反问的性质特征得出了反问的定义,即指反问句是对其形式有所否定的无疑而问的问句。从语用学的角度,许皓光[8]认为反问中的反问语气是至关重要的,他在大量反问句的研究基础上,对反问句语义语用功能进行了概述,并且提出了构成5种反问语气的主要因素有语言环境的作用、副词的使用、语句重音转移、语序变化和词语意义的虚化。另外,徐思益[9]、苏英霞[10]、史金生[11]和柴森[12]等从探讨反问句的结构特点入手,与一般疑问句的结构相比较,总结了一些反问句特有的表达式,并分析了它们的语义语用特点。此外,有些研究者从反问句标记[13-14]的角度对反问句进行研究,结合反问句特有的句式结构对反问句进行标记,并且总结了四类反问句的标记,分别是副词类、疑问代词类、双音化词和固定短语类。上述语言学家的大量研究成果虽不能直接运用到计算机自动识别反问句,但对反问句识别的任务提供了语言学基础,使得句式结构可以作为自动识别反问句重要特征之一。
反问句的自动识别任务要求计算机能够通过文本判别其是否为反问句。传统的词袋模型(bag of words,BOW)在对句子表示时,仅仅把句子看作是词的集合,并不考虑句中词序和句法等要素,使得抽象词语的语义表示特征不够充分,且存在表示向量高维和稀疏等问题。而Mikolov在2013年提出了Word2Vec[15],该方法是通过对大量文本学习,利用上下文信息有效的提取词的语义特征,并将其映射到n维特征空间,再利用空间向量的距离,用于度量词语之间的语义相似度。这种方法能够对词语的语义信息进行有效表示,并将这种表示应用于多种自然语言处理任务。例如,分类、聚类、同义词获取和机器翻译等。卷积神经网络[16-17](convolutional neural network,CNN)具有捕获局部特征的能力,Yoon[18]曾在2014年首次将CNN应用于句子分类中,它通过利用CNN中的卷积层、池化层和全连接层抽取句子特征,获得句子表示,最后通过一个分类器对句子进行分类。随后,在此基础上,Kalchbrenner等[19]提出了一种动态卷积神经网络(dynamic convolutional neural network,DCNN),采用Dynamick-Max Pooling返回K个最大值的子序列,在一定程度上保留了词序信息。与CNN不同,循环神经网络RNN[20-22](recurrent neuron network)的优势是对序列化数据进行建模,且能够捕获数据的长期依赖,但是由于它不能够并行运行,因此,RNN的训练时间往往要比CNN花费得多。
因此,本文将反问句中特定的句式结构特征和Word2Vec词的分布式向量的语义信息进行联合表示,再结合卷积神经网络捕获特征的能力,建立了融合反问句特征的卷积神经网络模型,用于对中文反问句的自动识别。
反问句识别就是判断一个句子是反问句还是非反问句,我们将其看作二分类问题,其关键是考察反问句与非反问句存在哪些不同的特征。由文献[3]可知,反问句在句式结构和语义上有鲜明的特点。在句式结构上,反问句有其特定的句式结构;在语义上,反问句是对语义前提的判断,且反问句表达的真实意图与字面意思相反。因此,我们从结构和语义两个方面对反问句识别任务开展研究。
本文从两方面对反问句的结构进行分析,即显式词语角度(反问句中包含的关键词)和特定句式结构。
2.1.1 反问包含的显式词语与符号特征
反问句中的显式词语与符号特征是指那些能够表明句子类型或对反问句识别起到一定作用的句子成分,如“难道、怎么”等词语。语言学家曾从反问句标记的角度对反问的显式特征开展研究[9,15],并取得了一定的成果。我们搜集、归纳并整理了常用的反问句显式特征,如表1所示。
表1 反问的显式词语与符号特征表
2.1.2 反问的句式结构
反问句中存在一些特定的句式结构,语言学上也称之为反问句特有的句式结构。殷树林等人[23]曾通过对大量语料整理得出17种特定的反问句式结构,然而他们的语料主要是来源于文学作品,本文结合对新浪微博中的语料中反问句的标注结果,又搜集整理出一些反问特有的句式结构,共得到28种特定句式结构。我们选取部分句式结构及对应的例句在表2中列出。
表2 反问句特有的句式结构及其例句(部分)
续表
我们对搜集得到的28种反问句特定的句式结构,在标注语料上进行置信度和支持度的计算。每条句式结构的置信度和支持度的计算方式如式(1)和(2)所示,其中yt表示满足句式结构且是反问句;nt表示不满足句式结构但却是反问句;yf表示满足句式结构但不是反问句;nf表示不满足句式结构也不是反问句。
本文对上文提及的28种特定句式结构进行了置信度和支持度计算,选取其中置信度大于70%的特定句式结构,如表3所示。
表3 特定句式结构的置信度和支持度
从表3中可以看出,反问句的特定句式结构具有置信度较高且支持度较低的特点。如果我们利用这些句式结构进行反问句的识别任务,虽然能够保证识别句子的正确率,但是由于句式结构的低支持度,可能出现仅识别少部分的固定句式结构的反问句。
反问句是通过问句的形式进行确定性的陈述。根据文献[6],反问句的特点是无疑而问、表示否定,即反问句并不表示真实的疑问,且反问句想要表达的真实意图是与其字面意思恰好相反。例如,下面的例句。
例1这样缺斤少两的怎么让消费者去信任你的商品质量呢?
例2难道在确保已出线时,就不能保留体力休养伤体吗?
上述例1中,旨在说明由于“缺斤少两”使消费者无法信任产品质量,但句中并没有出现任何对信任的否定修饰,而是通过“缺斤少两”作为语义前提推断出对产品质量的不信任。整个句子通过肯定的字面含义表达其否定的真实意图。例2中,作者想要表达在“确保出线”的前提下,应该“保留体力休养”,但他没有直接说明而言通过一种否定的形式来表达。通过上述两个例句,能够看出反问句存在语义前提,且反问句包含有字面意义和隐含意义,而隐含意义与字面意义又恰好相反。
CNN已经被广泛地应用在自然语言的句子建模中。首先将词通过上下,分布表示为固定维度的词向量。然后利用不同大小的卷积核对句子的矩阵进行卷积,获取能代表句子语义的局部特征,再通过池化层选取包含信息最丰富的特征来完成句子的建模。为了高效识别反问句,根据第2节介绍的反问句的特征,本文将反问特征融合到卷积神经网络结构中,用于识别反问句。该方法是通过卷积核对句子包含的反问词进行卷积操作,引入反问的特征,然后再通过词向量卷积生成的语义特征共同作用生成句子的表示,最后通过softmax分类器对句子分类。下面将详细介绍融合反问特征的卷积神经网络模型。网络结构如图1所示。
图1 融合反问特征的卷积神经网络结构
设S=(w1,w2,…,wn)为由n个词组成,其中wi表示第i个词。利用每个wi(i=1,2,…,n)生成k维向量,将wi的向量进行拼接得到句子的向量矩阵S,其表现形式如式(3)所示。
(3)
利用式(3),句子可以得到的结构化表示的句子向量矩阵S,将其作为卷积神经网络模型的输入。
(1) 卷积层:基于卷积核的反问句语义特征提取。
利用不同大小的卷积核对反问句的句子向量矩阵S进行卷积,将句子的局部语义信息进行融合。设卷积核为c,大小为l×k。利用卷积核c对句子S进行卷积,卷积过程见式(4)。利用g表示一个卷积核卷积生成新的语义融合向量。
其中,式(4)中n表示句子的长度,·表示向量对应元素的乘积,bi表示卷积核的偏置。式(5)中g∈Rn-l+1表示n-l+1的列向量。f表示激活函数,这里我们采用ReLU函数,使用t个卷积窗口对句子进行卷积,生成t个新的语义向量,将其拼接得到矩阵G(n-l+1)×t=(g1,g2,…,gt),矩阵G的转置变换GT的展现形式见式(6)。
(6)
(2) 池化层:反问句中有效语义信息特征提取。
该层通过池化操作选取最具代表性的反问句的全部语义信息作为有效特征。这里采用最大池化操作,即从生成的语义向量中选取出最大值,认为它所包含的语义信息最为丰富,最能够代表反问句S的特征。用M表示池化操作后产生的语义特征向量,具体操作如式(7)所示。
(7)
(3) 连接层:融合语义特征向量提取。
连接层是将不同大小卷积窗口卷积和池化后得到的反问的语义特征向量进行融合,共同作用得到反问句S的表示向量。于是将上一步池化后得到的所有反问特征向量进行全连接操作,最终得到句子表示向量,此处用S表示,表现形式如式(8)所示。
(8)
其中,Mi表示第i个卷积窗口卷积池化操作后产生的向量,Wi表示m×d的系数矩阵。
(4) 反问句特征的卷积与池化:反问句中显示特征提取。
对反问句中存在特定的句式结构、标记及符号等特征。在对反问句的识别过程中,如果能够有效正确地识别这些特征,将有助于准确地判断句子的类别。于是本文利用2.1.1节提及的反问显式词语与标记,抽取出句子中的反问标记,对抽取出的特征词进行卷积、池化和全连接操作,得到新的特征向量,将其融入到句子表示中,以加强这些特征词对句子表示影响。对反问句的特征进行如上述卷积操作、池化操作和连接操作,最后得到特征表示f。
(5) 融合层:语义特征与反问特征进行融合表示。
该层是将上述经过操作(3)得到句子表示S以及经过操作(4)得到的反问特征表示f进行拼接,得到基于特征融合的句子表示Sf,如式(9)所示,⊕表示向量的拼接。
Sf=S⊕f
(9)
(6) softmax层:对句子表示进行反问句识别。
该层经过操作(5)步骤,获取基于特征融合的句子表示Sf,并将其输入到softmax层判断句子是否为反问句,其判断依据如式(10)所示。
y=softmax (WSf+b)
(10)
(1) 数据集及评价指标
实验过程中,我们随机将数据集的80%作为训练集,10%作为验证集,10%作为测试集,反复实验10次,求取各个衡量指标的平均值。实验结果采用的评价指标为精确率(precision)、召回率(recall)和F1值。
(2) 模型参数设置
本文利用的是卷积神经网络(CNN),其参数是在验证集上进行了大量实验,并进行参数调整。实验过程中的参数更新采用Kingma[24]提出的Adam Optimzation进行梯度下降更新模型参数。通过多次实验,选取最优的模型参数:词向量维度为300;过滤器的滑动窗口大小为3,4,5;过滤器数量为128;批处理大小(batch size)为100;迭代次数为50;学习率为0.001。在CNN[W]、CNN[F]、CNN[W+F]_1、CNN[W+F]_2实验中,模型都采用了相同的参数。
参考文献[25-26]利用表情符对情感语料自动标注建立伪数据,我们也利用2.1.2节的句式结构,选择具有高置信度反问句的特定句式结构,对未标注的语料进行自动标注,用于获取大量的伪数据。为了验证伪数据对实验的影响,本文在原有手工标注的数据集中分别尝试添加了500、1 000、1 500、2 000条伪反问数据。另外,为了保证数据的平衡,又添加了与之相应的非反问句。将这些真实数据和伪数据共同输入到本文提出的模型训练中,实验结果如表4所示。
表4 不同伪数据的数量对比实验结果
从表4可以看出,若添加了伪数据,能够得到较高的召回率,其主要原因是伪数据具有特定的结构,然而,精确率却较低,其原因是将真实数据和伪数据共同用于模型训练,使得随着伪数据的增多引入错误信息的可能也会增多。因此,为了关注反问句识别的精确率,后续实验中并没有使用伪数据。
为了验证本文提出方法的有效性,选取如下的不同方法进行比较实验。
(1) 基于规则的方法(RB)。该方法是利用2.1.2节中所提及的28种反问句的特定句式结构,首先将这些句式结构改写成正则表达式,然后利用正则表达式对大量文本进行匹配,若句子能够与任何一条正则表达式相匹配,则认为该句子是反问句,否则不是反问句。
(2) 基于SVM文本分类方法(SVM)。该方法主要是通过文本特征提取、文本特征表示、特征归一化处理将文本转化为特征向量,最后实现句子的反问句识别。即首先对文本进行分词、去停用词等预处理,所有的词看作是特征集。然后从这些特征集中选取具有代表性的词。本文采用卡方检验进行特征选取。对选取的特征进行归一化处理,计算得到特征权重。对于给定文本按照选取的特征转化成向量,再使用SVM进行分类。SVM是通过结构风险最小化来找到一个最优超平面,使其达到最优分类效果。本方法的特征利用卡方检验选取1 000个词作为特征集,利用tf-idf对选取的特征进行权重计算,实验采用的是由台湾大学开发的LIBSVM[注]https://www.csie.ntu.edu.tw/~cjlin/libsvm/工具包,选用的SVM核函数是RBF核函数。
(3) 基于CRF的反问句的识别。该方法将反问句的自动识别问题转化为序列标注问题,采用IOB2的标注集合来标记功能块。每个标记由两部分组成,第一部分表示功能块的位置,第二部分表示功能块的类型标记,两部分之间通过“-”连接。实验中采用的是CRF++[注]https://sourceforge.net/projects/crfpp/。
(4) 基于词语的双向循环神经网络(BiLSTM)[27]。该方法中模型超参数按文献[28]设置,设置词向量的维度为300,隐藏状态的维度为1 000,batch size为64,dropout算法的比率设置为0.5,模型的学习率设置为0.001。
(5) 基于词语的卷积神经网络(CNN[W])[18]。该方法利用预训练的Word2Vec将句子转化成连续的词向量,将其作为传统的CNN模型的输入。
(6) 基于反问句的显示特征词、符号作为卷积神经网络(CNN[F])输入特征。该方法利用第2.1.1节中提及的反问显式词语与标记,作为特征对句子的表示。即将每个句子表示成基于特征词的词向量,然后输入到传统的CNN模型中。
(7) 拼接反问特征的卷积神经网络(CNN[W+F]_1)。该方法利用预训练的Word2Vec转化成连续的词向量,再利用2.1.1节中的反问的显式词语和标记作为抽取反问句的特征,将词向量和特征在表示层进行拼接,得到融合反问句特征的词向量,然后将拼接后的向量作为CNN模型的输入,再进行卷积、池化和全连接操作。最后通过softmax分类器对句子进行分类预测。
(8) 融合反问特征的卷积神经网络(CNN[W+F]_2)。该方法是利用本文3.2.2节提出的融合反问特征的卷积神经网络的反问句识别。首先将句子利用预训练的Word2Vec转化成连续的词向量,然后依据2.1.1节的反问显式词语与标记抽取出句子中反问句的特征,分别利用卷积核对词向量和特指特征的词向量进行卷积,将卷积生成的新的特征向量进行拼接,最后将拼接后的向量输入到softmax分类器中对句子进行分类预测。
利用上述设置的8个方法的实验,获得的实验结果见表5。
表5 8种方法识别反问句的实验结果
从表5中,我们可以得出:
① SVM、BiLSTM、CRF和CNN[W]都是利用句子中的词语特征进行反问句识别,CNN[W]的实验效果明显优于SVM、BiLSTM和CRF,这是因为基于SVM的反问句识别仅仅考虑了特征是否存在,并没有考虑句子的语义信息,BiLSTM中虽然也考虑了句子语义信息,但由于微博语料中反问常常存在于一个分句中,若句子较长时,一些词语会随句子长度的增长对句子表示的影响较小,这样就会对句子的识别造成错误,而CNN[W]是对含有语义信息的词向量进行操作,在卷积过程中将每个子句的语义信息充分融入到句子表示中。因此,实验效果明显优于SVM、BiLSTM和CRF。
② RB和CNN[F]都利用了反问句的特征,但RB的实验效果较差,主要原因是RB是基于正则表达式的匹配,仅考虑了句式结构且比较苛刻、不够灵活,造成了反问句识别的召回率较低。通过比较RB和CNN[F]可以看出,在对反问句进行识别时,使用语义信息可以提升反问句识别的效率。
③ 从CNN算法来看,四个CNN的对比实验结果在F1值指标下由优到劣的顺序为CNN[W+F]_2>CNN[W+F]_1>CNN[F]>CNN[W]。对于同时考虑反问特征和词向量,CNN[W+F]_1的精确率和召回率分别达到85.7%、84.7%。CNN[W+F]_2的精确率高达89.5%,而召回率与CNN[W+F]_1基本持平,达到84.2%。CNN[W+F]_2算法的召回率低于CNN[F]算法的召回率,这种结果可能是因为CNN[W+F]_2是先通过卷积抽取出词特征和反问特征共同用于句子表示,当较长句子包含的反问特征较少时,反问特征对句子表示作用较小,使得模型可能造成分类错误。
由此可知,在反问句识别时中,分别考虑句子的语义和反问的特征,可以对反问句进行有效的表示,从而提升反问句的识别效果。
为了对模型分类性能进行分析,从模型分类错误的结果中随机选取了50个句子。根据造成模型分类错误原因的不同将其分为两类,分别是包含显式特征和显式特征缺失。结合例句对其进行说明。
例3现在这点钱,我选车基本上没怎么犹豫,直接选了速腾!
例4尊称路上头等舱的w12,前脸很霸气有木有!
例3中存在2.1.1节提及的反问的显式词语符号特征“怎么”,这些词语特征对句子的表示会产生一定的误导,使得模型将其都分类为反问句。造成这种错误的原因应是模型仅考虑了显式词语特征是否存在,没有考虑这些特征在句子中充当的成分。如果能够在模型中考虑到反问句的句法结构的成分特征可能会对分类性能有所提升。
另一个明显的错误是对包含在例4中“有木有”和“是不是”等这一类词的反问句模型不能对其进行识别。造成这一错误的原因是这些特征缺失,而模型在一定程度上要依赖搜集的反问的显式特征。因此,今后可以通过扩充反问的特征来解决这一类问题。
本文针对社交媒体中反问句,依据其特有的句式结构、上下文语义相关的特点,设计了融合反问特征的卷积神经网络的方法进行中文反问句的识别。对于反问句语料较少的情况,可以利用反问句特有的特征搜集语料对模型进行训练。既能解决模型训练中语料不足的问题,又能缓解语料标注过程中大量时间和人力的浪费。将本文所提方法应用到社会媒体语料中进行反问句的识别,取得了不错的效果,进一步证明了本文所提出的方法的有效性。但本文仍有不足,在模型中仅仅使用了包含显式词语和符号特征的反问的句式结构,并没有考虑到反问句的句法结构特征。在今后研究中可以考虑将反问的句法结构特征和句子语义特征共同作用于句子的表示,并充分利用伪数据进行模型的训练,以提高反问句的识别性能。