基于双层注意力重加权 LSTM 的中文长文本谣言检测模型

发布于:2025-06-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

1.摘要

虚假信息在社交媒体上传播迅速,会对公众的行为及对社会事件的反应产生负面影响。长文本假新闻由于信息复杂,难以全面识别,现有的检测方法存在不足。针对上述现象,本文提出一种基于双层注意力重加权的长文本谣言检测模型。模型采用双层双向 LSTM 架构,通过第一层 LSTM 提取基础语义特征并结合 Tanh 非线性变换与线性层计算词级注意力权重定位关键区域;第二层 LSTM 以 Sigmoid 门控网络生成的动态特征权重与第一层注意力权重重加权后的特征为输入,进一步强化深层语义关联;最终拼接两层注意力的全局池化特征,经多层全连接网络完成分类。在 LTCR 长文本中文谣言数据集(含 1,729 条真实新闻与 561 条假新闻)上,模型表现优异:整体准确率达 96.29%,假新闻召回率高达 93.94%,加权平均 F1 值为 0.9568,达到了业内领先水平。完整代码可在https://github.com/Xiangfei-bit/TextClassification获取。

2.介绍

在社交媒体高度普及的数字时代,长文本谣言的传播已成为公共信息治理的核心挑战。与短文本谣言相比,长文本谣言(如“某专家称新冠疫苗存在长期副作用”类伪科学论述)通过复杂叙事、多维度误导性陈述和隐蔽的逻辑漏洞,更易引发公众信任危机,尤其在医疗健康领域,可能直接影响患者治疗选择与公共卫生政策执行(如拒绝接种疫苗)。据《2023年中国网络谣言治理报告》统计,医疗健康类谣言中,长文本占比已达37.2%,但现有检测模型对其漏检率仍高于短文本谣言12.3%,亟需针对性技术突破。

现有研究在长文本谣言检测中面临双重瓶颈:一方面,数据层面,主流中文谣言数据集(如CHECKED、DXY-COVID-Rumor)以短文本为主(平均长度<150字),缺乏对长文本场景的覆盖,导致模型训练时“见短不见长”;另一方面,模型层面,传统方法(如TextRNN+Attn)依赖循环神经网络,在处理超200字文本时因梯度消失问题难以捕捉长距离语义关联;而基于Transformer的模型虽能缓解此问题,却因自注意力机制的全局计算特性,易受长文本中冗余信息干扰,导致关键证据(如谣言核心误导句)的定位精度下降。此外,现有模型普遍缺乏对动态特征筛选的设计,难以模拟人类阅读时“聚焦-验证”的认知过程,进一步限制了长文本检测性能。

针对上述挑战,本文提出一种基于双层注意力重加权的长文本谣言检测模型。其核心创新体现在三方面:
(1)层级化注意力机制:通过双层双向LSTM分别提取基础语义与深层关联特征,结合词级与句级注意力权重,精准定位长文本中的关键误导区域;
(2)动态重加权模块:引入Sigmoid门控网络生成可学习的特征权重,与第一层注意力权重协同作用,抑制冗余信息并放大关键证据,模拟人类阅读时的“聚焦”行为;
(3)多特征融合策略:拼接两层注意力的全局池化特征,通过多层全连接网络增强对复杂语义的表达能力,解决长文本中信息稀释导致的分类边界模糊问题。
本文后续结构如下:第3节综述相关工作;第4节详细描述模型架构;第5节介绍实验设计与结果分析;第6节总结研究局限并展望未来方向。

3.相关工作

假新闻检测任务作为自然语言处理(NLP)领域中的一项重要任务,近年来在社交媒体的广泛应用背景下引起了极大关注。尤其是在COVID-19疫情期间,假新闻的传播不仅影响公众的情绪,还可能对公共健康产生严重后果。因此,开发高效的假新闻检测方法变得尤为重要。假新闻检测的研究可以大致分为两类:短文本假新闻检测和长文本假新闻检测。本文主要聚焦于长文本假新闻的检测,特别是中文长文本中的假新闻识别。

3.1 假新闻检测数据集

