1. 引言
随着Web 2.0与移动互联网的发展和全球综合实力的卓越进步,网络社交越来越成为人们学习、工作和生活中不可分割的一部分。人们在移动互联网平台中不仅仅成为了信息的接受者,也成为了内容的创造者。例如百度贴吧、新浪微博、知乎、YouTube、Twitter、Flick等。人们在这些平台上进行交流、对话和参与的时候,虽然这大大加快了人与人之间的信息交流和沟通,但是不容忽视的是,这些移动互联网平台在给人们提供信息交流和便利互动的同时,也大大降低了谣言传播的成本,因此,这些平台也日渐地成为了在众多谣言传播途径中最合适的场所,而这些谣言往往相当的真实,比如日本核电站事故引发的用盐的恐慌事件、各种冒充公安机关发布的文件等等,或者是近期,在新冠肺炎疫情防控的关键时期,在全国人民都为疫情付出心血之时,网上出现了各种有关新冠肺炎疫情防控的谣言,造成了社会上错误的认知。这类事件不仅扰乱了市场的正常秩序,而且还造成了群众的焦虑,甚至还导致了各地的恐慌现象,影响可谓是十分恶劣的。
谣言的泛滥,导致网络生态环境的健康发展受到了严重影响,这使得人们难以在数量庞大的、样式五花八门的信息中进行分辨并获取到可靠的、有用的信息,以至于人们鉴别、获取真实信息的可能性大大降低。在面对突发事件的时候,例如一些涉及到社会安全的事件、卫生安全的事故,重大自然的灾害等,人们总是抱有质疑的态度去看待这类事件并从各自的、类似于社交平台这类的渠道去获取并传播貌似真实或虚假的信息。这样,虽然网络社交媒体的便捷带给了人们无穷的好处,但这也将给谣言的传播提供了无穷的平台,从而大大增加了谣言传播的深度和速度,然后极易造成社会的慌乱和暴躁的情绪,扰乱社会的秩序,而往往这些负面影响是致命的。因此,谣言检测不单单是为了还给人们一个良好的、健康的网络环境,也要能够迅速帮助群众去分辨可靠的、有价值的信息。也正因为如此,在谣言检测这个问题上己经有较多的研究人员提出了各种算法,最常见的算法就是基于内容检测的谣言预测方法,并且取得一定的效果。例如,Castillo等 [1] 提出了基于各种特征来预测信息可信度的预测,包括基于信息内容、基于用户特征、基于传播特征、基于话题等。Qazvinian等 [2] 则分别基于内容文本、网络拓扑结构和微博特有的特征来识别谣言。然而,对于谣言预测而言,辨别某项信息是否是谣言固然重要,但能够及时地从移动互联网社交平台中发现谣言从而能够禁止其流传,然后避免可能带来的不良影响更为重要,这便是谣言源检测的目的。因此,谣言源的检测和监控相当重要,能够有效地控制谣言的传播更为重要。
在百度贴吧、新浪微博、知乎、YouTube、Twitter、Flick等众多平台中,新浪微博于2010年试运行其辟谣平台,并在之后正式推出其人工辟谣平台。根据新浪微博社区管理中心网站数据显示,截止2020年1月1日,共辟谣38,186条,换句话说,9年来,平均每天辟谣11条,人工检测的效率可见一斑,因此,微博谣言自动检测逐渐成为研究热点 [3]。
本次研究采用基于机器学习理论,提出卷积神经网络和循环神经网络相结合的谣言检测模型,将文本中的谣言事件向量化,通过循环神经网络的学习训练来挖掘表示文本深层的特征,避免了特征构建的问题,并能发现那些极其不容易被人发现的特征,从而达到更好的效果。
2. 算法描述
2.1. 数据预处理
本次研究采用的数据接口是来自新浪微博不实信息辟谣专区,并从此网页中爬取了中文谣言数据。在这些数据中,包含了一些与本次研究不相干的数据,所以接下来要进行聚焦爬虫操作。
①提取网页内容
随着互联网的发展与WEB 2.0的到来,爬取的页面绝大多数都是动态页面,这就涉及到了AJAX技术。AJAX技术可以看成是一种脚本,一种延时加载、异步更新的技术,并在特定的时候以少量数据的交换而进行部分页面的更新。而更新过后,爬取的数据更具有一定的时效性、真实性,这对聚焦爬虫有着巨大的好处。
②爬取网页文本
在爬取的文本中,绝大多数都是带有HTML超文本标签,比如、
等等,其中③数据向量化
在数据集全部转化成JSON语言后,将键值对中我们需要的值进行提取特征,而这些特征必须能够最大化数据的特征,能够完全表现该数据的特性。
2.2. 卷积神经网络CNN
卷积神经网络(Convolutional Neural Network, CNN),人们通常情况下会把它看成是一种人工神经元,其神经元之间使用类似动物视觉皮层组织的链接方式,大多数情况下用于处理计算机视觉相关的任务,例如分类、分割、检测等。卷积神经网络最先出现于20世纪80年代到90年代,LeCun提出了LeNet用于解决手写数字识别的问题,随着深度学习理论的不断完善,计算机硬件水平的提高,卷积神经网络也随之快速发展。
卷积神经网络是近几年才发展起来的一种前馈神经网络,并成为了一种高效的识别方法。与其它的神经网络算法相相似,在训练时会使用梯度下降法等对参数进行修改、更新,因此所有的输入都需要进行在通道或时间维度归一化或标准化的预处理过程,其中,归一化是指通过计算极值将所有样本的特征值映射到层与层之间。而标准化则是通过计算均值、方差将数据分布转化为标准正态分布。
一般地,卷积神经网络通常由一个输入层(Input Layer)和一个输出层(Output Layer)以及多个隐藏层组成。隐藏包括卷积层(Convolutional Layer)、激活层(Activation Layer)、池化层(Pooling Layer)以及全连接层(Fully-connected Layer)等。
在本项目中,卷积神经网络用于前期神经网络框架的搭建。具体如下:因为文本的顺序是从上到下、从左到右的顺序,所以实验用到的向量为行向量。一般地,此行向量取五个字为标准,即以某个字为中心,分别向前和向后取两个字作为单个字向量的前缀和后缀,以此组成基本行向量并作为卷积层每次迭代的输入。
2.3. 循环神经网络RNN
在20世纪80~90年代,科学家们开始研究循环神经网络,它是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络。到了21世纪初,RNN发展为深度学习算法之一 [4],其中双向循环神经网络(Bi-RNN)和长短期记忆网络(LSTM)是常见的循环神经网络 [5]。
循环神经网络具有记忆性、参数共享并且图灵完备(Turing completeness),因此在对序列的非线性特征进行学习时具有一定优势。循环神经网络在自然语言处理(Natural Language Processing, NLP),例如机器翻译、语音识别、语言建模等领域有应用,也被用于各类时间序列预报 [6]。引入了卷积神经网络构筑的循环神经网络可以处理包含序列输入的计算机视觉问题。
RNN与卷积神经网络相结合的常见例子是循环卷积神经网络(Recurrent CNN, RCNN)。RCNN将卷积神经网络的卷积层替换为内部具有递归结构的循环卷积层(Recurrent Convolutional Layer, RCL),并按前馈连接建立深度结构 [7]。
除RCNN外,RNN和卷积神经网络还可以通过其它方式相结合,例如使用卷积神经网络在每个时间步上对序列化的格点输入进行特征学习(time-distributed),并将结果输入RNN [8]。
循环神经网络RNN与卷积神经网络CNN相比,其总参数量大大降低了,这是因为循环神经网络RNN的具有权重共享的性质,这种性质表示循环神经网络RNN的权重系数具有共享性,即在每一次的迭代中,循环节点使用相同的权重系数处理所有的时间步。相比于前馈神经网络,权重共享降低了RNN的总参数量。权重共享也意为着循环神经网络RNN可以提取序列中随时间变化的特征,因此其在学习和测试序列具有不同长度时可表现出泛化能力 [9]。
作为时间序列模型,循环神经网络RNN也具有这样的性质,即在时间序列建模的观点下,RNN是一个无限冲激响应滤波器(Infinite Impulse Response filter, IIR) [9]。这将RNN与其它应用于序列数据的权重共享模型,例如一维的卷积神经网络相区分,后者以时间延迟网络为代表,是有限冲激响应滤波器(Finite Impulse Response filter, FIR) [9]。
RNN的大致流程如下:
Figure 1. Schematic diagram of RNN basic principle
图1. RNN基本原理示意图
在图1中,x、s、o均为向量,分别代表着RNN的输入层、隐藏层和输出层的结果值,U表示从输入层到隐藏层的权重系数矩阵,V表示从隐藏层到输出层的权重系数矩阵,W表示距离现在最近的上一个时刻输入的权重系数矩阵。其中前一时刻的输出x、s、o均作为下一时刻的输入,即
(1)
(2)
(3)
这就表明,前一次迭代的结果必将在后一次迭代中体现出来。因此有隐藏层计算公式:
(4)
其中,激活函数f通常情况下为
(
),U为输入层
到隐藏层
的权重系数矩阵,W为距离现在最近的上一个时刻的隐藏层
到当前时刻隐藏层
的权重系数矩阵,b为偏差向量。这体现了循环神经网络之循环,也体现出了与卷积神经网络最大的不同。亦有输出层计算公式:
(5)
其中,V是隐藏层
到输出层
的权重系数矩阵,c是偏差向量,激活函数f通常情况下为归一化函数(Softmax函数),其输入是从K个不同的线性函数得到的结果,而样本向量x属于第i个分类的概率的计算公式:
(6)
这样,只需将
代入到上式中的x即可得到结果。
在本项目中,为了更好地体现实验的高效性,将数据预处理后的数据加入到RNN训练的序列中,即作为输入向量x,然后对每个输入向量x添加权重得到输入权重向量s。此时,向量s需要添加与距离现在最近的上一个时刻输入的权重系数(此为RNN特点)。同样的,V为向量s需要添加的权重,o为最后的输出。另外,每次都要将预测值与真实值进行比较来得到损失与精确度。这里多次提到权限,权限应该如何选取便成了一个大问题。但通过大量的实验发现,多个损失函数,数值会在某一个邻域内上下波动(基本上大致接近或是几乎无区别)。就像一些国际单位及其换算,在其数值上最多只是差了几个数量级,此时,加权变得毫无意义。为了解决这个问题,解决思路应该从损失函数角度考虑:
①损失函数度量单位
每个损失函数的度量单位不尽相同。在其进行归一化处理时,应注意将损失函数的输入尽量保证量纲一致。比如如果是用正、余弦夹角计算的,本身就是0~1的,这时,不用做任何处理。如果是欧式距离,则对欧式距离进行归一化处理,将Softmax函数(不带loss)作为损失函数时,在其进行归一化期间,在caffe的欧式距离层里面可以直接进行归一化处理。
②损失函数本身
比如多个超参数之间的联系,多个batch的总和或平均。这种情况必须经过大量的实验才能比较出具体超参数取多少值才会达到加权最优的情况。
3. 实验材料
本项目数据集采用经数据预处理阶段过后的数据,此数据集是公开的微博谣言预测数据集。为了保证实验的可靠性、有效性,实验集中爬取了大量需要的信息,经预处理,数据集中包含1538条谣言数据、1849条非谣言数据,这些数据具有真实性、可靠性的特点,足以供实验需要。通过这些数据集,生成数据字典,并将训练所用到的数据的每个字转换成数据字典中的数字,即数据中的每个字与数据字典中的每个编号一一对应。然后定义一个数据读取器。再应用循环神经网络RNN与卷积神经网络CNN结合的训练模型进行模拟训练。最后给定特定的信息进行真实的预测。
1、在本项目训练阶段之前,构建单池化层,包括以下几个参数:
①num_channels:通道数(The number of channels in the input text.)
②num_filters:卷积核数量(The number of filter. It is as same as the output feature map.)
③filter_size:卷积核大小(The filter size. If filter_size is a tuple, it must contain two integers, (filter_size_H, filter_size_W). Otherwise, the filter will be a square.)
④batch_size:批次大小(一般为16)
⑤act:激活函数(Activation type, if it is set to None, activation is not appended. Default: None.)
⑥pool_size:池化层大小(The pool kernel size. If pool kernel size is a tuple or list, it must contain two integers, (pool_size_Height, pool_size_Width). Otherwise, the pool kernel size will be a square of an int.)
⑦pool_type:池化层类型(The pooling type, can be “max” for max-pooling and “avg” for average-pooling. Default: max.)
⑧pool_stride:步幅(The pool stride size. If pool stride size is a tuple or list, it must contain two integers, (pool_stride_Height, pool_stride_Width). Otherwise, the pool stride size will be a square of an int. Default: 1.)
2、构建完池化层以后,搭建CNN神经网络,包括一下几个参数:
①dict_dim:数据字典大小(4409)
②emb_dim:纬度
③hid_dim:卷积核数量(一般为32)
④fc_hid_dim:fc参数纬度
⑤class_dim:分类数
⑥channels:输入通道数
⑦win_size:卷积核尺寸
⑧batch_size:批次大小
⑨seq_len:padding纬度
⑩embedding:嵌入(It implements the function of the Embedding Layer. This layer is used to lookup embeddings vector of ids provided by input . It automatically constructs a 2D embedding matrix based on the input size (vocab_size, emb_size) and dtype.)
3、在本项目的训练阶段中,包含了诸多超参数:
①epoch:训练轮次
②batch_size:批次大小
③adam:学习率
④padding_size:padding纬度
⑤vocab_size:字典大小
⑥skip_steps:每N个批次输出一次结果
⑦save_steps:每M个批次保存一次
⑧checkpoints:保存路径
最后进行模型训练与评估即可。
4. 实验测试
正式模型训练之前一定要先得到数据字典和数据列表。具体结果如图2所示:
Figure 2. Generate data dictionaries and data lists
图2. 生成数据字典和数据列表
在实验过程中多次调整超参数发现:参数不同会影响结果的收敛速度不同。从图中可以看出,迭代的次数、学习率等的不同导致了精度和损失的截然不同。学习率越低,收敛的速度越慢,收敛的时间也更长。在相同学习率的情况下,迭代次数越多,则准确率越高。具体结果如图3所示:
表1详细记录了各个超参数的调整与损失/精度之间的联系与区别。
Table 1. The relation and difference between the adjustment of each hyper-parameter and the loss/accuracy
表1. 各个超参数的调整与损失/精度之间的联系与区别
由表1得,纵观全局,实际精度要比训练精度要低,但损失越少,精度越高。同时,并不是学习率越高、迭代次数越多,最后的精度越高。这是因为,当学习率很高但训练次数不多的情况下,训练期间计算机所学到的内容过少,这就导致了计算机处理数据时出错的概率大大增加,损失也随之增高,最后精度更低,反之亦反。
重新进行实验,以表1中训练次数50次,学习率0.001为标准,最终预测结果如图4所示。
5. 结语
当今世界,随着互联网的发展与人们生活经济实力的显著提升,信息传播的速度急速增长,谣言大肆兴起,而这种类似于RCNN的算法几乎可以做到对谣言进行预测,实验结果与真实数据虽有些出入,但大方向上高度一致,说明RNN与CNN的结合模型对于谣言预测来说非常适合。本项目需要改进的地方依旧很多,比如如何提高在实际预测中的精确度等。这些可以在以后的实验中进行进一步的讨论与研究。
基金项目
浙江省自然科学基金项目(LY19F020022);杭州师范大学钱江学院师生共研专项项目(2021QJXS01);2021年国家级大学生创新创业训练计划立项项目(基于表示学习的多社交网络平台谣言源发现模型研究);杭州师范大学2021年“星光计划”大学生创新创业项目(基于表示学习的多社交网络平台谣言源发现模型研究);杭州师范大学钱江学院科研项目(面向实时交通信息的行车轨迹分析与路径规划研究)。
参考文献