谣言检测论文(二)

论文分享之

DDGCN: Dual Dynamic Graph Convolutional Networks for

Rumor Detection on Social Media

Mengzhu Sun , Xi Zhang , Jiaqi Zheng , Guixiang Ma
The Thirty-Sixth AAAI Conference on Artificial Intelligence (AAAI- 22)

        简介:这是一篇研究社交媒体谣言检测的论文。该论文提出了一种基于双动态图卷积网络(DDGCN)的方法来检测社交媒体上的谣言。DDGCN模型结合了两个图卷积网络,分别处理动态事件和用户交互两个方面的数据。其中动态事件图卷积网络使用事件和用户之间的关系来学习事件和用户的表示,而用户交互图卷积网络使用用户之间的交互关系来学习用户的表示。通过结合这两个网络的表示,DDGCN模型可以更准确地检测谣言,并在谣言检测方面取得了较好的性能

摘要重点:虽然一些谣言检测模型利用了消息传播的结构或时间信息,但很少将两者结合起来建模,从而兼顾两者的优点。此外,该方法也不涉及与评论相关的知识信息的动态性。为此,文中提出了一种新的双动态图卷积网络DDGCN,可以在统一的框架内建模消息传播中的动态性以及知识图谱中背景知识的动态性。具体而言,采用两个图卷积网络在不同的时间阶段捕获上述两类结构信息,并将其与时间融合单元相结合。这样可以以更细粒度的方式学习动态事件表示,并逐步聚合它们以捕捉级联效应,从而更好地检测谣言。

1 Introduction

1.1 传统的谣言检测方法:

  1. 基于文本内容的文本挖掘
  2. 基于特征工程(Castillo, Mendoza, and Poblete 2011;Kwon et al. 2013; Liu et al. 2015; Ma et al. 2015)
  3. 基于深度学习(Ma et al. 2016; Ruchansky, Seo, and Liu.2017)

1.2 基于空间结构的方法

最近的研究表明,以传播树或图结构建模的传播模式可以为区分谣言和非谣言提供有用的线索。因此,出现基于空间结构的方法:

  1. 基于核的模型(Wu, Yang, and Zhu 2015;Ma, Gao, and Wong 2017)
  2. 递归神经网络(Ma, Gao, and Wong 2018.Rumor detection on twitter with tree-structured recursive neural networks)
  3. 基于图的模型(Huang et al. 2019.Deep structure learning for rumor detection on twitter;Bian et al. 2020.Rumor detection on social media with bi-directional graph convolutional networks)

        然而,这些基于空间结构的方法在很大程度上忽略或过度简化了与消息传播相关的时间结构。

        近期研究强调了将时间性纳入谣言检测的重要性:可以为消息流建模更细粒度的动态,实现更好的检测性能,特别是在早期检测情况下。

        时间结构是指沿时间轴的(回复或转发)消息的顺序和间隔,可用于进一步区分扩散模式

1.3 在谣言检测中引入额外的知识

  1. (Zhang et al. 2019.Multi-modal knowledge-aware event memory network for social media rumor detection;
  2. Wang et al. 2020.Fake News Detection via Knowledge-driven Multimodal Graph Convolutional Networks;
  3. Hu et al. 2021.Compare to The Knowledge: Graph Neural Fake News Detection with External Knowledge.(CompareNet))

        同时,另一个平行的工作重点是引入额外的知识(如知识图谱)来识别谣言,通常利用与帖子内容相关的知识信息来补充语义信息,从而提高帖子的高级表示

        与传统的分类任务不同,谣言检测模型必须处理许多新的、未见过的事件。由于社交媒体上发布的内容有限,额外的背景知识可以极大地帮助判断帖子的可信度,这也是人类判断的常用范式。然而,这些基于知识的方法大多只利用源文章中的背景知识信息,而忽略了来自用户评论中的背景知识信息,而忽略了来自用户评论中的背景知识信息。此外,知识信息也会随着信息的传播而演变。然而,这种知识动态并没有被现有的模型所利用。

1.4 本文模型提出的背景

        本文目标是在一个统一的框架中同时对消息传播中的动态以及相关背景知识的动态进行建模,以便及时检测谣言。

        为了有效地编码传播消息和知识实体之间的结构信息,作者团队希望使用图卷积网络(GCNs)来学习它们的高级图表示。然而,传统的GCN模型无法跟踪演进的图表示。

什么是GCN?