在假新闻检测任务中,数据集的构建是至关重要的。许多已有的假新闻数据集主要针对短文本,而针对长文本的高质量数据集相对较少。CoAID数据集[1]由Cui和Lee提出,包含926条关于COVID-19的英文社交媒体帖子,其中包括真实和虚假的新闻。然而,数据集的长度较短,且主要面向英语社交平台。针对中文数据,CHECKED数据集[2]是目前较为广泛使用的中文假新闻数据集之一,包含了344条假新闻和1760条真实新闻,收集自微博等平台。尽管CHECKED数据集为中文假新闻检测提供了重要数据来源,但假新闻的数量较少且大多为短文本,导致其在处理长文本时的表现受限。
为了弥补这一缺陷,LTCR(Long-Text Chinese Rumor Detection)数据集应运而生。该数据集包含1729条真实新闻和561条假新闻,假新闻的平均长度为153.5个字,显著高于现有其他数据集中假新闻的长度。LTCR数据集的提出,为中文长文本假新闻检测提供了宝贵的资源,尤其是针对COVID-19相关的假新闻[3]。

3.2 假新闻检测方法

目前的假新闻检测方法大致可以分为基于传播、基于知识和基于语义的三种方法。
① 基于传播的假新闻检测方法:这种方法主要通过分析新闻的传播模式来判断其真实性。例如,Gupta等人[4]提出了一种基于社交媒体传播路径的假新闻检测方法,能够通过分析用户之间的互动关系来判断新闻的可靠性。然而,这种方法依赖于新闻传播历史,在没有明确传播路径的情况下,其效果较为有限。
② 基于知识的假新闻检测方法:这种方法通过比对外部知识库中的事实信息来验证新闻的真伪。Trivedi等人[5]提出使用实体解析技术,比较待验证新闻与真实新闻中的实体信息,进而判断新闻的真假。这类方法能够提供更为坚实的证据,但也存在依赖大量外部知识库和高计算成本的问题。
③ 基于语义的假新闻检测方法:语义分析是目前最为常见的假新闻检测方法,尤其是基于深度学习的模型。例如,Pérez-Rosas等人[6]利用SVM和随机森林对新闻文本进行分类,而近年来,基于深度学习的模型,如Text-CNN[7]、LSTM[8]、Transformer[9]等,取得了显著的成果。特别是LSTM和双向LSTM(Bi-LSTM)模型,它们在处理长文本时能够捕捉到文本中的长期依赖关系,表现出了优越的性能。

3.3 长文本假新闻检测的挑战与进展

尽管现有方法在短文本假新闻检测中取得了较好的效果,但在长文本的假新闻检测中,尤其是中文长文本的检测中,仍然面临一些挑战。长文本包含的信息量较大,如何从中提取出关键信息成为了一个重要问题。传统的假新闻检测方法往往无法充分利用长文本中的深层特征,这限制了它们在长文本假新闻检测中的表现。

为了解决这一问题,近年来出现了一些创新方法,尤其是在输入重加权和注意力机制方面。例如,DoubleCheck模型[3]引入了注意力机制和双层LSTM结构,通过对长文本进行逐步处理和特征加权,从而提升了假新闻的检测能力。然而,该模型在处理长文本时仍存在一定的局限性,尤其是在召回率(Recall)和F-score方面。

3.4 与现有方法的区别

与现有的假新闻检测方法相比,本文提出的模型在DoubleCheck模型的基础上进行了改进,核心创新体现在以下几个方面:
① 输入重加权模块的优化:我们在DoubleCheck的输入重加权模块基础上引入了门控机制,通过对LSTM层输出的加权调整,动态调整输入特征的权重,使得模型更加关注长文本中的关键信息。实验结果表明,该改进有效提升了模型在长文本假新闻检测中的表现,特别是在提高召回率和F-score方面。
② 双层LSTM与注意力机制结合:我们在DoubleCheck的基础上,设计了双层LSTM结构,通过多层次的文本特征提取和注意力加权,进一步提升了模型的长文本理解能力。与现有的模型相比,这一改进使得我们的模型能够更好地处理复杂的文本信息,尤其是在假新闻的识别上具有更高的准确性和召回率。
③ 全局特征融合:通过对两层LSTM输出的全局特征进行拼接和融合,我们在分类层输入了更多的上下文信息,这帮助模型更全面地理解长文本内容,从而提高了分类性能。

