从评论数据看原神钟离事件

您所在的位置:网站首页 原神钟离角色数据 从评论数据看原神钟离事件

从评论数据看原神钟离事件

2024-06-22 02:55| 来源: 网络整理| 查看: 265

观前提示:

本文为刚刚涉猎自然语言处理(NLP)的本人的一次个人项目记录,只会对数据给出的结果进行一些简单且不带个人色彩的客观评价,代码以及数据我会放在文章最后的github链接里,欢迎在评论区就结果进行友善讨论以及对代码及使用的工具等批评指正,在下不胜感激~

引子:

自去年末原神角色钟离的高质量PV与其实际强度的巨大落差导致的风评下降开始,各大手游都或多或少遭遇了一定程度的公关危机,典型的如同属米哈游的崩三兔女郎事件以及鹰角的方舟夏活事件。我们暂且不论游戏制作方对这些事件的态度与处理方式,但动辄几十万条的评论确实为我们提供了大量用于训练模型的元数据。在本文中,我们将从角色演示视频《钟离:听书人》的评论区以及bilibili游戏中心内原神的评论区入手,通过对评论情感正负向的分析来理性探讨围绕钟离实装发生的一系列事件。

数据爬取:

关于b站评论的爬取网上有很多实用的教程,但值得一提的是由于今年初b站将视频评论由翻页改为了下滑,其数据接口也随之进行了改版,因此很多教程里的接口现在是无法使用的,这里我们通过F12调出chrome的开发者控制台后点击“按热度排序”便可以看到现在的接口:

Request URL那一行就是接口

移除不必要的参数后我们可以将其简化为:

https://api.bilibili.com/x/v2/reply/main?next=0&type=1&oid=712909579&mode=3

type默认值为1,oid是每个视频特有的标签,mode代表了评论的排序方式,其中mode=2为按时间排序,mode=3为按热度排序。这里特别讲一下next,它的准确定义是按热度排序下的评论页数,即使评论改成了下滑式接口内也还是保留了一个代表页数的重要参数,而且如果按时间排序的话next的值和乱码没有任何区别,所以在爬数据之前务必要理解所有参数。

对接口有充分了解后我们便可以利用Postman观察即将爬下来的数据的具体结构:

JSON格式下的数据,简单来讲就是个大dictionary

这里我们将爬下来的数据整体称为result,result["data"]["replies"]里的每一个元素称为reply,在此命名方式下对本项目比较重要的几项数据为:

reply["content"]["message"]:评论内容

reply["ctime"]:评论时间,这是个时间戳,有必要可用time转换为所需格式的字符串

reply["like"]:点赞数,根据B站机制应该其实是点赞数减去点踩数

reply["member"]["level_info"]["current_level"]: 评论用户等级.

这里其实reply["replies"]会嵌套一个子评论的dictionary,虽然利用宽搜或深搜可以很方便地得到所有的子评论,但本项目的主要目的是分析评论对游戏本身的态度,而子评论很难判断其情绪表达对象是视频,主评论抑或是@的另一条子评论,因此我们只将最表层的评论纳入考虑。

游戏中心评论的爬取则大同小异,不过这里的评论仍是传统的翻页制,这里仅提供接口:

https://line3-h5-pc-api.biligame.com/game/comment/page?game_base_id=103496&rank_type=2&page_num=1(注意这里的页数是从1开始的)

接下来便可以爬数据了,需要注意的是由于评论是在实时更新的,所以在爬取的过程中会经常发生中断,解决方法一是尽量在用户活跃度低的时间爬数据,二是记录当前页数并在中断的地方重新开始,我爬完全部约35万条评论(视频10万 + 游戏中心25万)总共停了约20次,要是有高手知道如何避免这个问题一口气爬完请务必在评论区留言,本人先在这里谢过了。

建立模型:

在本项目中我们使用SnowNLP,一个国人自创的中文自然语言处理库,进行建模,其情感分析的基本原理是朴素贝叶斯分类,此外还修改源码加入了中文分词库jieba以强化SnowNLP自带的分词。因为游戏中心的评论附有评分(1星~5星),这让我们可以大体上推测评论内容的正负向,故我们将这25万条评论以8:2的比例随机分为建模用的训练集与测试集。SnowNLP的训练集是由两个txt文件pos.txt和neg.txt组成的,原数据为网上购物的用户反馈,我们这里将3星以上的评论存入pos.txt,3星及以下的评论存入neg.txt以训练出针对原神评论的模型。

当然,在建立模型之前,考虑到游戏中心评论的一些特殊性,我们需要对数据做以下处理:

对游戏中心评论这类特殊文本的预处理

首先,对jieba库不了解的原神相关词汇,我们需要进行记录以防止不必要的分词,例如“3A大作”如果不登记为一个词汇的话,就会被分为“3”,“A”,“大作”三个词,这显然是不妥的。

其次,因为游戏中心每个用户只能对一个游戏打一次分,所以有的人会将自己过去的评论都保存下来并加上分割线或日期进行记录,但由于系统只会保存最近一次的分数,所以如果前后态度差距过大的话这类评论就会影响对情感正负向的判断,因此我们直接将带有分割线或年份的评论从数据中移除,从结果来看该操作并未对数据量产生显著的影响。

经过预处理后训练出的模型准确率达到了80%。

应用模型与数据可视化:

