Python编程|上海交通大学外国语学院学生Python编程作业展示(3)
点击蓝字 关注我们
上海交通大学外国语学院学生
Python编程作业展示(3)
对基于词典的情感分类结果的分析与建议
——TextBlob实现
尹铭烨
(上海交通大学外国语学院2017级语言学方向)
评语
工具包或模块的横向对比可扩展特定Python技术的应用可能性,其纵向探究则可深入了解工具包或模块的适用性。将合适的工具包/模块以合理的方式用于分析处理适当的数据对象,是Python应用必须面对的考验或事实。
下文为外国语学院2017级语言学方向学生尹铭烨的作业。其技术应用说明工具包或模块也有不足之处,相应问题的解决应具有针对性。文本清洗是数据分析的一种有效手段,既可在数据分析前也可在过程中进行,关键是理清何为清洗对象,即何时清洗数据的无效项,又在何时清洗数据的干扰项。
——授课教师:管新潮
研究目的
通过TextBlob工具包中基于词典的情感分类功能对英文商品评论进行句级情感分类,再与该评论对应的星级对比,对分类结果错误的句子进行分析,运用语言学知识分析和寻找一些可能的解决方案。最后,利用Python语言实现一些方法。
研究步骤
01
数据获取与清洗
所使用数据是亚马逊网站上对一款笔记本电脑的941条英文商品评论数据及其各自对应的评分(一到五星)。由于一条评论可能由多个句子组成,我们将其分成子句,然后把一条评论对应的评分复制给它的几个子句。这里假设某一条评论中的所有子句的评分相同,即都等于该评论的评分。
在Python环境下使用TextBlob中的x.sentiment.polarity函数对总共4467个句子进行情感分类,输出为取值-1到+1的浮点数(正负值对应情感正面、负面)。将各个评分档次转化成取值为-1到+1的4467个浮点数便于后面的分类计算(一星对应-1,二星对应-0.5,以此类推)。
有了句子情感分类的结果和评分数据的值,通过调整筛选方法,我们可以根据现象得出不同类型的TextBlob分类失误的样本集,这里将失误分为三类:情感分类正面而评分偏负面、情感分类负面而评分偏正面、情感分类中性而评分极端。
02
错误分析
为了便于阅读,将对句子的情感分类结果和句子原有评分导出为csv文件,如下图:
如果一个句子的情感分类结果和评分相差较远,便视其为分类错误,那么根据原因的不同我们先把分类出现错误的句子进行简要分析,去掉极少的由于条件和虚拟造成的错误,主要的错误类型有如下三种:
1. 否定句和有否定含义的词导致的分类错误
否定句或者有否定含义的词可以逆转句中情感词、情感短语的情感表达。然而由于TextBlob的情感分类方法取句中每一个词的情感倾向的数学期望,所以在遇到形如1-A、1-B(括号中为该句编号、情感分类值和评分,下同)的句子,基于词典的情感分类会出现分类结果与事实相反的情况,双重否定句则更加难以处理。
A. I purchased this laptop on Amazon Prime Day, and it hasn't disappointed for the price I paid. (3895, -0.75, 5)
B. Not USER FRIENDLY system. (2161, 0.38, 1)
2. 形容词不匹配导致的分类错误
同一个形容词在形容不同事物时表达的情感有所不同,如2-A、2-B,在本数据集中出现了多个句子使用了单词“thin”对笔记本电脑进行正面描述,然而在TextBlob的情感词典中,该单词的情感倾向为负面,这就导致了情感分类错误。
A. It's also very very thin, almost thinner then I like. (1273, -0.52, 5)
B. The laptop is sturdy, thin and neat to look at. (858, -0.4, 5)
基于词典的情感分类拥有广泛的适应性,但随之而产生的错误也是不易避免的。解决此类问题需要一些关于句子中对象的相关知识(笔记本电脑薄一点好)。
3. 句子描述对象变更导致的分类错误
一段评论的整体描述对象应为目标对象(笔记本电脑),然而随着句子长度的增加和句式和逻辑的复杂,其子句描述对象有可能发生变更,这也就导致出现某些情感词并不是在评论目标对象的情况,如3-A和3-B。
A. I am now wondering about all these good reviews or maybe I got a faulty machine. (550, 0.7, 1)
B. The BIOS is modded by Acer and is difficult to change AHCI to Legacy in order to boot from USB. (4149, -0.5, 5)
03
解决思路
对于否定形式或者转折,处理情感转换词和处理but句,是两种重要的改进方法:根据Ding et al. (2008),在句中出现否定词时将函数值取相反数;如果一对句子中间用转折词连接,而两者其一情感倾向明确,那么可以确定另一个句子的情感倾向。但是根据语言学知识,这里需要注意的是否定词的作用范围,比如双宾语情况下是否只否定直接宾语的情感,或者一些更为简单的情形如下:“I do not like this car because it is ugly.” 在正确判断not的否定范围只有like而没有ugly的时候,该句的情感分类就趋向于正确。后续的对比中我们将使用有否定词取相反数的方法,检验其有效性。
关于形容词匹配问题,明确实体和属性的联系是重要的一步,如果想拥有普遍性或许需要简单的知识图谱协助,接下来我们只修改单词thin的情感值进行对比。
句法依存关系也可以确定是否情感词汇与目标对象相关,而这需要构建句法树,找出形容词-名次,动词-副词的依存关系,可以找到较为可靠的相关性。这里简单使用laptop作为关键词,剔除不包含关键词的句子,以此来减少修饰非目标对象的情感词汇对结果的干扰。
04
思路验证
使用Python验证刚才提到的针对情感转换词、关键词的解决思路。此问题可视为“正-非正”“负-非负”两个二分类问题的累加,因此这里可以使用精确率、召回率和F1分数作为结果进行对比分析。根据情感转换词(否定含义)取相反数(2)与否(1),根据关键词剔除句子(b)与否(a),对四种情况的结果进行平行对比,数据清洗和对比结果如下:
不难看出,与对照组a1相比,根据关键词剔除句子的方法(b1)显著增加的分类的准确度,但是根据情感转换词取相反数的方法(a2)降低了分类结果的表现,两种方法均使用时,分类效果变化不显著。
经过观察文本可以发现由于评论中有些用户进行了与商品无关的发言,且多为情绪化表达,根据关键词剔除句子的方法可以有效清洗数据,减少无关信息,从而提高了剩余数据的质量。而根据情感转换词取相反数的方法,遇到了正如前面说到的否定含义覆盖范围的问题,因而造成了大量错误判断。
另外,对于刚才提到的形容词thin的匹配问题,由于数据中样本较少,并不能得出结论,但是通过将其情感值取相反数的方法,在现有样本中确实可以有效解决分类错误的问题。
研究结果
经过测试和观察基于词典的句级情感分类方法整体效果良好,不过对于否定、形容词不匹配、对象错误等问题表现欠佳。使用Python实现了提出的改进方法,经过验证发现根据关键词进行数据清洗的方法显著提升了分类准确率。
欢迎
关注
撰稿:尹铭烨
排版:尹铭烨
责编:管新潮
(以上内容授权转载自“海上技客”微信公众号,所有解释权归其所有)
2020年12月·线上工作坊
语料库与Python应用能力提升工作坊
当今社会,语料库越来越受到学者们的关注,不论是学校教学、科研还是社会生产实践,语料库的作用都不容忽视。现有技术工具虽然为语料库的研究和应用提供了不少选择,但在实践中存在各种问题。Python技术携手语料库应用可实现语料库理论深化和技术创新的并行发展,更重要的是,Python有着近乎无限的拓展功能,可以从语料库中挖掘出更多的数据信息,使语料库的应用具有无限可能。
为了更好地帮助外语教师掌握语料库与Python的应用,上海交通大学出版社邀请上海交通大学外国语学院专注于该领域研究的专家于2020年12月5—6日在文华在线优学院举办线上“语料库与Python应用能力提升工作坊”。工作坊结束后颁发电子版学时证书。
本次工作坊旨在帮助学员——
① 习得Python编程的基础能力;
② 提升Python在教学和科研尤其是科研论文写作中的应用能力。
会议时间:2020年12月5日—6日(共2天)
会议地点:文华在线优学院直播课堂
参会人员:零基础Python皆可参加
(会议详细通知请点击文末“阅读全文”进行跳转阅读)
推荐用书
语料库翻译学文库
《语料库与Python应用》
《语料库与Python应用》以如何在语料库的教与学及其应用、语料库科研中习得Python能力的逻辑关系为线索,描述了Python的价值、意义和作用,并将全书内容组合成可有效助力于Python能力习得的三个层次。第一层次是掌握与语料库相关的基础性代码;第二层次是这些基础性代码的活学活用;第三层次是以创新方式运用这些代码去解决与语料库相关的较为复杂的问题。Python是语料文本处理的利器,需要在一定的理念指导下方可充分理解其在特定领域内所呈现的特征,而本书的第一作用就是帮助读者去运用这一“语言+技术”理念,其次才是Python本身。
扫描上方二维码至
教育分社官方旗舰店购买
往期回顾
1. Python编程|上海交通大学外国语学院学生Python编程作业展示(1)
2. Python编程|上海交通大学外国语学院学生Python编程作业展示(2)