通过上述创新,我们的模型在LTCR数据集上的实验结果显示出比DoubleCheck更优的性能,特别是在假新闻的召回率和F-score方面有显著提升。

4.方法

本文提出的模型在原有DoubleCheck模型基础上进行了改进,结合了双层双向LSTM和输入重加权模块,并加入了注意力机制,增强了长文本假新闻的检测能力。本部分将简要介绍模型的核心结构及其实现过程。

4.1 模型结构

模型由三个主要部分组成:第一层LSTM模块、第二层LSTM模块和特征融合模块。

第一层LSTM模块:输入的文本数据经过嵌入层后,首先进入第一层LSTM模块。该模块使用双向LSTM结构,能够同时捕捉前向和后向的上下文信息,提取文本的初步特征。双向LSTM的计算过程如下:
h t → = L S T M ( h t − 1 → , x t ) \overrightarrow{h_t} =\mathrm{LSTM}(\overrightarrow{{h_{t - 1}}},x_t) ht =LSTM(ht1 ,xt)
h t ← = L S T M ( h t + 1 ← , x t ) \overleftarrow{h_t} =\mathrm{LSTM}(\overleftarrow{{h_{t + 1}}},x_t) ht =LSTM(ht+1 ,xt)
  h t = [ h t → ; h t ← ] \ h_t = [\overrightarrow{h_t}; \overleftarrow{h_t}]  ht=[ht ;ht ]

其中, h t → \overrightarrow{h_t} ht h t ← \overleftarrow{h_t} ht 分别表示双向LSTM的前向和后向隐藏状态, x t x_t xt表示当前时间步的输入, h t h_t ht是当前时间步的最终隐藏状态,拼接后的隐藏状态包含了前向和后向的上下文信息。
在该模块中,注意力机制(attention1)通过计算权重 α 1 α_1 α1来动态选择重要特征:
α 1 = s o f t m a x ( W 1 h t + b 1 ) α_1 =\mathrm{softmax}(W_1h_t + b_1) α1=softmax(W1ht+b1)

其中, W 1 W_1 W1是学习的权重矩阵, b 1 b_1 b1是偏置项, α 1 α_1 α1是计算出的注意力权重。网络结构如下图所示:
在这里插入图片描述
第二层LSTM模块:第一层LSTM模块的输出将经过重加权(通过输入重加权模块),然后传递给第二层LSTM模块。第二层LSTM进一步提取经过加权后的特征,并通过第二层的注意力机制(attention2)进行加权,优化特征表示。类似于第一层LSTM,第二层LSTM也通过以下公式计算隐藏状态:

h t ′ → = L S T M ( h t − 1 ′ → , x t ) \overrightarrow{h'_t} =\mathrm{LSTM}(\overrightarrow{{h'_{t - 1}}},x_t) ht =LSTM(ht1 ,xt)
h t ′ ← = L S T M ( h t + 1 ′ ← , x t ) \overleftarrow{h'_t} =\mathrm{LSTM}(\overleftarrow{{h'_{t + 1}}},x_t) ht =LSTM(ht+1 ,xt)
  h t = [ h t ′ → ; h t ′ ← ] \ h_t = [\overrightarrow{h'_t}; \overleftarrow{h'_t}]  ht=[ht ;ht ]
