摘要
本文介绍了一种创新的虚假新闻检测模型,该模型集成了长短期记忆网络(LSTM)与自注意力机制。鉴于信息传播速度不断加快,虚假新闻的广泛传播已对社会造成了诸多负面影响,尤其在疫情期间。因此开发高效的虚假新闻检测技术显得尤为关键。传统文本分类方法在处理新闻内容时存在一定的局限性,而本研究提出的模型通过结合LSTM的序列建模能力和自注意力机制的特征聚焦优势,旨在提升对新闻文本语义信息的理解及特征提取效能。本文的数据集来源多样,涵盖了疫情期间从多个平台收集的新闻数据、澎湃新闻网的真实新闻数据、从中国互联网平台爬取的辟谣新闻数据以及微信公众号发布的谣言数据。数据整合后,构建基于自注意力机制的LSTM模型(DoubleCheck),用于虚假新闻的分类与预测。为保证模型具备一定的通用性和鲁棒性,实验开始前,通过计算新闻样本之间的余弦相似度来去除冗余数据。实验结果显示,该模型在多个评估指标上表现出色,特别是在准确性、召回率及F1分数方面均有显著提高。这一结果不仅验证了自注意力机制结合LSTM架构在识别虚假信息方面的有效性,同时也为未来相关研究开辟了新路径,有助于更好地应对日益复杂的虚假新闻传播挑战,从而维护信息安全与社会稳定。关键词:数据爬取,虚假新闻检测,DoubleCheck,自注意力机制,LSTM,信息安全。
研究意义
谣言会对人们的行为和态度产生重大影响,尤其是在社交媒体时代,虚假新闻可以迅速传播并误导公众舆论。疫情期间,COVID-19 大流行只会加剧这一问题,如下表所示,“吸烟可以预防非典,因为烟油可以阻挡病毒进入肺细胞”、“喝高度白酒、蒸桑拿,可以抵抗新型冠状病毒”等谣言新闻标题,很容易造成群众的认知误导,因此,识别并应对社交媒体平台上的谣言已成为一个亟待解决的重要问题。在本文中,我们重点关注跨多个社交媒体平台的数据分析,以确保所构建模型的鲁棒性和有效性。新闻来源 | 新闻标题 |
---|---|
COVID-19-rumors | 吸烟可以预防非典,因为烟油可以阻挡病毒进入肺细胞 |
COVID-19-rumors | 喝高度白酒、蒸桑拿,可以抵抗新型冠状病毒 |
微信公众号 | 安踏,你代表不了中国体育精神风貌 |
数据获取
爬虫
在数据集准备期间,首先考虑到的数据获取方法是爬取网页的新闻数据,在本文中,爬取了中国互联网联合辟谣平台的联动要闻数据和部分微信公众号谣言发文。中国互联网联合辟谣平台
通过遍历联动要闻下新闻标题对应的url进入对应新闻的正文信息页面,在遍历过程中需要进行动态翻页,保证数据爬取的完整性,进入正文信息页后,逐段爬取新闻的正文内容,最后整合为中国互联网新闻文件(见附件)。由于平台本身的辟谣属性,标记列全部设置为“真”。微信公众号谣言发文
对微信公众号中涉及谣言的文章URL进行了全面遍历,并对这些文章的正文内容进行了爬取,以收集相关谣言文章的具体信息。值得注意的是,由于部分文章因被平台识别为谣言而遭到处理,或是由原作者自行删除,导致部分URL已失效,无法成功获取其正文内容。经过筛选与验证后,最终成功收集到超过2000篇可访问的公众号文章正文(见附件)。开放数据集
除了通过网络爬虫获取新闻数据之外,另一种可行的数据获取方法是从开放数据平台上直接下载由用户或机构发布的数据集。常见的开放数据平台包括CSDN、Kaggle 和 GitHub 等。本文从 GitHub 平台上收集了与 COVID-19 相关的谣言新闻数据,并从澎湃新闻网站获取了真实新闻数据(见附件)。这些数据来源的多样化有助于增加数据样本的数量和多样性,从而提升模型预测结果的普适性和准确性。将收集到的数据整合至单一文件中,并设定一套标准化的规则,确保文件仅包含以下关键信息:新闻来源、标题、内容、发布时间及验证标识。具体而言,若某条新闻被标记为0,则表示该新闻被判定为虚假信息;反之,若其标识为1,则意味着该新闻被认为是真实可信的。
For example:
source | title | content | label | time |
---|---|---|---|---|
COVID-19-rumors | 吸烟可以预防非典,因为烟油可以阻挡病毒进入肺细胞 | 网上流传的“烟油保护层”的理论称:烟油可以覆盖在肺细胞表面,相当于一个紧密的防护层;病毒进了… | 0 | 2020-01-21 |
最终整理得到数据共11480条,其中假新闻占比为22.5%,长度大于100的新闻占比为96.8%。
# 加载数据
data = pd.read_excel(r'D:\\大数据应用实践\\news\\news_data_all.xlsx')
# 数据验证
print(f'数据集大小: {
data.shape}')
print(f'数据集列名: {
data.columns}')
print(f'假新闻占比: {
data[data["label"] == 0].shape[0] / data.shape[0]}')
print(f'长度大于100的新闻占比: {
data[data["content"].str.len() > 100].shape[0] / data.shape[0]}')
运行结果:
数据集大小: (11480, 5)
数据集列名: Index(['source', 'title', 'content', 'label', 'time'], dtype='object')
假新闻占比: 0.22534843205574914
长度大于100的新闻占比: 0.9680313588850175
数据预处理
短文本剔除
针对已整理的新闻数据,对篇幅较短的新闻进行筛除。此举旨在防止在后续处理中,当输入固定长度的索引序列时,出现某些序列包含大量零值填充的情况,从而可能对模型的学习性能产生不利影响。# 数据预处理-1 删除长度小于100的新闻
data = data[data['content'].str.len() > 100]