Python编程|上海交通大学外国语学院学生Python编程作业展示(1)
The following article is from 海上技客 Author 杨磊
点击蓝字
关注我们
上海交通大学外国语学院学生
Python编程作业展示(1)
Senta与SnowNLP模型下
电影评论情感分析的比较
——以电影《大鱼海棠》为例
杨磊
(上海交通大学外国语学院2019级MTI专业)
评语
时下的Python编程已不再是“特定专业人群”的专利,外语专业的学生也同样能够掌握并应用于学习或未来的工作。Python工具的运用,关键在于理解工具包或模块的功能用处及其与应用对象的关联性。对工具包或模块理解得越深刻,就运用得越娴熟,其最后的数据分析结果也会越加可靠。
下文为2019级MTI专业学生杨磊的作业。不同工具包或模型一般都会告知自己的功用,但不利一面是有时难以知晓其中的不足之处。这份作业的特点是通过对比不同情感分析模型来提升模型的应用针对性,其四项所得结果即为例证。
——授课教师:管新潮
研究目的
Senta是一款由百度开发的开源情感分析系统,对于各类文本的情感分析具有较高的准确率,同时具有很好的实际应用价值。SnowNLP是一款用于处理中文文本的Python类库,其情感分析的训练数据主要来源于电商服务类评价,因此,在分析电影评论时,必须对其进行训练,以提高其准确率。本研究旨在对SnowNLP库进行训练,并比较该库在训练前后与Senta情感分析系统之间的差异。
研究步骤
01
数据获取与清洗
从相关网站获取豆瓣影评数据集,整个数据集包含约150万条评论,从中选取《大鱼海棠》影评共83292条,剩余十余部影片的影评用以训练SnowNLP库。
首先,利用Excel软件对两部电影的影评做基础的数据清洗,删去与本次研究无关的数据,包括评论人ID、评论日期、点赞数量等。
其次,准备用于测试Senta与SnowNLP准确率的数据,测试数据需要单独提取,以防止其污染正式分析所需数据,选取《大鱼海棠》前10000条评论,将评分为4/5分的评论标记为1(Positive),1/2分的评论标记为 -1(Negative),评分为3的中性评论删除,分别得到3399条Positive评论与2833条Negative评论,此两项作为标准答案使用,用于后续测试两种模型的准确率。
最后,准备用于喂养SnowNLP模型的数据,除《大鱼海棠》之外,影评数据集中其余电影的影评均可作为训练数据,整个语料库影评超过100万条,字数超过1600万字,其丰富程度可以保证训练质量。
02
测试两种模型情感分析的准确率
在数据清洗的第二步,获得了用以测试两种模型的标准答案,两种模型在测试过程中,若某项评论的positive概率大于0.5则记为positive(1),若小于0.5,则记为negative(-1),再与标准答案进行比较,计算出两种模型正确判断的次数,从而计算出正确率。
测试一:对Senta模型进行测试。其步骤为:(1)加载Senta模型;(2)将数据喂养给模型,并展开计算;(3)若影评的positive概率值大于0.5, 则记为positive,否则记为negative, 分别用1, -1进行表示;(4)与标准答案进行对比,并计算正确率。经过测试, Senta模型判断的准确率为0.7357。
测试二:对SnowNLP模型进行测试。其步骤为:(1)加载模型;(2)依次对各条影评进行情感判断;(3)将判断结果(positive为1, negative为-1)存进sentiment_list列表之中;(4)与标准答案进行对比并计算SnowNLP模型的判断正确率。经过测试,SnowNLP模型的准确率为0.6298。
经过测试,可以发现SnowNLP模型的判断准确率明显小于Senta模型,且两个模型做出一致判断的比例仅为0.58,这也意味着两个模型对于40%以上的影评做出了不同的判断,这是因为Senta模型的数据来源更加广泛,而SnowNLP模型训练数据主要是电商评论,因此需要利用专门的影评数据对SnowNLP模型进行训练。
03
训练SnowNLP模型
未经训练的SnowNLP模型的原始训练数据主要由约为1500万字的电商评论构成,本次用以训练的影评数据约6000万字,足以对模型进行良好的训练,以提高对影评进行情感分析的准确率。
首先,将原始数据集中的《大鱼海棠》影评删去,防止训练数据污染测试数据,将评分为4/5分的影评导入pos_all.txt,将评分为1/2分的导入neg_all.txt,利用此两份txt文档进行训练,经过数小时训练后,将训练完成的模型保存为marshal格式。
其次,将init.py中的datapath修改为训练所生成的marshal文件,这样在调用SnowNLP模型时会自动启用经过训练的marshal文件。经过测试后,训练准确率由原先的0.6298提升至0.7277;且两个模型做出相同判断的比例从原先的0.58提升至0.7290(见下图,其中绿色柱形为判断一致的部分),也就是说训练后的SnowNLP模型对原先的1480条影评判断做出了更改。
04
利用训练后的SnowNLP模型处理数据
SnowNLP模型经过训练后,准确率与Senta模型基本一致,接下来分别利用两种模型测试《大鱼海棠》剩余的73292条影评,并分析:(1)两种模型得出的分析结果与影评网站评分是否一致?(2)两种模型对于何种类型的影评判断不一致,句长是否会影响两种模型的判断?
经过两种模型运算之后,可以得出,Senta模型所预测的positive概率平均值为0.4740,经过训练后的SnowNLP模型所预测的positive概率平均值为0.5678,而影评网站平均打分为3.29分(1-5分),两个模型得出的结论与实际平均分情况比较吻合。但是,深入研究后,可以发现影评网站实际评分类规律近似于正态分布(见下图),中性评价3分的数量最多,但是两种模型所得出的概率分布却靠近两端的极值,这说明两种模型更加适用于二元分类问题,而对于中性评论却难以发挥较好的效果。
从上图可以看出,两种模型对于某些影评的判断也存在较大差异,将差异值分为十个等级,每0.1为一级。从下图可以发现,72.77%的影评差异小于0.4(见下图),也就是说两个模型做出的判断大部分是一致的,但仍存在部分影评判断不一致,通过分析影评平均句长与判断差异之间的关系可以发现,在差异显著的情况下(即差异大于0.4),平均句长与差异大小呈显著的正相关关系(见下图),也就是说,两个模型对于字数过多的影评判断会出现不一致、甚至相反的情况,通过查阅资料可以发现,SnowNLP模型的实现原理主要是从词汇方面来进行二元判断,而百度开源的Senta系统基于海量数据训练后,可以更好地联系上下文之间的关系,对于长句有更加准确的判断。
研究结果
1.SnowNLP库虽然主要针对的是电商评论,但经过训练之后,可以显著提升对影评判断的准确率。
2.语料库的丰富程度直接影响SnowNLP的训练效果。
3. 对于中性评论,两种模型都难以给出准确的判断,因此两种模型更适用于二元分类问题的研究。
4. 影评句长会直接影响两种模型的判断,Senta模型可以更好地考虑上下文之间的关系,而SnowNLP主要从词汇方面判断。
撰稿:杨磊
排版:杨磊
责编:管新潮
(以上内容授权转载自“海上技客”微信公众号,所有解释权归其所有)
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本身。
扫描上方二维码至
教育分社官方旗舰店购买
往期回顾
2. 叮咚,你的Python语料库更新请查收!《语料库与Python应用》更新分享!