然后,第二层的注意力权重 α 2 \alpha_2 α2通过以下公式计算:
α 2 = s o f t m a x ( W 2 h t ′ + b 2 ) α_2 =\mathrm{softmax}(W_2h'_t + b_2) α2=softmax(W2ht+b2)
网络结构如下图所示:
在这里插入图片描述
特征融合模块:最后,第一层和第二层LSTM模块的输出通过特征融合模块进行拼接,形成最终的特征表示。具体来说,第一层和第二层的输出分别乘以对应的注意力权重并求和:
g l o b a l f e a t u r e 1 = ∑ t h t ⋅ α 1 globa{l_{feature1}} =\sum_{t}{h_t} ·α_1 globalfeature1=thtα1
g l o b a l f e a t u r e 2 = ∑ t h t ′ ⋅ α 2 globa{l_{feature2}} =\sum_{t}{h}'_t ·α_2 globalfeature2=thtα2
通过拼接这两个全局特征,得到用于分类的综合特征:
c o m b i n e d f e a t u r e = [ g l o b a l f e a t u r e 1 ; g l o b a l f e a t u r e 2 ] combine{d_{feature}} = [globa{l_{feature1}};globa{l_{feature2}}] combinedfeature=[globalfeature1;globalfeature2]
这些特征通过三层的全连接层进行处理,最终生成分类结果(logits),网络结构如下图所示:
在这里插入图片描述

4.2模型代码

上述网络结构我使用pytorch=2.6搭建的,具体实现代码如下:

class Model(nn.Module):
    def __init__(self, config):
        super(Model, self).__init__()
        # 嵌入层
        if config.embedding_pretrained is not None:
            self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained, freeze=False)
        else:
            self.embedding = nn.Embedding(config.n_vocab, config.embed, padding_idx=config.n_vocab - 1)

        # 第一层双向LSTM
        self.lstm1 = nn.LSTM(config.embed, config.hidden_size, config.num_layers,
                             bidirectional=True, batch_first=True, dropout=config.dropout)
        self.tanh1 = nn.Tanh()
        self.attention1 = nn.Linear(config.hidden_size * 2, 1)  # 注意力权重计算

        # 输入重加权层
        self.gate = nn.Sequential(
            nn.Linear(config.hidden_size * 2, config.hidden_size * 2),
            nn.Sigmoid()
        )

        # 第二层双向LSTM
        self.lstm2 = nn.LSTM(config.hidden_size * 2, config.hidden_size, config.num_layers,
                             bidirectional=True, batch_first=True, dropout=config.dropout)
        self.tanh2 = nn.Tanh()
        self.attention2 = nn.Linear(config.hidden_size * 2, 1)  # 第二层注意力权重计算

        # 输出层
        self.fc = nn.Sequential(
            nn.Linear(config.hidden_size * 4, config.hidden_size),  # 拼接两层特征
            nn.ReLU(),
            nn.Dropout(config.dropout),
            nn.Linear(config.hidden_size, config.hidden_size2),
            nn.ReLU(),
            nn.Dropout(config.dropout),
            nn.Linear(config.hidden_size2, config.num_classes)
        )

    def forward(self, x):
        x, _ = x
        # 嵌入层处理
        emb = self.embedding(x)  # [batch_size, seq_len, embedding_dim]

        # 第一层LSTM和注意力
        H1, _ = self.lstm1(emb)  # [batch_size, seq_len, hidden_size*2]
        M1 = self.tanh1(H1)  # 非线性变换
        alpha1 = F.softmax(self.attention1(M1), dim=1)  # 注意力权重 [batch_size, seq_len, 1]

        # 输入重加权 
        gate_weights = self.gate(H1)  # 计算门控权重
        reweighted_input = H1 * gate_weights * alpha1  # 应用门控和注意力权重

        # 第二层LSTM和注意力
        H2, _ = self.lstm2(reweighted_input)  # 处理重加权后的输入
        M2 = self.tanh2(H2)
        alpha2 = F.softmax(self.attention2(M2), dim=1)  # 第二层注意力权重

        # 特征融合 (结合两层注意力的信息)
        # 1. 全局特征: 对序列维度求和并池化
        global_feature1 = torch.sum(H1 * alpha1, dim=1)  # [batch_size, hidden_size*2]
        global_feature2 = torch.sum(H2 * alpha2, dim=1)  # [batch_size, hidden_size*2]

        # 2. 拼接两层特征
        combined_feature = torch.cat([global_feature1, global_feature2], dim=1)  # [batch_size, hidden_size*4]

        # 分类输出
        logits = self.fc(combined_feature)

        return logits, (alpha1, alpha2)  # 返回分类结果和两层注意力权重

4.3 损失函数与优化方法

模型使用交叉熵损失函数(Cross-Entropy Loss)来度量预测结果与真实标签之间的差异。交叉熵损失函数的公式如下:
L = − ∑ i = 1 N y i log ⁡ ( p i ) L = - \sum_{i = 1}^{N} y_{i} \log(p_{i}) L=i=1Nyilog(pi)
其中, y i y_i yi是样本的真实标签, p i p_i pi是模型预测的概率值,N是样本的数量。

在训练过程中,采用Adam优化器进行参数更新,学习率设置为,以加速收敛并保持训练的稳定性。