将训练好的模型应用到《钟离:听书人》的评论区(截至2021年8月16日)后,我们便可以通过对结果的可视化来得出一些简单的结论,这里作图的工具是matplotlib。

1. 首先是最直接的正负向评论数对时间作折线图:

正负向评论数(2020-11-30 ~ 2021-08-16)

在上图中,除了视频发布后至卡池开放前的好评如潮,我们还可以注意到另外几个明显的评论数峰值,让我们拉近视角来看一下它们的对应事件:

正负向评论数(2020-12-01 ~ 2021-01-14)

2020-12-07:卡池实装一周(负向峰值,角色强度不符合大众预期)

2020-12-22:钟离PV日配实装(负向峰值,评论风向开始逐渐偏离强化角色的初衷)

2020-12-31:钟离生日(正向峰值,这之前官方承诺在1.3版本强化钟离,风波基本平息)

正负向评论数(2020-03-04 ~ 2021-03-19)

2021-03-14:钟离PV播放量破千万(正向峰值)

正负向评论数(2020-08-01 ~ 2021-08-16)

2021-08-09:钟离PV播放量破两千万(正向峰值)

2. 接下来,考虑到有相当数量的用户并不会直接发表评论,而是通过点赞或点踩来表达自身观点,若我们以+1与-1分别代指情绪的正向与负向,这里便可以用一个简单的公式,(点赞数 + 1)* 情绪方向,来体现一条评论背后隐藏的整体态度:(不要忘记b站视频的点赞数已经减去了点踩数)。这里我们选择将每日的整体态度和对时间作折线图:

每日整体态度(2020-11-30 ~ 2021-08-16)

如上图所示,PV发布第一日极度正向的整体态度甚至影响到了对剩余数据的观察。

让我们移除第一日的评论后重新作图:

每日整体态度(2020-12-01 ~ 2021-08-16)

我们可以看到负向整体态度的峰值为-20000左右,这远远无法与第一日的正向整体态度(+600000)相比,当然这个结果也有受到删评等外界因素影响的可能。此外,在2020年12月13日出现了反常的正向峰值(官方发布角色调整公告的时间为12月19日),经检查发现模型对一条高点赞评论发生了误判,原句为“三天前4.3万评论,骂了三天,变成了4.2万评论”,虽能看出是在内涵删评,但其字面上并不明显的负面倾向导致了模型的误判。

3. 最后,我们分别对每日给出正负向评论用户的b站平均等级对时间作图:

每日正负向评论用户平均等级(2020-11-30 ~ 2021-08-16)

如上图所示,给出负面评论的用户的平均等级较给出正面评论的用户的平均等级随时间变化有更大的波动,但二者都大体维持在四五级,这说明给出这些评论的仍主要是B站的核心用户。

结论与展望:

在本项目中,我们通过对B站评论的分析可以得出以下结论:

1. 在舆论风波的中后期,评论风向可能会与开始相比发生较大的变化;

2. 官方给出解决方案后,用户整体态度会逐渐归于零点乃至有朝正向发展的趋势;

3. 参与评论的主体仍为B站的主体用户而非水军。

本人在训练模型的过程中深刻体会到了当代年轻人在社交论坛中使用的语言与传统文本的巨大差别,除了圈内特有词汇,首字母缩写和表情包,对反讽的大量使用也给建模带来了不小的挑战,希望本人在学习自然语言处理的过程中能领悟更多处理此类情况的方法。此外,在数据可视化方面,本人还有一些未完成的设想,例如爬取更多的参数后对其与情绪分析的结果使用线性回归以分析二者的关联度,这些想法将在未来的项目中加以实现。

非常感谢读到最后的每一个人!那么让我们在下一个项目报告中再见~

参考:

1. 灵感来源:

1.1. Bilibili.com Spider and Data analysis:

https://www.kaggle.com/feilinhu/bilibili-com-spider-and-data-analysis

2. python爬虫及b站评论/弹幕抓取相关知识:

2.1. Python爬虫:常用的爬虫工具汇总

https://blog.csdn.net/mouday/article/details/83026074

2.2. 爬虫如何抓取b站评论,弹幕等内容?

https://www.zhihu.com/question/56924570

2.3. B站评论爬取

https://blog.csdn.net/weixin_42275807/article/details/104750094

2.4. 【python爬虫】爬取bilibili动态下面的评论

https://www.bilibili.com/read/cv5727871

2.5. 关于b站评论区改版及评论区API

https://www.bilibili.com/read/cv10966004

2.6. Python 网络爬虫实战:爬取B站《全职高手》20万条评论数据

https://bbs.huaweicloud.com/blogs/detail/177322

3. SnowNLP官方链接及相关实战项目:

3.1. SnowNLP官方github链接

https://github.com/isnowfy/snownlp

3.2. Python的中文文本挖掘库snownlp进行购物评论文本情感分析实例

https://blog.csdn.net/yyxyyx10/article/details/62428238

3.3. python 舆情分析 nlp主题分析 (2)-结合snownlp与jieba库,提高分词与情感判断 待续

https://cloud.tencent.com/developer/article/1711633

3.4. 通过结合jieba分词优化snowNLP文本情感分析效果

https://www.cxyzjd.com/article/weixin_42007766/89824318

代码链接:

https://github.com/zwang1999/Zhongli-Event-Sentiment-analysis



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3