是一种用于处理图结构数据的神经网络。它使用卷积操作来聚合来自图中相邻节点的信息,并学习节点的表示,这些节点考虑到它们的单独特征以及它们与图中其他节点的关系。GCNs已被用于各种应用,包括节点分类、链路预测和推荐系统。

        因此,本文提出了一种新的双动态图神经网络(DDGCN)框架,该框架包括两个耦合的动态gcn,一个操作于演化传播图,以捕获消息的空间和时间结构作为动态传播表示,另一个操作于与消息相关的演化知识图谱,以学习动态知识表示。

本文的贡献:

  1. 提出一种新型的双动态GCN,通过对传播结构和知识实体结构的动态建模,
  2. 在每个时间阶段用时间融合单元进行增量融合。
  3. 首次考虑了知识信息的动态特性。
  4. 实验表明,本文提出的方法不仅优于两个真实世界数据集上的强基线,而且在早期发现谣言的能力也很好

2 相关工作

2.1 基于空间结构的谣言检测

        早期的方法依赖于手工制作的特征工程来提取空间结构特征(Wu, Yang, and Zhu 2015;Ma, Gao, and Wong 2017)

        最近,人们提出了一系列深度神经网络来捕捉传播模式。Ma等人(Ma, Gao, and Wong 2018)提出了一种基于树的递归神经网络来捕获内容语义和传播线索。Huang et al. (Huang et al. 2019)采用GCNs捕获消息传播的空间结构。

        Bian et al. (Bian et al. 2020)提出了一种新的双向图模型,通过对谣言自上而下和自下而上的传播进行操作。Song et al. (Song et al. 2021)提出了一种对立感知模型,在考虑传播结构中的响应位置的情况下生成对抗响应。

2.2 基于时间结构的谣言检测

传统的方法依然是人为构造特征

        深度神经网络同样能够用来捕捉有效的时序结构。

  1. Ma et al. (Ma et al. 2016)利用基于循环神经网络的模型来捕捉传播过程中语义的变化。
  2. Liu等人(Liu和Wu 2018)通过结合循环网络和卷积网络对时间结构进行建模。
  3. Xia等人(Xia, Xuan, and Yu 2020)提出了一种基于细粒度事件状态检测和分割的状态独立和随时间变化的谣言检测网络。
  4. Huang et al. (Huang et al. 2020)提出了一种用于谣言检测的时空结构神经网络

        然而,大多数基于空间结构或时间结构的方法只考虑单一结构信息,没有一种方法涉及到外部知识来促进任务的完成