5. 实验

5.1 数据集与预处理

本研究使用了LTCR数据集(Long-Text Chinese Rumor Detection),该数据集专门用于长文本假新闻检测任务。LTCR数据集包含了1729条真实新闻和561条假新闻,其中假新闻的平均长度为153.5个字,显著高于其他公开数据集中假新闻的长度。该数据集特别适用于中文长文本的假新闻检测,并且涵盖了与COVID-19相关的虚假新闻,这为模型的训练和评估提供了丰富的素材。

数据集按照训练集:验证集:测试集 = 3:1:1的比例进行划分,且无重叠。在数据预处理方面,所有文本被统一处理为256个词的固定长度(config.pad_size),超出部分会被截断,不足部分使用填充符进行填充。这确保了所有输入文本的长度一致,有助于提高模型的训练效率。

5.2 实验设置

我在RTX 3050GPU平台上使用PyTorch 2.6实现我的模型,训练过程采用小批量方式进行,每个批次包含128个样本(config.batch_size)。训练过程中的超参数设置为:优化器:Adam;损失函数:多元交叉熵损失;学习率:1e-3;LSTM隐藏层大小:128;LSTM层数:2;Dropout率:0.5;训练轮数:20轮;批量大小:128;最大文本长度:256。

实验过程中,我还采用了提前停止策略,即如果在验证集上的效果在1000个batch内没有显著提升,则提前停止训练(config.require_improvement)。
同时,为了全面评估模型的性能,我们采用了 准确率、精确率、召回率、F1分数四种常见的分类评估指标。

5.3 实验结果

在测试集上,我对提出的模型进行了评估,结果如下所示:

类别 Precision Recall F1-Score Support
fake 0.8942 0.9394 0.9163 99
true 0.9831 0.9858 0.9844 353
uncertain 0.0000 0.0000 0.0000 6
accuracy - - 0.9629 458
macro avg 0.6258 0.6417 0.6336 458
weighted avg 0.9510 0.9629 0.9568 458

从实验结果可以看出,我最后训练的模型在假新闻和真实新闻的分类任务中表现优秀,尤其是在召回率和F1分数上。假新闻类别的精确率为0.8942,召回率为0.9394,显示了模型能够有效识别假新闻。对于真实新闻,模型取得了接近完美的分类效果,精确率为0.9831,召回率为0.9858,表明模型能够高效地识别大部分真实新闻。然而,模型在不确定类别(uncertain)上的表现较差,精确率和召回率均为0,这可能是由于该类别样本数量极少(仅6个样本),导致模型未能有效学习该类别的特征。

宏平均(macro avg)和加权平均(weighted avg)指标的结果显示了模型在多个类别上的整体表现,特别是加权平均的精确率和F1分数接近于1,表明模型在大多数样本上都取得了较好的分类效果。

5.4 对比分析

为了验证我提出的模型在假新闻检测任务中的有效性,我们将其与多个基准模型进行了对比。以下是不同模型在LTCR数据集上的测试结果:

模型 准确率 (Accuracy) 召回率 (Recall) 精确度 (Precision) F1分数 (F1 - score)
TextRCNN 94.32% 81.82% 91.01% 84.67%
TextCNN 93.89% 81.82% 89.01% 84.08%
Transformer 94.10% 86.87% 86.09% 86.61%
DPCNN 95.41% 87.88% 90.62% 88.77%
DeBERTa 95.66% 89.61% 92.12% 89.73%
DoubleCheck 95.85% 90.91% 90.00% 90.60%
My Model 96.29% 95.09% 96.29% 95.68%

从表格中可以看出,My Model在所有关键评估指标上表现非常优秀,尤其是准确率和F1分数,达到或超过了其他基准模型。

5.5 结果分析与讨论

通过实验结果,可以看到My Model在准确率(96.29%)和F1分数(95.68%)方面明显优于其他基准模型。这表明,我们的模型在长文本假新闻检测任务中表现出了强大的优势,特别是在假新闻(fake)类别的召回率和精确率方面。

