基于情感分析的“真假美猴王”存疑研究
2019-04-17张辰麟王明文谭亦鸣陈志明左家莉罗远胜
张辰麟,王明文,谭亦鸣,陈志明,左家莉,罗远胜
(1. 江西师范大学 计算机信息工程学院,江西,南昌,330022;2. 江西财经大学 网络信息管理中心,江西,南昌,330022)
0 引言
《西游记》[1]是中国古代第一部长篇章回体神魔小说。全篇描写了唐三藏远赴西天求取真经的故事,深刻揭露了当时社会的现实。作为四大名著之一,《西游记》对中国文学的意义不言而喻,而其中的“真假美猴王”事件,把整部《西游记》的故事推向高潮。该事件主要描写孙悟空和唐三藏这两个主要角色之间的矛盾。作者吴承恩为“真假美猴王”事件埋下了许多伏笔,这些伏笔引发了多种解读。相关讨论主要体现在孙悟空的性格与语言变化[2]、艺术形象[3]、思想变化[4]、紧箍咒和金箍棒的象征意义[3,5]、六耳猕猴的身份[6]、孙悟空和唐僧的关系[7]等方面。加上一度在网络上引发热议的“被如来打死的究竟是谁”的问题,现有对“真假美猴王”的解读总结起来分为三个类型:
1. 认为真孙悟空已经被如来佛祖打死,《西游记》后半部分参与取经的是六耳猕猴。
2. 认为真孙悟空还活着,死的是六耳猕猴,孙悟空是唐三藏的精神导师[7]。“真假美猴王”一事是唐三藏的修行,消灭的是唐三藏的“心魔”。《西游记》后半部分,孙悟空的桀骜不驯并没有收敛[4]。
3. 认为真孙悟空还活着。“心魔”,即六耳猕猴[6],是孙悟空的反抗精神[2]。“真假美猴王”一事是孙悟空“心的修行”[3]。事件之后,孙悟空走向逐渐被“同化”,屈服于神权,再无反意的悲剧结局[8]。
以往对于文学作品的研究和相关讨论一般是基于文献法的定性研究。近年来,随着自然语言处理技术的迅猛发展,不少语言研究者开始利用自然语言处理的新方法和新手段,从定量的角度来解决语言的相关问题,但几乎未涉及到文学领域。本文将尝试使用自然语言处理中情感分析的方法,对“真假美猴王”事件进行解读。情感分析又称情感计算,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理[9],对文本的情感倾向做出判断[10]的过程。情感分析技术被广泛运用于微博[11-15]、用户评论[16-18]中的情感倾向研究与预测。情感分析中情感的划分一般采用三分法[9](褒义、贬义、中性)或细粒度分法[19],其本质是一个文本分类问题。情感分析研究通常从文本数据挖掘[13,18,20]、建立知识库[10,12,21]、挖掘句法特征[16-18,22]等方法入手,通过筛选种子词[12-13],建立情感词典[12-13,23-25]并验证情感词典的有效性的方式,得到较为可靠的情感词典以分析文本的情感倾向。
目前,将情感分析技术应用于文学作品分析的相关研究尚不多见。本文将通过构建孙悟空的情感词典,分析“真假美猴王”事件前后孙悟空对其他角色的情感变化。从定量角度分析“真假美猴王”事件,从而探索情感分析技术对文学研究的可行性。
1 语料选取与自动分词
1.1 语料的选取
为保证研究的真实性,本文的研究对象为《西游记》原版,而并非是现代汉语版。同时,利用检索方式,将冒号加双引号(: “……”)作为特征。从原版《西游记》中抽取所有角色的对话,并根据纸质版的《西游记》,人工对其句子错漏、别字等进行了改正。该方法一共抽取了322 307字的《西游记》人物对话,总计包含10 664句台词(不包括台词中的诗句部分),约占整个《西游记》总篇幅的一半。而后,从32万余字的人物对话中,手工挑选出所有孙悟空的台词,合计107 009字,包含3 358句台词。
1.2 自动分词及分词结果优化
本文选择了Jieba、NLPIR、Stanford三种自动分词系统分别对这3358句台词进行分词。
并随机抽取了《西游记》中的两章(37、81章共81句台词)来验证自动分词的分词效果。验证阶段由两位文学院的博士和两位古代文学专业的硕士作为专家,采用带权重投票的策略,得到一个更为合理的人工分词结果,并以此人工分词结果作为黄金标准。本文借鉴了机器翻译评测当中的TER值[28]作为评测标准,将人工黄金标准作为参考译文,将自动分词的结果作为机器翻译结果,计算出分词符号被插入、删除、替换和移动等操作的编辑次数,以便衡量分词(Segment)效果的好坏, 本文将TER公式运用如式(1)所示。
(1)
表1展示了三种分词系统及三种分词投票得到的分词结果的TER值。
表1 三种分词系统及投票的TER值
我们发现,由于明清白话中白话文句子较短,且结构单一。人名、称呼、地名、专有名词等命名实体出现分词错误时,很容易黏连到其前后的词语。从而造成连锁反应。基于此,我们对孙悟空的所有3 358句台词中的人名[29]、地名、专有名词[30-31]等进行了人工筛选,并构建了一个599词的用户词表添加到分词系统。首先,将待分词语料进行预处理。用数字前后加分词符的形式,替换掉用户词表中的词,以避免用户词表与分词系统内置词表的冲突。同时,采用了音序排列、大词在上的方法进行预处理替换,避免用户词表词与词之间存在包含关系。然后,将替换之后的结果再次进行分词。最后,通过后处理,将用户词表中的词还原。经此步骤,三种分词系统分词结果如表2所示。
表2 加入用户词表后的三种分词系统及投票的TER值
可以看出,Jieba分词系统+用户词表的方案TER值最低,性能最好。因此,最终我们选用了该方案进行全文分词。
2 情感种子词的获取
2.1 情感种子词训练集
《西游记》角色的台词,往往以“某某道: ”作为开始。若作者已经预设了这句台词的情感,则会表示为“某某XX道: ”,如“悟空骂道: ”。其中,“骂”即是台词的前缀,也是作者留给我们的明确的情感信息。因此,这些带有明确情感前缀的台词适合用来抽取情感种子词。
我们将所有带有情感前缀的台词挑拣出来,并将一部分例子示于表3。
表3 台词前缀情感分类
在明清章回体小说中,“笑道”比较特殊,不仅包含了开心、高兴的笑,也包含了讥笑、讽刺、嘲笑等,正面/负面情感无法从字面上判断。因此,对于以“笑道”为前缀的台词,我们单独进行了人工判断。
该阶段总计得到了400句台词的正面情感语料和 412句台词的负面情感语料。
2.2 否定词表与停用词表
本文参考了现代汉语常用的否定词表,包含35个否定词。通过检索这35个否定词在《西游记》中出现的次数,发现一部分否定词不会在明清白话环境下出现,故予以删除。用否定词典中的否定词素,如“不、无、非、没”等作为对象[32]进行搜索,挖掘出一些明清白话环境下的否定词,并将它们加入否定词表,最终得到一个37词的否定词表。
结合明清白话句子较短的特点,本文将否定词的支配域设定为否定词所在的分句。若某个分句中出现了否定词,则认为该分句中所有的情感词,原本的情感倾向应与实际属于的语料分类相反(未出现分句中有复数否定词的特殊情况)。
通过挑出含有否定词的分句还原到其对应的分类,最终得到正面/负面情感的语料分别为: 正面情感语料2 100个分句,负面情感语料2 073个分句。
本文尝试使用四川大学、哈尔滨工业大学等研究机构研究的停用词表(共1 893个停用词),发现以往的停用词表对明清白话的停用效果不理想。因此,除了使用这些停用词表之外,还通过查阅词典的方式,停用了古今常用的数词、量词、代词、介词、连词、助词,以及前文用户词表中的地名、人名(不包括称呼)、否定词表、数量词词组等,并将其加入停用词表。
2.3 种子词情感值计算
该部分的实验方法主要参考了赵妍妍[22]等学者的情感词典构建方法,并根据《西游记》明清白话的语言性质对方法进行了一定的改动。本文使用式(2)[33]来计算种子词属于正面/负面的情感倾向。
(2)
式(2)中,freqi为词语i出现的频次,freqi-pos为词i在正面情感语料中出现的频次,freqi-neg为词i在负面情感语料中出现的频次。由于语料规模较小,词频次取对数使用了自然数e为底,以避免得到的结果值过小。由于指数为1的情况下对数为0,该式可以很好地屏蔽偶然事件。若Polari大于零,则证明该词属于正面情感词的可能性更高。若Polari小于零,则证明该词属于负面情感词的可能性更高。该式得到的结果Polari的绝对值越大,证明词语的情感极性越大。
通过去除停用词,最终得到了一个包括330个正面情感词和332个负面情感词的种子词词表,记为SeedA。通过专家人工对这662个词进行了复审,剔除了其中分词错误词、无情感倾向的一般物质名词。我们发现,一部分词语正面/负面的情感分类恰巧分反,这与语料规模较小及否定词支配域设定有一定的关系。对这些恰好分反极性的词语,本文采取了两种策略。一种是将极性分反的词还原到其本该属于的极性词表当中,生成包含228个正面情感词和232个负面情感词的种子词表,记为SeedB;另一种是放弃这些词,得到包含189个正面情感词和198个负面情感词的种子词表,记为SeedC。表4展示了情感种子词中正面/负面情感倾向最高的Top20词。
表4 正面/负面情感种子词Top20
3 全文情感词挖掘
3.1 全文点互信息计算
通过计算全文的词频发现,除停用词外,大部分词的词频数为1。由于语料规模较小,通过初步试验,我们发现这些词给情感分析带来的噪声影响尤为严重。因此,本文剔除了词频为1的词,得到全文待计算情感倾向的词语数量为2 442个。并利用上阶段生成的三个种子词表: SeedA、SeedB、SeedC,分别放入全文语料中进行点互信息计算,而后以式(3)来确定待计算情感词n的极性:
(3)
式(3)中pos为正面情感的种子词集,neg为负面情感的种子词集。若Polarn大于零,则该词属于正面情感词的可能性较大。若小于零,则属于负面情感词的可能性较大。Polarn绝对值越大,证明极性越高。由于训练集高达28 000字左右而孙悟空所有的台词只有10万字。为了防止过拟合,本文将情感种子词规模最小的SeedC按照情感词的极性排列进行五等分,分别作20%SeedC、40%SeedC、60%SeedC、80%SeedC。同时,分别作为种子词表进行点互信息运算,得到全文情感词典。
3.2 确定情感词典规模
本文将7个种子词集所计算出的情感词典,按照情感值极性大小排列。并根据情感词典的规模向下取整进行十等分,加上种子词集自身,共得到不同种子词规模、不同互信息规模的77个情感词典。
为了确定情感词典的规模,我们从全部语料中随机抽取了90句台词,包括377个分句作为验证集。让4名专家以人工标注的方式,标注每一个分句的情感极性。正面感情的标为1,负面感情的标为-1,无明确感情的标为0,如出现分歧则采取投票的方式。
以77个情感词典分别对这377个分句进行情感打分。打分规则为: 句中出现正面情感词+1分,分句中出现负面情感词-1分,每出现一次否定词则整个分句最后的得分结果乘以-1。最后,得到的结果若大于0,则记为1,即正面情感句子;若小于0,则记为-1,若等于0则记为0。77个情感词典对句子的打分和人工打分的一致性准确率展示如表5所示。
表5 77个情感词典的情感判断准确率
注: 下划线为较好结果,下同
我们发现,互信息并不能起到正面的作用。主要原因是验证集中无情感句占到了198个,即总数量的52.5%。因此,投入的情感词数量越少,正确率反而显得越高。
3.3 无情感句的处理与错误距离
我们以人工判定无情感的句子数量198为基线,对判定无情感句子数量大于198的情感词典,赋予其一个惩罚因子,实际情感词典判断正确的句子数量N应以式(4)表示:
(4)
判定无情感句子数量不足198的不做处理,通过这一步处理,各情感词典实际准确率如表6所示。
表6 77个情感词典的情感判断准确率(处理后)
77个情感词典的正确率变化趋势如图1:
我们选取五个准确率最高的情感词典,引入错误距离的概念。认为情感判断错误的类型不同,其代价也不同在。在一定意义上,可以反映情感词典的好坏。因此,本文对这五个情感词典判定错误的性质进行分析。把无情感判定为有情感,或将有情感判定为无情感,记为-1分。将正面情感判断为负面情感或者负面情感判断为正面情感,记为-2分。五个性能最优的情感词典的错误距离合计如表7所示。
表7 情感词典Top5的错误距离
最终选择了SeedC+40%点互信息的情感词作为《西游记》情感分析的情感词典,该词典错误距离合计-190,情感三分法下准确率为55.97%。
4 角色情感计分
4.1 角色分类
“真假美猴王”这一事件出现在《西游记》的第五十七到五十八回,主要描述孙悟空和唐三藏之间的矛盾。孙悟空从第十三回开始保唐三藏取经,至五十六回诛草寇为止,为事件发生之前;第五十九回至第一百回取到真经,《西游记》全篇完结,为事件发生之后。事件发生之前,涵盖了44章,1 720句台词。事件发生之后,涵盖了42章,1 377句台词。事件前后语料规模相差较小,具有可比性。
我们根据《西游记》原文,将孙悟空在事件前后所有3 097句台词的会话对象进行人工标注,对事件前后孙悟空对话过的所有角色进行分类。由于《西游记》的故事性质,大部分角色仅登场一次,在事件前后均有登场的角色寥寥无几。因此,对于取经团队核心,唐三藏、猪八戒、沙悟净三人,每个人单独作为一类。其他角色根据他们的阵营、地位、善恶等,总计分为10类。具体分类如表8所示。
在这些孙悟空对话的对象中,我们舍弃了语料过少、不具有统计意义的与白龙马、后半部分未出现过的与花果山群猴、孙悟空的自言自语,及与佛像等物品的对话。
根据上述的分类,本文将语料分为了26个子语料。如果孙悟空的对话对象是群体的,如“猪八戒和沙悟净”,则将该台词同时复制到猪八戒、沙悟净两个人的子语料库中。敌对神仙归入妖怪的分类,山贼、草寇、恶兽等归入次要妖怪的分类。一些角色随着故事的发展,所属阵营有所变化。如奎木狼曾经是妖怪,后来归顺成为了四木禽星中的一员。对此我们进行具体分析,将妖怪时期的奎木狼分到主要妖怪的一类,而归顺后则分到次要神仙一类。一些角色精通变化。如打黄风怪时的护法伽蓝,孙悟空以为他是普通的山野老翁,这里就把孙悟空与他对话的台词分到平民一类。
表8 孙悟空在《西游记》中说话对象的分类
我们把“真假美猴王”事件的三类解读形式化:
假设1: 如果死的是孙悟空,一切都是如来佛祖设局。那么,冒名顶替的六耳猕猴对神佛的态度在事件之后,相较之前应该具有更高的正面情感倾向。但因换了人,假孙悟空对取经团队的另外三个角色的情感几乎不可能与之前的情感有较高相似性。
假设2: 如果孙悟空没有死,“真假美猴王”是唐僧的修行,是为了缓和唐僧师徒之间的关系。那么,孙悟空在事件之后,对唐三藏的正面情感倾向应该有明显上升,对神佛等权利阶级应该不会有明显变化。对取经团队的其他主要人员——猪八戒和沙悟净应该基本没有变化。
假设3: 如果孙悟空没有死,如来安排“真假美猴王”一难是为了消灭孙悟空的“心魔”,让他抛弃主观性和反抗精神,屈服于神权。那么孙悟空在事件之后,对唐三藏的正面情感倾向应该有明显上升,对神佛等神权阶级的正面情感倾向应该也有明显的上升,对取经团队的其他主要人员应该基本没有变化。
4.2 情感计算与结果分析
为验证这三个假设,根据前文所述的句子打分规则,我们对13类角色及事件前后26个子语料进行情感打分,结果如下:
表9 孙悟空对其他角色在事件前后的情感值打分
注: 判定标准以0.01为界
实验结果表明,孙悟空在事件前后对猪八戒、沙悟净两位师弟的态度几乎没有变化,故基本可以判定取经的还是孙悟空本人而非六耳猕猴。而对主要妖怪和皇族、官员等的态度几乎没有变化也可以佐证这一点。因此,拒绝假设1。事件之后,孙悟空对唐三藏的正面情感有明显上升,但单靠对唐三藏的情感变化尚不能区别假设2与假设3。孙悟空在“真假美猴王”之后,对神佛群体的态度均明显转好,对主要神仙、次要神仙、佛等的正面情感上升幅度也很高。特别是对主要神仙和佛的上升幅度非常大,对土地神、丁甲伽蓝、四海龙王等这些原本孙悟空看不起的神仙,正面情感也有了明显的提升。尤其是对土地神,从“一生好吃没钱酒,偏打老年人”变为事件后的正面情感超过了负面情感,其情感发生了质的变化。由于后半部分孙悟空对四海龙王等人的台词较少,不具有统计意义。我们尝试将土地神、丁甲伽蓝、四海龙王这三个相似群体的语料合并,其结果依然是正面情感有明显上升。
我们可以明显发现孙悟空对妖怪的负面情感句子数量较多,对师父、神佛等自己人的正面情感句子较多,对八戒的负面情感句子比例明显大于其他群体,这也基本符合对《西游记》中人物关系的认知,证明了本文研究的情感词典在小说人物分析上的有效性。对平民这个群体正面情感倾向有下降的趋势,这可能是由于《西游记》全文中平民角色过多,且往往是故事中的次要人物。因而,该语料混杂度过高、噪声过多所造成的,在此不对该群体进行细致讨论。
从上述分析基本可以验证,“真假美猴王”这一事件如来佛祖虽然没有杀死孙悟空,但却消灭了孙悟空的反抗精神,诛“心魔”是一个同化过程[8]。事件之后,孙悟空对神佛群体的正面情感倾向明显上升,性格逐渐趋向扁平单一,从向往自由渐渐走向了屈服体制的归化之路[2]。通过情感分析,我们认为,假设3更适合作为“真假美猴王”事件的正确解读。
5 总结与展望
本文从情感分析的视角对传统名著《西游记》中“真假美猴王”事件进行了解读。通过评测现有分词系统,提出了明清白话的分词方案。借助作者吴承恩在《西游记》中遗留下的情感信息确定了情感种子词,并以点互信息的方式生成并验证了适合分析孙悟空这个角色的情感词典。通过对事件前后孙悟空对其他角色情感变化的分析,得出了真的孙悟空并没有死,而是象征着反抗精神的“心魔”被消灭的结论。本文作为一种新的尝试,验证了情感分析技术对文学研究和文学作品角色分析的可行性。
明清小说是中国小说历史上的巅峰,四大名著均在其列。明清白话的分词问题值得进一步的探讨,借助自然语言处理的方法对明清白话小说中人物进行情感分析也值得进一步研究。文学作品的分析的语料量级往往比较小,故本文主要使用的是基于规则的方法。情感分析的准确率较现代汉语语料而言,尚有空间可以改进。因此,在日后的研究中,我们将尝试使用更大规模的语料,运用机器学习、神经网络等方法,对明清小说及明清白话进行更加深入的研究进一步提高模型的准确率。