2.3 知识增强检测方法

        基于知识的谣言检测模型可以分为两类:

  1. 一项工作侧重于事实核查,通常使用从帖子内容中提取的结构三元组(head, relation, tail)与KG中的可信三元组进行比较(Ciampaglia et al. 2015;Fionda and Pirr 'o 2018;潘等人。2018;Shi and Weninger 2016)然而,这种事实核查方法由于缺乏基本事实知识可供参考,无法满足许多现实场景
  2. 另一项工作是利用外部知识来补充帖子内容,为谣言检测提供更好的表述。
    1. Zhang et al. (Zhang et al. 2019)利用多模态知识感知表示和事件不变特征来形成事件表示。
    2. Cui et al. (Cui et al. 2020)整合了文章-实体二部图和医学知识图,以更好地建模新闻的嵌入。
    3. KMGCN (Wang et al. 2020)提出对文本、图像和知识概念之间的全局结构建模,以获得全面的语义表示。
    4. CompareNet (Hu et al. 2021)通过实体将新闻文章与知识库(KB)进行比较,以检测假新闻。

        但是,这些方法既不考虑评论中的知识信息,也不考虑知识信息的动态性,这两者在本文工作中得到了充分的利用。

2.4 动态GCN

        GCNs已用于各种基于图的任务,也已通过对帖子、评论和用户之间的结构建模,证明了其在谣言检测方面的有效性(Yang et al. 2020;Bian et al. 2020)。但是,这些模型没有考虑信息传播过程中的时间信息。一个相关的工作是预测社会事件的动态GCN (Deng, Rangwala, and Ning 2019),但它不考虑知识信息,只配备了一个动态GCN。

3方法

3.1 定义

  1. 事件集

  2. 文章和评论内容的集合

    为源推文文本,为i推文的第j条评论,为事件i中帖子和评论的数量,可以被看作
  3. 帖子相对发布时间序列
  4. 将文章和评论集与时间集相组合得到事件集的表示形式为

  5. 将事件的时间线分成个阶段,每个时间段内时间间隔一样为
  6. 因此,事件i的第r个子事件可以表示为

    为了便于理解,在表1中列出了论文中使用的重要数学符号

3.2 模型框架

3.2.1 动态图结构

3.2.1.1 动态传播图

        对于每个事件,将一系列的传播图表示为,其中第r时刻的传播图表示为,其中为图中的顶点,可以表示为表示边,即源帖与评论之间关系或评论与评论之间关系的边。

        为简单起见,本文未考虑边上的方向,即将看作无向图,邻接矩阵表示为,此外,我们用每个节点的词嵌入向量来初始化它的表示。

3.2.1.2 动态知识图

        与现有研究仅利用源帖子中的知识信息进行谣言检测不同,我们在此基础上引入了评论中的知识信息。因此,知识信息也会随着事件的传播而演变。本模块的目的就是捕捉这种知识动态。不仅从源文章和评论文本中抽取知识实体,还对实体之间的结构信息进行建模,以获得更丰富的知识语义。

        首先引入知识抽取和概念化过程 。给定源帖子和评论,实体链接解决方案TAGME (Assante et al. 2019)和shuyantech (Chen et al. 2018)分别用于将英文和中文文本中有歧义的实体提及链接到KG中相应的实体。然后,对于每个识别出的实体,通过概念化从现有的知识图谱中获取其概念   信息,如YAGO和Probase。我们采用“isA”关系来获取概念。获得实体集和概念集然后构建每个时间阶段的动态知识图。

动态知识图的边的构造过程:

(1)帖子-实体边

(2)实体-实体边、实体-概念边、概念-概念边

3.2.2 DDGCN(双动态GCN模块)

        DDGCN由双静态GCN单元和时间融合单元组成。这两个单位的数目都等于时间阶段的数目,即γ。我们以动态传播图和动态知识图作为输入,并在每个时间阶段对它们进行顺序编码

3.2.2.1双静态GCN单元

采用两个GCN,同时对动态传播图和动态知识图进行编码,同时获得传播特征和知识特征

  1. 动态传播图的编码方法

表示一个包含传播图中所有个节点特征的矩阵,其中F是特征向量的维数

表示图中节点u的特征向量

图的邻接矩阵为,则一个2层的GCN就可以定义为

3.2.2.2 TF(Temporal Fusion

受门控机制的启发,提出了一个时间融合单元来组合和投影节点嵌入,融合嵌入将作为下一阶段二重静态GCN单元的初始节点嵌入。

具体来说,我们结合了三个节点嵌入,即在传播图和知识图上学习到的两个节点嵌入(

),以及在第一时间阶段的初始节点嵌入。然后进行线性变化

然后,我们将三个变换后的特征进行拼接。请注意,我们只拼接源帖子和评论节点嵌入,因为它们存在于两个图中。它们第一次的初始节点嵌入都是预训练的词嵌入,是相同的。级联矩阵经过线性函数和tanh激活函数,产生

,即

3.2.2.3 Connecting the Above Two Units

对每个时间阶段的图结构信息进行编码和融合,并将嵌入作为初始节点嵌入传播到下一阶段的双静态GCN。这样,我们就可以以顺序的方式捕获和聚合动态图的结构信息。

3.2.3 Rumor Classifification Module

最后一个TF模块的输出是帖子节点和评论节点表示。这里我们使用均值池操作符来聚合来自节点表示的信息。它被表述为

然后,将传播和知识的表示

与源节点的表示进行拼接,将信息合并为:

最后,通过几个全连接层和一个sigmoid层计算事件y的标签:

其中wf和bf为权重和偏置参数。然后我们使用交叉熵损失有什么用作为谣言分类损失:

交叉熵损失是一种常见的损失函数,它在分类问题中经常被使用。使用交叉熵损失的主要作用如下:

  1. 衡量模型预测值与真实值之间的差异:交叉熵损失可以帮助我们衡量模型对于不同类别的预测值与真实值之间的差异,从而评估模型的性能。
  2. 提高模型分类效果:交叉熵损失可以帮助模型更好地区分不同类别,从而提高模型分类效果。
  3. 优化模型参数:交叉熵损失可以作为优化模型参数的目标函数,帮助我们找到最优的模型参数。 总之,交叉熵损失是一种非常有用的损失函数,它可以帮助我们评估模型性能、提高分类效果和优化模型参数。

总之,交叉熵损失是一种非常有用的损失函数,它可以帮助我们评估模型性能、提高分类效果和优化模型参数。

预测分布越接近真实分布,交叉熵损失越小,预测分布越远离真实分布,交叉熵损失越大

4 实验

4.1 数据集

Pheme和Weibo

4.2 对比实验

BERT

Transformer

EANN:)是一个基于gan的模型,用于提取事件不变特征,以方便检测新到达的事件。请注意,与原始的EANN不同,由于我们的数据集中缺乏图片,我们不使用图片。

QSAN:集成了量子驱动的文本编码和签名注意机制,以模拟源帖子和响应帖子之间的复杂语义。

RumorGAN:生成不确定或冲突的声音来增强鉴别器,以学习更强的谣言表征。(Detect rumors on twitter by promoting information campaigns with generative adversarial learning)

RVNN:根据内容的非顺序传播结构从内容中学习判别特征。RVNN包括自下而上和自上而下的树形结构网络,分别记为RVNNBU和RVNNTD。(Rumor detection on twitter with tree-structured recursive neural networks)

BiGCN:是一个基于gcn的模型,它可以嵌入传播和分散结构,并通过根节点特征增强节点表示。(Rumor detection on social media with bi-directional graph convolutional networks)

KMGCN:采用图卷积网络结合视觉信息和KG增强语义表示。我们不使用视觉信息,因为我们的数据集中缺乏图片。(Fake News Detection via Knowledge-driven Multimodal Graph

Convolutional Networks)

STS-NN:联合建模信息传播中的空间结构和时间结构。(Deep spatial–temporal structure learning for rumor detection on Twitter.)

4.3 实验设置

所有比较方法均采用相应论文中报道的默认优化设置。我们使用Pytorch框架实现了我们的方法(Paszke等人,2019年)。参数优化采用Adam算法(Kingma and Ba 2014)。我们将Pheme数据集和Weibo数据集分成训练集、验证集和测试集,分割比例为7:1:2,没有重叠。我们根据验证集上的性能选择最佳参数设置。在我们的模型中,我们使用预训练的BERT (Devlin et al. 2018): BERT -base-uncase用于英语,BERT -basechinese用于中文。我们使用正确率、准确率、召回率和F1作为评估指标。更多的重现性细节在附录中列出。我们将数据集随机分成5部分,进行5次交叉验证,得到最终结果。我们设定时间阶段的数量γ = 3。

关于正确率和准确率:

分类指标准确率(Precision)和正确率(Accuracy)的区别_presicion高 accuracy低_青椒炒代码的博客-CSDN博客

4.4 谣言分类效果

  1. 在这两个数据集上,我们的DDGCN模型在所有指标上都显著优于所有其他方法,这证实了考虑双动态信息将有利于谣言检测任务。
  2. BERT优于其他只使用文本信息的模型,展示了其在捕获文本语义以进行谣言检测方面的卓越能力。
  3. 我们可以观察到,RumorGAN的性能与仅处理文本信息的模型相当
  4. 我们还可以观察到,具有空间结构和文本信息的方法比仅适用于文本和时间结构的方法性能更好。
  5. 空间结构比时间结构,在谣言检测中更有效。
  6. 此外,KMGCN在Pheme数据集上的表现优于大多数基于文本和基于时间的模型,表明知识特征可以提供互补信息,从而提高性能。
  7. STS-NN在微博数据集上取得了与BiGCN相当的性能,但在语素数据集上不如BiGCN,可能的原因是随着消息的传播,在STS-NN模型中,由于一系列门控单元的存在,源消息的影响会衰减。0
  8. 此外,与基线相比,我们可以捕获更多涉及时间和空间结构的语义类型,以及源帖子和评论中的额外知识,从而获得最佳性能。

4.5 消融实验

考虑以下4个方面因素影响:

  1. 有无动态知识图
  2. 有无动态传播图
  3. 有无时间融合模块
  4. 有无动态GCN(即,只使用最后时间阶段的传播图和知识图谱表示作为输入,模型仅包含一个双静态GCN单元和一个时间融合单元)

4.6 早期谣言检测表现

为了构建早期检测任务,我们设置了一系列检测延迟,并只使用延迟之前发布的帖子和评论进行检测。我们采用两种类型的延迟:

  1. 自源帖子发布以来经过的时间
  2. 根据收到的评论数量设置的延迟。

为了进行对比,我们选择RvNNTD, BiGCN和STS-NN作为早期检测baseline,因为它们考虑了时间信息,并在表3中表现出良好的性能。图2显示了在微博和Pheme上不同延迟下的性能结果。可以观察到,DDGCN在源帖子发布后的每个早期阶段都能够达到很高的准确性,并且在每个时间阶段几乎始终优于其他方法。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
谣言检测是指通过分析文本内容来判断该文本是否包含谣言或虚假信息。Transformer是一种基于注意力机制的神经网络模型,被广泛应用于自然语言处理任务中,包括谣言检测。 在谣言检测中,我们可以使用Transformer的编码器作为语义提取器。编码器将整个句子作为输入,并通过注意力机制和多层感知机(MLP)为每个字生成一个编码向量。这些编码向量包含了整个句子的语义信息。然后,我们可以将这些向量输入到全连接网络中进行分类,判断文本是否为谣言。 需要注意的是,由于Transformer的注意力机制可以同时处理整个句子,因此它具有较好的并行能力。然而,与循环神经网络(RNN)相比,Transformer缺少了上下文信息,即没有考虑到不同词之间的顺序。因此,在使用Transformer进行谣言检测时,需要注意这一点。 下面是一个基于PyTorch和Transformer实现谣言检测的示例代码: ```python import torch import torch.nn as nn import torch.optim as optim from torchtext.data import Field, TabularDataset, BucketIterator from torch.nn import TransformerEncoder, TransformerEncoderLayer # 定义模型 class RumorDetectionTransformer(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, n_layers, n_heads, dropout): super().__init__() self.embedding = nn.Embedding(input_dim, hidden_dim) self.encoder_layer = TransformerEncoderLayer(hidden_dim, n_heads) self.encoder = TransformerEncoder(self.encoder_layer, n_layers) self.fc = nn.Linear(hidden_dim, output_dim) self.dropout = nn.Dropout(dropout) def forward(self, text): embedded = self.embedding(text) embedded = embedded.permute(1, 0, 2) output = self.encoder(embedded) output = output.permute(1, 0, 2) pooled = torch.mean(output, dim=1) pooled = self.dropout(pooled) return self.fc(pooled) # 数据预处理 TEXT = Field(tokenize='spacy', lower=True) LABEL = Field(sequential=False, is_target=True) fields = [('text', TEXT), ('label', LABEL)] train_data, test_data = TabularDataset.splits( path='data', train='train.csv', test='test.csv', format='csv', fields=fields ) TEXT.build_vocab(train_data, vectors='glove.6B.100d') LABEL.build_vocab(train_data) # 模型训练 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') BATCH_SIZE = 64 train_iterator, test_iterator = BucketIterator.splits( (train_data, test_data), batch_size=BATCH_SIZE, device=device ) INPUT_DIM = len(TEXT.vocab) HIDDEN_DIM = 100 OUTPUT_DIM = 1 N_LAYERS = 2 N_HEADS = 2 DROPOUT = 0.2 model = RumorDetectionTransformer(INPUT_DIM, HIDDEN_DIM, OUTPUT_DIM, N_LAYERS, N_HEADS, DROPOUT).to(device) optimizer = optim.Adam(model.parameters()) criterion = nn.BCEWithLogitsLoss().to(device) def train(model, iterator, optimizer, criterion): model.train() epoch_loss = 0 for batch in iterator: optimizer.zero_grad() text = batch.text label = batch.label.float() predictions = model(text).squeeze(1) loss = criterion(predictions, label) loss.backward() optimizer.step() epoch_loss += loss.item() return epoch_loss / len(iterator) def evaluate(model, iterator, criterion): model.eval() epoch_loss = 0 with torch.no_grad(): for batch in iterator: text = batch.text label = batch.label.float() predictions = model(text).squeeze(1) loss = criterion(predictions, label) epoch_loss += loss.item() return epoch_loss / len(iterator) N_EPOCHS = 10 best_valid_loss = float('inf') for epoch in range(N_EPOCHS): train_loss = train(model, train_iterator, optimizer, criterion) valid_loss = evaluate(model, test_iterator, criterion) if valid_loss < best_valid_loss: best_valid_loss = valid_loss torch.save(model.state_dict(), 'rumor_detection_transformer.pt') # 模型使用 model.load_state_dict(torch.load('rumor_detection_transformer.pt')) def predict_rumor(text): model.eval() tokenized = [tok.text for tok in TEXT.tokenizer(text)] indexed = [TEXT.vocab.stoi[t] for t in tokenized] tensor = torch.LongTensor(indexed).unsqueeze(1).to(device) prediction = torch.sigmoid(model(tensor)) return prediction.item() # 示例使用 text = "这是一条谣言" prediction = predict_rumor(text) print(f"谣言概率:{prediction}") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨MG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值