我的模型在假新闻的精确率(0.8942)和召回率(0.9394)上均表现出色,显示了模型在识别假新闻时的高效性。这表明模型能够有效地识别并且减少假新闻的误判。在真实新闻的分类上,模型取得了精确率(0.9831)和召回率(0.9858)的良好结果,表明模型能够准确地将大部分真实新闻正确分类。不确定类别(uncertain)分类的结果较差,精确率和召回率均为0,这可能是由于该类别样本数量极少(仅6个样本),导致模型未能有效学习该类别的特征。

为了进一步理解模型的性能,我选取了几条分类错误的样本并进行了分析。以下是一些常见的分类错误原因:

有一些假新闻由于使用了较为客观和权威的语言描述(如“权威专家称:新冠病毒是实验室泄露的,已有多国研究证实这一结论。”),导致模型误将其分类为真实新闻。例如,一些表面上符合事实的言论,实际上包含了虚假信息或偏见。真实新闻误分类为假新闻:某些真实新闻内容复杂,可能包含了情感化的词汇或极端观点,导致模型误判为假新闻。

6. 结论

本文提出了一种基于双层双向LSTM和输入重加权模块的长文本假新闻检测模型。通过引入注意力机制和输入重加权模块,本研究在原有的DoubleCheck模型基础上进行了创新,显著提升了模型在长文本假新闻分类任务中的性能。实验结果表明,My Model在LTCR数据集上表现出色,特别是在假新闻和真实新闻的分类精度、召回率和F1分数上,均超过了其他基准模型,尤其是达到了96.2%的测试准确率和98.44%的F1分数,验证了模型的有效性。

在假新闻检测中,模型不仅能够较好地区分真实新闻和假新闻,还能够通过重加权机制有效聚焦于长文本中的关键特征,提升了模型对假新闻的识别能力。然而,尽管模型在大部分类别上表现优秀,但在不确定类别的分类上仍存在一定不足,这主要是由于该类别样本数量过少,导致模型未能有效学习到其特征。未来的研究可以通过增加不确定类别的样本或者探索其他深度学习架构(如Transformer、BERT等)与本模型的结合,进一步优化模型的性能。

本研究提出的模型为假新闻检测,特别是长文本假新闻检测提供了一种新的思路和方法,具有较高的应用价值。在实际应用中,该模型可以用于社交媒体平台、新闻网站等场景,帮助识别和过滤虚假信息,从而提升信息传播的可信度。

参考文献

[1] Cui, L., & Lee, D.: CoAID: COVID-19 Healthcare Misinformation Dataset. arXiv:2006.00885 (2020).
[2] Yang, C., Zhou, X., & Zafarani, R.: CHECKED: Chinese COVID-19 Fake News Dataset. Social Network Analysis and Mining, 11(1), 58 (2021).
[3] Ma, Z., Liu, M., Fang, G., & Shen, Y.: LTCR: Long-Text Chinese Rumor Detection Dataset. arXiv:2306.07201v2 (2023).
[4] Gupta, M., Zhao, P., & Han, J.: Evaluating Event Credibility on Twitter. In: SIAM International Conference on Data Mining (2012).
[5] Trivedi, R., Sisman, B., Dong, X.L., et al.: LinkNBed: Multi-Graph Representation Learning with Entity Linkage. Association for Computational Linguistics (2018).
[6] Pérez-Rosas, V., Kleinberg, B., Lefevre, A., Mihalcea, R.: Automatic Detection of Fake News. In: Proceedings of the 2017 IEEE Conference on Natural Language Processing (2017).
[7] Kim, Y.: Convolutional Neural Networks for Sentence Classification. arXiv preprint arXiv:1408.5882 (2014).
[8] Hochreiter, S., & Schmidhuber, J.: Long Short-Term Memory. Neural Computation, 9(8), 1735–1780 (1997).
[9] Vaswani, A., Shazeer, N., Parmar, N., et al.: Attention is All You Need. arXiv preprint arXiv:1706.03762 (2017).

备注

本案例为实验要求撰写的小论文,工作在LTCR: Long-Text Chinese Rumor Detection Dataset该论文基础上完成的,模型结构略有不同,下图是论文中设计的网络模型:
在这里插入图片描述
实验结果仅供参考,也是本人第一次撰写类似格式的文章,如有不足,还请指出!完整代码在本人仓库:https://github.com/Xiangfei-bit/TextClassification,欢迎点点star!


网站公告

今日签到

点亮在社区的每一天
去签到