冀源蕊, 康海燕, 方铭浩
(1.北京信息科技大学 信息管理学院 北京 100192; 2.中国邮政储蓄银行 软件研发中心 北京 100160)
谣言是指没有相应事实基础却被捏造出来,并利用各种渠道传播的言论。其受众面广,传播速度快,可能会对正常的社会秩序造成不良的影响。针对社会网络中谣言泛滥的问题,研究者们进行了大量的尝试与探索[1-5]。目前,针对谣言的检测主要分为基于机器学习的检测方法和基于深度学习的检测方法。基于机器学习的谣言检测方法由三个步骤构成[6],分别是为训练数据提取有效特征;利用特征在训练数据集上训练分类模型;使用训练模型对测试数据集进行预测。如此不断评估优化,从而判断测试集数据是否为谣言。Guo等[7]提取出基于账户的特征,如用户可信度、可靠性和名誉度等信息,将这些信息作为有效特征进行机器学习模型的训练。Kumar等[8]提出一种基于监督机器学习的谣言检测方法,采用支持向量机模型对提取特征后的谣言信息进行检测和识别。Gumaei等[9]提出一种基于XGBoost的谣言检测分类方法,针对阿拉伯语推文中的谣言信息进行检测。传统的机器学习谣言检测方法依赖特征工程,需要消耗大量的人力、物力和时间,且提取的特征主要集中在原始消息和转发消息中的词汇和语义特征,难以系统地概括谣言的特点。因此,研究者们尝试使用基于深度学习的谣言检测方法。
基于深度学习的谣言检测方法是目前较为流行的谣言识别方案。由于社交网络中的信息是一种与时间密切相关的时序数据,而循环神经网络(recurrent neural network,RNN)在时间序列和句子等变长序列信息的建模过程中显示出了很好的效果[10]。Ma等[11]最早将RNN引入谣言检测过程中,通过对文本序列数据进行时间维度上的建模分析,得到谣言上下文信息随时间变化的隐式特征,并加入长短期记忆(long-short term memory,LSTM)和门控单元等额外的隐藏层,解决长序列训练过程中由于RNN层数增加导致的梯度消失和梯度爆炸问题。此外,Chen等[12]提出结合RNN和变分自编码器的无监督学习模型来学习社会网络用户的网络行为;Alsaeedi等[13]利用卷积神经网络对Twitter上的虚假信息进行分类和识别;Bian等[14]利用双向图卷积网络对社交媒体中的谣言进行识别。
虽然基于深度学习的谣言检测方法摆脱了人工构建特征工程的方式,但是其端到端的结构难以把握谣言信息中的关键成分,使得模型训练缺乏可控性,训练时间长且模型复杂。另外,根据文献[15]可知,约72%的谣言在刚发布时被转发的次数更多,如果不能及时阻止其传播,就会形成谣言的二次传播,此时辟谣难度加大,再想消除谣言造成的负面影响变得极为困难。因此,需要设计一种有效识别谣言二次传播的方案。本文提出一种基于Attention与Bi-LSTM的深度学习谣言识别方法,引入Attention机制实现谣言二次传播的有效识别,采用Word Embedding机制将文本数据映射到一个低维度的实数向量,避免了高维度的输入导致LSTM模型产生维度灾难。在真实数据集上的实验结果表明,所提方法能达到94.3%的准确率,验证了该方法的有效性。
为了快速准确地对谣言进行识别,设计了一种基于Attention与Bi-LSTM的谣言识别方法,具体流程如图1所示。该方法主要包括数据处理模块、核心算法模块和谣言识别模块。其中,数据处理模块通过词向量模型将预处理后的原始数据转换为训练数据;核心算法模块负责神经网络的构建以及模型训练;谣言识别模块负责对新输入的信息进行谣言判别。
图1 基于Attention与Bi-LSTM的谣言识别方法流程Figure 1 Flow chart of rumor identification method based on Attention and Bi-LSTM
利用爬虫技术爬取流言百科、微博辟谣中心等新闻媒体和社交网站进行谣言数据收集;利用爬虫技术爬取搜狐新闻不同类别的新闻数据进行正常数据收集。将收集的所有谣言数据与正常数据无标记存储为wordEmbding.txt,作为训练词向量模型的输入数据;将收集的所有谣言数据与正常数据有标记存储为indexData.csv。
采用Python的Gensim模块来训练词向量模型,该模块采用的接口是word2vec API。将生成的wordEmbding.txt作为输入,使用Gensim模块对词向量模型训练数据进行训练,并最终得到词向量模型word2vec.bin。训练过程中,设置词向量维度为200,词向量上下文最大距离为5,随机梯度下降法中最大迭代次数为8,min_count为1。最终训练出词向量模型word2vec.bin作为输出,用于生成训练数据。
设置每条输入的序列处理长度为200,一次训练所选取的样本数为128,训练数据和验证数据的比例为9∶1。从indexData.csv文件中读取数据集,将句子分割成词表示,并去除低频词和停用词,通过特征提取将标签转换成索引表示,保存为label2idx.json,从word2vec中取出预训练好的词向量,并将词映射成索引表示,保存成word2idx.json的数据格式。从词向量模型中读取出词嵌入矩阵W,作为初始化值输入模型中。自动分割生成训练集和验证集,通过该验证集来测试模型的精确度。
本文设计了一种基于Attention与Bi-LSTM的谣言识别方法,其中LSTM采取的双层结构具有正向和反向两层,通过神经元的双向传递解决RNN中的梯度消失问题。由于LSTM具有门机制,每个门中的记忆细胞都能够控制LSTM单元保留的历史信息的程度以及记忆当前输入的信息,使它们能够保留重要的特征,丢弃不重要的特征。之所以引入第二层神经结构来扩展LSTM网络,是因为其隐藏层到隐藏层的连接以相反的时间顺序流动。因此,该模型能够利用过去和未来的信息。该方法引入Attention机制,解决了传统中文文本分类对于长序列编解码精度下降的问题,同时计算出每个时序的权重,作为特征向量提高模型精确度。
基于Attention与Bi-LSTM的谣言识别方法架构如图2所示。所构建的用于谣言识别的Attention与Bi-LSTM神经网络模型包括输入层、词嵌入层、双向LSTM层、Attention层和输出层。
图2 基于Attention与Bi-LSTM的谣言识别方法架构Figure 2 The architecture of rumor recognition method based on Attention and Bi-LSTM
1.4.1输入层 将训练集word2idx.json中的每个句子定义为T个单词组成的句子S={x1,x2,…,xT},每个词定义为inputXi,标签定义为inputY。
1.4.2词嵌入层 利用embedding_lookup函数通过词嵌入矩阵将输入的inputXi转换成词向量xt,生成词嵌入矩阵W,作为初始值输入模型中。
1.4.3双向LSTM层 包含前向和后向LSTM两层,每层具有相同的结构。其中,每个神经元包含四部分:输出门ot,输入门it,遗忘门ft和长短记忆状态ct。t时刻某个神经元的输入门包含三个参数:当前输入xt,前一时刻神经元的隐状态ht-1,前一时刻神经元的状态ct-1。神经元的输出门是二维的,包含权重h和类别C。W为其对应的词嵌入矩阵,b为偏置项,σ为softmax函数,tanh为激活函数。将128个样本数据一次性输入双向LSTM层进行训练,完成一次正反向传播和参数更新,具体过程如下。
1) 遗忘门层。遗忘门决定从当前细胞状态中丢弃什么信息,即控制上一个神经元输入记忆ct-1的遗忘程度,使用公式ft=σ(Wf·[ht-1,xt]+bf)进行计算,输出当前细胞状态对应的0~1之间的数字,其中0表示完全丢弃,1表示完全保留。
1.4.4Attention层 在双向LSTM层后引入Attention 层,将LSTM层输出的权重组合成矩阵H=[h1,h2,…,hn]。注意力反映的是每一个单词的时序权重对关系分类的重要程度,因此通过学习一个时序权重向量得到最好的输出,计算过程为
M=tanh(H),
(1)
α=softmax(WTM),
(2)
r=HαT,
(3)
h*=tanh(r)。
(4)
式(1)通过tanh激活函数将向量映射到-1~1,式(2)根据softmax层得到时序权重的特征,式(3)通过乘以原权重矩阵来增加特征的影响,式(4)把权重输出通过tanh激活函数进行映射。最终输出的三维矩阵包含词向量权重、时序权重和类别数。
本文引入Attention机制主要解决了输入序列随时间不断增长导致原始权重的表现越来越差的问题,通过保留LSTM编码器对输入序列的中间输出结果,打破了传统编码器-解码器结构在编解码时依赖内部一个固定长度向量的限制,再通过训练模型对这些输入进行选择性学习,并且在模型输出时将输出序列与之关联,生成一个权重向量。通过与该权重向量相乘,使每一次迭代中词汇的单独特征合并为句子级的特征。
1.4.5输出层 通过全连接层把高维矩阵转变为低维矩阵,同时把原始特征映射到各个隐语义节点,即分类的显示表达,得到预测标签y。将上一层得到的隐藏状态作为输入,句子S具有标签y的似然函数为
p(y|S)=softmax(WSh*+bS)。
(5)
标签y的最大似然函数为
y=argmaxyp(y|S)。
(6)
样本的损失函数为
(7)
式中:m为类别数,是L2正则化参数。J的值越大,当前模型的评估效果越差,通过损失函数使模型预测输出更接近真实样本标签。最终得到二维输出预测标签和h*,保存在神经网络模型中。
在所有收集到的训练数据中,中文数据共有253 226条,其中谣言数据28 991条,正常新闻数据224 235条;英文数据共有3 798条,其中谣言数据1 490条,正常数据2 308条。设置训练数据为231 322条,验证数据为25 702条,利用这些数据进行模型训练与验证。
定义X为用户输入的未知文本,对其去除停用词、标点符号和分词处理,加载word2idx.json和label2idx.json,将输入的X通过word2idx建立每个词的词向量,若没有这个词则用UNK表示。加载保存的模型,通过调用softmax分类器来预测一个句子S的标签y。分类器将隐藏状态h*作为输入,经过softmax层估计出每个类别的概率,即是否为谣言数据的概率,从而实现谣言的识别。
通过上述六个步骤实现基于Attention与Bi-LSTM的谣言识别方法,该方法的主要优势是通过Attention机制和双向LSTM优化神经网络结构,从而能更好地识别谣言信息。尤其是针对谣言二次传播的识别,即使谣言改头换面或换汤不换药的重新发布,也能快速地判别出来,减少臃肿的判别步骤,避免陷入一个缓慢的重新辟谣循环中。
实验平台操作系统为Windows 10+64位,开发环境为Pycharm,编程语言为Python 3.8,CPU为11th Gen Intel(R) Core(TM) i5-11400H@2.70 GHz,内存为16 GB。实验使用TensorFlow1.13.1CPU0构建深度学习模型。
所使用的数据集包括中文数据集和英文数据集。中文数据集的正常新闻数据主要来自搜狐新闻网站,分为健康、社会、科学、传说轶事和其他五类;谣言数据来自微信辟谣助手、新浪微博辟谣中心、流言百科等网站收集的谣言,其中最大的来源是文献[11]中使用的谣言数据,也分为健康、社会、科学、传说轶事和其他五类。英文数据集的正常新闻数据主要来自Twitter,谣言数据通过github收集整理。
由于谣言数据收集过程中存在一定误差,经过筛查过滤掉字符少于20个和两条数据相似度高于60%的数据,共得到可用数据257 024条,将正常新闻数据标记为0,谣言数据标记为1,存储为csv文件进行训练。设置学习率为0.001,神经元个数为256,嵌入层embeddingSize为300,数据流batchSize为128,遗弃保留率dropoutKeepProb值为0.5,测试数据与训练数据的比率为0.8。根据上述配置进行模型训练,训练次数为4,每加载40次训练数据后对模型进行一次评估。在得到训练好的神经网络模型后,根据用户输入的未知文章调用训练好的模型来判断输入文章是否为谣言。
2.3.1有效性测试实验 正向LSTM层的训练过程如图3所示。使用真实值与预测值的偏差情况反映模型的拟合能力,偏差值越小,说明模型的拟合能力越强。
由图3可以看出,在正向LSTM层的训练过程中,偏差值始终在0上下波动,说明模型训练过程较为稳定。同时,在正向LSTM层的训练过程中,按照数据在神经网络中的传递顺序,从遗忘门层到输出门层,偏差值减小,说明随着模型的不断训练,模型的拟合能力在逐渐增强。反向LSTM层的训练过程如图4所示。
图3 正向LSTM层的训练过程Figure 3 Training process of forward LSTM layer
图4 反向LSTM层的训练过程Figure 4 Training process of reverse LSTM layer
由图4可以看出,在反向LSTM层的训练过程中,偏差值始终在0上下波动,说明模型的训练过程较为稳定。同时,在反向LSTM层的训练过程中,按照数据在神经网络中的传递顺序,从遗忘门层到输出门层,偏差值减小,同样说明模型的拟合能力在逐渐增强。
综合图3和图4可知,经过训练后的LSTM层能自动发现那些对于分类起到关键作用的词,形成长期的记忆,从而有效识别谣言的二次传播。
Attention层的训练过程如图5所示。可以看出,随着训练轮次的增加,偏差值在0上下波动,说明训练过程中正常新闻与谣言数据的拟合程度在不断变化,但该值始终维持在区间[-0.15,0.15],说明在训练过程中Attention层表现较为稳定。
图5 Attention层的训练过程Figure 5 Training process of Attention layer
输出层的训练过程如图6所示,该图描述了输入与输出的匹配度。可以看出,训练前期匹配度的波动较大,后期波动放缓且趋近于0,说明训练过程中谣言和正常新闻分类的匹配度逐渐趋于拟合,模型的训练效果较好。
训练过程中损失函数的变化如图7所示。损失函数是用来估量模型的预测值与真实值不一致的程度,损失函数越小,模型效果就越好。由图7可知,损失值在刚开始时很大,随着训练过程的进行逐渐减小,越来越趋近于0,说明该模型的预测值与真实值越来越相近,准确率逐步增高,将该模型用于谣言与正常新闻的分类是可靠的。
2.3.2对比实验 对所设计的基于Attention与Bi-LSTM的谣言识别方法的准确率进行测试,在真实数据集上进行对比实验。使用二分类问题的精确率、准确率、召回率和F1值作为评价指标,定义非谣言为正类,谣言为负类。选择三种基于深度学习的谣言识别方案作为对比方法,分别为基于卷积神经网络的谣言识别方案(CAMI)[16]、基于卷积神经网络与双向LSTM混合的谣言识别方案(CNN-BiLSTM)[17]和基于深度神经网络的谣言识别方案(DNN-RD)[18]。将本文方法与上述三种谣言识别方案进行对比,结果如表1所示。
由表1可以看出,与其他三种方案相比,本文方法在谣言识别方面的准确率最高,可以达到94.3%。此外,本文方法在精确率、召回率以及F1值指标中
表1 不同模型的对比实验结果Table 1 Comparative experimental results of different models
均取得了最好的实验结果。说明与其他方案相比,本文所提出的基于Attention与Bi-LSTM的谣言识别方法在谣言识别方面效果更好,可以实现对所输入谣言信息的准确识别。
在当前严峻的网络谣言传播形势背景下,本文提出一种基于Attention与Bi-LSTM的深度学习谣言识别方法,对用户输入的文本进行判别,及时提醒用户是否阅读到谣言。与传统RNN模型相比,本文方法构建了双层LSTM结构,解决了RNN中的梯度消失问题。此外,引入Attention机制能有效地对长序列编解码的时序问题进行关联,从每个句子中捕获最重要的语义信息,并形成长期的记忆,实现针对谣言二次传播的快速识别,弥补传统RNN算法在长期记忆方面的不足。未来还可利用云计算技术将模型放入云服务器中,当用户浏览新闻时就可以根据当前浏览数据,实时上传到云服务器进行计算,判别用户是否正在阅读谣言,从而实现对互联网中正在传播的新闻进行实时检测,识别出谣言便可立即拦截,由监测平台方对谣言进行处理,从而降低谣言的传播总量。