背景描述及需求
2019新型冠状病毒(COVID-19)感染的肺炎疫情发生对人们生活生产的方方面面都产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。
为了帮助政府掌握真实社会舆论情况、科学高效地做好防控宣传和舆情引导工作、针对疫情相关话题开展网民情绪识别的任务,本文对疫情期间网民的微博数据进行文本挖掘分析,本次数据挖掘建模的目标如下:
1、分析某一网民对疫情相关话题的情感倾向。
2、从微博内容挖掘出网民情绪积极与异常情绪缘由。
3、针对情绪消极用户指定对策进行舆情引导,防止情绪进一步恶化。
本次建模针对疫情期间网民关于疫情相关话题的微博中文内容,在对文本进行预处理、分词、停用词处理后,通过分类算法随机森林和LDA主题模型多种数据挖掘模型,实现对微博中文内容数据的情感倾向的判断以及所隐藏的信息的挖掘分析,以期望得到有价值的内在内容。
本案例的疫情期间网民情绪识别的总体流程如图1-1所示。
图1-1
1)获取数据,数据来源于赛题疫情期间网民情绪数据。
2)对获取的数据进行基本的处理操作,包括数据预处理、中文分词、停用词过滤等操作。
3)疫情期间网民情绪数据进过处理后,运行多种手段对微博中文内容数据进行多方面的分析。
4)从对应结果的分析中获取微博中文内容数据中有价值的内容。
实施过程
数据集依据与“新冠肺炎”相关的230个主题关键词进行数据采集,抓取了2020年1月1日—2020年2月20日期间共计100万条微博数据,并对其中10万条数据进行人工标注,标注分为三类,分别为:1(积极),0(中性)和-1(消极)。这里只使用10万人工标注的数据集,字段说明见表2-1。
表2-1
数据接入
在实验中添加 数据源 节点,将航空公司客户数据读取进来,部分数据如图2-1所示。
图2-1 疫情数据
情感倾向是字符串类型,将其转换成整数型,使用 元数据编辑 节点,如图2-2所示。
图2-2 更改数据类型
数据探索
主要针对微博中文内容,查看是否有空值和重复值。我们接入一个 聚合 节点,对微博中文内容作Group操作,微博id作Count操作,如图2-3所示。然后接入一个 排序 节点,按照降序的方式进行排序,查看输出结果如图2-4所示,总共有354条空值数据并且有不少重复的内容。
图2-3 聚合条件
图2-4 微博中文内容聚类后数据
接着我们接入一个 聚合 节点,用来查看一下分类指标情感倾向的类别分布情况,对情感倾向作Group操作,微博id作Count操作。输出结果如图2-5所示,可以看到除了我们需要的0、1、-1的类别以外,还有其它的类别,这些类别不是我们需要的,可以将其过滤掉。还有样本的分布并不平衡,0类别的样本数占了较大的比例,需要考虑样本不平衡对模型产生的不利影响。
图2-5 情感倾向类别分布
数据预处理
通过数据探索发现,微博中文内容有部分空值和重复值,情感倾销有其它不相关的类别。如果将这些评论数据也引入进行分词、词频统计乃至情感分析等,必然会对分析造成很大的影响,得到的结果的质量也必然是存在问题的。那么在利用到这些文本评论数据之前,必须先进行数据预处理,把大量的此类无价值含量的评论去除。
微博中文内容数据的预处理主要有3个部分组成:去空值、文本去重、情感倾向数据清洗。
1、去空值
接入一个 空值处理 节点,将微博中文内容数据中空值数据去除,空值处理方式过滤整行。
2、数据清洗
接入一个 行选择 节点,将情感倾向中不为0、1、-1的数据过滤,行选择条件配置如图2-6所示。我们看到分类标签中有-1值,为了方便后续的模型训练,我们将情感倾向中所有值加1,即1、2、0。接入一个 派生列 节点,派生列配置如图2-7所示:
图2-6 行选择条件配置
图2-7 情感倾向所有值加1
3、文本去重
微博中文内容中有部分重复的内容,在图2-4中我们可以看到大部分重复微博都是转发或者复制他人,这些内容并无多大意义,诸如“转发”“快转微博”等。为了减少重复内容对模型训练造成的干扰,将其去除。接入一个 去除重复值 节点,将微博中文内容重复内容去除,仅保留一条数据。
4、采样
在数据探索时,我们发现数据样本分布不平衡,0分类样本数量是其它类别的2-3倍,这个分布会对模型的预测结果产生影响。大部分模型的默认阈值为输出值的中位数,比如逻辑回归的输出范围为[0,1],当某个样本的输出大于0.5就会被划分为正例,反之为反例。在数据的类别不平衡时,假如正例数量大,反例数量极小,采用默认的分类阈值可能会导致输出全部为正例,产生虚假的高准确度,但这种分类结果并不是我们想要的,往往我们更看重反例的预测效果。因此在实际应用中,解决方法如下:
1)调整分类阈值,使得预测结果更倾向于类别较少的数据。
2)选择合适的评估标准,比如ROC或者F1,而不是准确度(accuracy)。
3)通过采样法(sampling):来处理不平横的问题。分为欠采样(undersampling)和过采样(oversampling)两种。
过采样:重复反例数据,实际上没有为模型引入更多数据,过分强调反例数据,会放大反比例噪音对模型的影响。如果其中部分点标记错误或者是噪音,那么错误也容易被成倍的放大。最大的风险就是对反例过拟合。
欠采样:丢弃大量正例数据,从而弱化了正例数据的影响,可能会造成偏差很大的模型。如果数据不平衡类比的数据量较大,影响会相应的减少。数据总是宝贵的,抛弃数据是很奢侈的,有一种做法是反复做欠采样,即将正例数据拆分成n份,每一份跟反例数据 构成新的样本数据集,将这些数据集分别用作训练,预测的结果便是它们的集合。
4)数据合成:SMOTE(Synthetic Minority Oversampling Technique)即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
实际实验中一些经验性质的总结如下:
- 采样方法一般比直接调整阈值的效果要好。
- 使用采样方法一般能提高模型的泛化能力,但有一定的过拟合风险,应搭配使用正则化模型。
- 过采样的结果较为稳定,作为一种升级版的过采样,SMOTE是一种不错的处理方式,大部分和过采样的效果相似。
- 过采样大部分时候比欠采样的表现效果好,但很难一概而论哪种方法最好,具体仍需根据数据的特性(如分布的数量等)来选取。
通过图2-5得知,分类的-1数据有16000多条,而分类为0的数据有57000多条,为了解决分类不平衡的问题,-1的数据分布的话数量有一定规模,这里使用简单的欠采样方法,-1、0、1采样的比例为1:2:1。接入一个 PYTHON脚本 节点,脚本内容如图2-8所示。
图2-8 欠采样脚本内容
数据预处理流程图如图2-9所示。
图2-9 预处理流程
文本处理
分词
在中文中,只有字、句和段落能够通过明显的分界符进行简单的划界,而对于“词”和“词组”来说,它们的边界模糊,没有一个形式上的分界符。因此,进行中文文本挖掘时,首先应对文本分词,即将连续的字序列按照一定的规范重新组合成词序列的过程。
分词结果的准确性对后续文本挖掘算法有着不可忽视的影响,如果分词效果不佳,即使后续算法优秀也无法实现理想的效果。例如,在特征选择的过程中,不同的分词效果,将直接影响词语在文本中的重要性,从而影响特征的选择。
接入一个 分词 节点,将文本内容进行中文分词。参数自定义词典见附件,输出结果如图2-10所示。
图2-10 分词
停用词处理
文本通过分词节点分词后,如图2-10中可以看到有些词语对模型训练而言并没有什么实际的意义,比如说标点符号、连接词等。我们接入一个 停用词处理 节点,将一些无意义的词组去除,停用词列表详情可以查看本文末附件部分,停用词列表如图2-11所示。
图2-11 停用词列表
经过停用词处理后的数据后,会有部分词组被删除,因此会导致有些数组为空的情况,我们将这部分数据去除。接入一个 派生列 节点,我们将数组长度计算出来,配置如图2-12所示。然后接入一个过滤与映射节点将数组长度为0的数据过滤掉,配置如图2-13所示。
图2-12 数组长度计算
图2-13 过滤掉数组为0数据
词量化
词组的形式无法用于计算机运算,所以为了将文本情感分析转换成机器学习问题,首先需要将词组转换成数字化能够被计算机所识别。为了实现这一转换,需要采用 TF-IDF 算法 。TF-IDF是一种统计方法,TF意思是词频,IDF意思是逆文本频率指数,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF值越高,说明该词越重要。TF-IDF的参数特征项数这里配置2500个,整个处理流程如图2-14所示。
图2-14 词组向量化
建立模型
模型构建主要包含两个部分,一个是通过构建分类模型,对网民的微博中文内容进行情感分类,另一个是通过LDA模型进行主题分析。
情感分类
样本数据中情感总共分为三类,分别为0、1、2。我们使用一个多分类算法,这里选用 逻辑回归 算法。整体的实验流程如图2-15所示。
图2-15 情感分类模型构建
特征选择 节点,特征列选择TF-IDF算法的输出列,如图2-16所示。拆分节点使用默认参数配置,训练集与测试集的占比为7:3。逻辑回归的参数配置如图2-18所示。评估节点的输出结果如图2-17所示,准确率大概为0.657。
图2-16 选择特征列
图2-17 评估结果
图2-18 逻辑回归参数配置
基于LDA模型的主题分析
从统计学的角度,对主题的特征词出现频率进行量化表示。本文运用LDA主题模型,用来挖掘。主题模型在机器学习和自然语言处理等领域是用来在一系列文档中发 现抽象主题的一种统计模型。从直观上来说,传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF、TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没 有,但两个文档是相似的,因此在判断文档相似性时,应进行语义挖掘,而语义挖掘的有效工具即为主题模型。
如果一篇文档有多个主题,则一些特定的可代表不同主题的词语会反复的出现,此时,运用主题模型,能够发现文本中使用词语的规律,并且把规律相似的文本联系到一起,以寻求非结构化的文本集中的有用信息。LDA模型作为其中一种主题模型,属于无监督的生成式主题概率模型。
本文在疫情微博中文内容关注点的研究中,即对微博中的潜在主题进行挖掘,微博中的特征词是模型中的可观测变量。一般来说,每条微博中都存在一个中心思想,即主题。如果某个潜在主题同时是多则微博中的主题,则这一潜在主题很可能是整个微博语料集的热门关注点。在这个潜在主题上越高频的特征词越可能成为热门关注点中的微博关键词。
本文在原始数据文本处理的基础上,对积极和消极情感倾向的潜在主题分别进行挖掘分析,从而得到不同情感倾微博用户不同方面的反映情况。
首先对消极情感倾向进行分析,在文本处理的基础上,我们在停用词节点后接入一个 过滤与映射 节点,保留情感倾向为0的,接入一个 特征选择 节点,选择特征列如图2-19所示。接入 LDA 节点,参数配置如图2-20所示。通过抽取将两个节点连接起来,接入一个 主题-词分布(LDA) 节点,参数主题词数为50。
图2-19 特征选择
图2-21 LDA参数配置
然后对积极情感倾向进行分析,在文本处理的基础上,我们在停用词节点后接入一个 过滤与映射 节点,保留情感倾向为2的数据,后面操作与上述操作类似。
整个LDA处理流程图如图2-21所示。
图2-21 LDA流程图
将数据导出到目标数据源,通过BI工具自助仪表盘进行展现,消极情感倾向词云图如图2-22所示,因为LDA的主题数参数配置为2,会有两个主题,将两个主题分别做成词云图进行展示。同理,将积极情感倾向也通过词云图进行展示如图2-23所示。
图2-22 消极情感倾向词云图
图2-23 积极情感倾向词云图
根据微博中文内容消极情感倾向的词云图,可以看到主题1中出现比较多词是人、病例、确诊、死亡、新增、发烧、感染、肺炎以及国家名词等,主要反映网民产生负面情绪的原因有:新型冠状病毒感染会引发发烧致使人感觉到不适;肺炎的确诊病例、死亡病例、新增病例这些指标会触动人的情绪;日本、美国等国家感染人数的不断增加也无形中增加了人们的焦虑情绪。主题2中出现较多的词为人、吃、死、野生动物、病毒、传播、怕、蝙蝠、上班、工作等,主要反映网民产生负面情绪的原因有:网民对于吃蝙蝠等野生动物的人导致的病毒传播强烈不满;网民对于病毒并不了解,会产生惧怕心理;在此期间网民无法工作,很多没了经济来源,会产生焦虑情绪。
根据微博中文内容积极情感倾向的词云图,可以看到主题1中出现比较多词有中国、加油、致敬、治愈、希望、一定、一起、平安、白衣天使等,主要反映网民一起抗击疫情的决心,对中国战胜疫情的信心,对一线抗疫人员的致敬和祈福。主题2中出现较多词有武汉、加油、希望、平安、行动、心、好、辛苦、哈哈哈、物资、前线、感谢、生活等,主要反映网民对抗疫中的物资、支援求助等方面的认可以及生活中积极乐观心态。
综合以上对主题以及其中的高频词汇可以看出,网民积极情绪主要表现在:对国家在对抗疫情期间采取措施的认可,对一线人员付出的高度赞扬,对战胜疫情的必胜信念,乐观积极的生活态度,对物资支援等作出重要贡献的感谢等。相对而言网民消极的态度主要有:生病引起身体不适,对病毒传播者的强烈不满,对病毒的不了解而产生的恐惧心理,失去收入来源的焦虑情绪等。针对网民的不满情绪可以采取以下几个方面的措施。
1)通过新闻、社交工具、报纸、宣传栏等科普病毒知识,让更多人了解其真实面貌,减少人们的恐慌。
2)对于买卖野生动物商家以及使用野生动物作为食材的餐厅严厉处罚,安抚人心。
3)适当通过减少企业税收等方式减少企业负担,减少企业裁减员工。
4)对于感染患者给予更多关怀,减少医疗负担。
5)派出医疗专家解答疑惑以及安抚人们情绪。
总结
本章结合疫情期间网民微博中文内容的文本分析的案例,重点介绍了数据挖掘算法中文本处理以及LDA主题模型在实际案例中的应用。本问研究疫情期间网民微博中文内容情感倾向问题,从分析疫情期间网民的积极和消极情感倾向发挖掘出该情绪产生缘由,并针对网民消极的情感倾向提出几点措施。