由于本人的文采并不是很好,所以之前一直对写博客有点抵触感。为了表达能力,这次真的拼了。。。。
我是做nlp方向的,目前是研一。最近刚确定了谣言检测这个方向,接下来解读的是我看关于谣言检测的第一篇文章,若有不理解的地方,还请见谅哈。
这是ACL顶会的一篇文章,将多任务学习与注意力机制应用到社交网络中谣言检测。
这个模型中,有个共享层和两个有特定功能的层(一个谣言检测层,一个立场简检测层)。并将将用户的信誉信息添加到谣言检测层中,同时又应用注意力机制技术分别在这两层中的隐藏层中。因此,使用多任务的学习架构进行训练,实验的效果比目前主流的谣言检测模型要好。
在这个介绍中,我认为有个点讲的比较好。就是在处理谣言时要遵循一些步骤:
谣言辨认
- 决定一句话是否值得核实是不是谣言
谣言追踪
- 收集谣言出现时的一些评论
立场分类
- 用来确定用户对谣言真实性的态度
谣言核实
- 谣言要在哪里去预测它的真实值
接下来介绍什么是谣言检测任务
一篇故事 x 是由 n 个相关信息组成,在这里姑且认为是{ m1,m2,…mn} ,这是由m1 来初始的像链条的序列。我所认为这里的mi信息 是对故事x的评论,故事x就相当于是个贴子。由于一条评论可以被另一条评论在评论,所以mi 会有许多分支。mi 的内容会有许多种类型,例如文本 或者是图片。 每个mi的内容是每个用户进行评论,每个用户本身也会有一些属性,比如 名字,头像,以及过去发表的一些评论。
综上,谣言检测的任务就变成了 对带有信息内容mi(也就是上述所说的评论 )和用户u信息的故事x,将其判定为(true,false,unverified) 中的一类。
图中可以看出模型还是很复杂的,分别有三个层。从上到下依次是 Stance detection LSTM layer, Shared LSTM layer,以及 Rumor verification layer。接下来详细介绍这个模型结构要点。
从上图能够看到,中间有一个网络层。这是一共享层,可以通过共享参数提取上层任务和下层任务的共同特征信息。上层为 Stance detection LSTM layer,下层为 Rumor verification layer。每个任务都有相同的输入[x1,x2, x3 …xn] 序列. 每一个xi 代表一个post,我们就把它当做是推文就好了。从下图中,能够了解到 Source post 引出四个分支,我们可以认为与Source post 直接的reply 是对Source post 单独的评论。他们后面紧接着相连的replay 是对这个评论的回复。这样,可以用x1,x2 ,x3 来表示最上面的那个分支,其中x1 是Source post 。 从而, 依据这个图,我们就已经有4条输入序列了。
模型图中的 TE(Tweet Embedding) 是我们通过word vector 模型将 x1,x2,…xn 变成词向量 传入Attention机制的LSTM 网络中。
这一层是立场检测层,是判断每篇推文的立场。我们注意到,每个输入向量并不仅仅只有 Tweet embedding,还需要添加个 Feature Embedding这个向量。这个向量是根据一篇论文引用过来,老实说,我没看。我理解的是,每个推文 xi 都有其特有的特征,比如其内容长度,还有其代表的是不是 Source post 巴拉巴拉。想进一步了解的,可以详读上述论文。(Elena Kochkina, Maria Liakata, Isabelle Augenstein,2017, Turing at SemEval-2017 Task 8: Sequential Approach to Rumour Stance Classification with Branch-LSTM, SemEval 2017 )
这样就可以将处理好的输入向量投入LSTM 网络 中,通过时序一步步推移,会进入最后的全连接层,并通过softmax,利用贪心算法,选取概率值最大的将其划分为(supporting,denying,querying and commenting)中的一类。图中也不难可以看出,stance层的每一个隐藏层都用了注意力机制,来为最后的谣言任务服务。
接下来就到了我们的重头戏,谣言检测这一层。这也是我们处理谣言任务的根本一层。与stance层不同的是,这一层的输入向量不是 TF+FE 的结合,而是 TF+UE 的结合。
啥是 UE ? 这是作者在摘要时就说的本文的重点,利用用户信誉信息来进行谣言检测。过去虽有很多谣言检测任务中用到了用户信誉信息,但是在使用时序分类和神经网络的研究中却没有充分用到这个信息。以我们亲身经验来说,对于发tweet 的作者,我们会更相信权威机构发的,而不会信任一个键盘侠。因此,作者就利用这点,将用户信誉信息加入到输入向量中去。用户信誉信息是从user profile 中得到,它有可能包括用户所在的地点,以及对他个人的一些描述。我们将用户信誉信息编码成向量,与Stance 层一样,concatenate TE 投入 LSTM网络中进行训练。此层网络同样用到了注意力机制。
这是注意力机制的LSTM 网络,首先我们要谈论下为啥要注意力。这是由每篇tweet特点导致。对 Stance layer 每篇tweet 必有一定的立场,有强力支持的,有强力否定的,也有朦胧而可的。当然权威机构发的tweet,其特征表现得立场一般都会很坚定。所以,我们最后谣言检测任务肯定要把注意力多看重这种表达强力立场推文中。同时对于下层Rumor Layer,我们也要应用注意力机制。这一层添加了用户信誉信息,每个用户发表的tweet 不同的人准确度不一样。我们应该把主要的注意力放在我们能信任的人身上,例如那些官方权威机构,领域专家。。。。
对于注意力机制,不可缺少的就是我们每个输入向量的权重ai。 我们将同一个xi 对应的两个输入向量用相同的权重,毕竟他们都是同一个Tweet出来的。 由于找不到这篇论文的代码,我认为权重不是通过内积然后归一化得到的,它应该是训练出来的。他们应该是给每对输入向量赋予一定的权重,通过加权平均最后投入到softmax 层进行分类,然后选取概率最大的作为我们的类别。
这个实验是在两个公开可获得的谣言数据集上训练的。一个为 RumorEval ,另一个为PHEME
Method | Accuracy | Macro F1 |
---|---|---|
Majority(False) | 0.438 | 0.304 |
NileTMRG | 0.57 | 0.539 |
BranchLSTM | 0.5 | 0.491 |
MTL2 | 0.571 | 0.558 |
Proposed model | 0.638 | 0.606 |
Table 1: Rumor verification result on RumorEval
Method | Accuracy | Macro F1 |
---|---|---|
Majority(False) | 0.511 | 0.226 |
NileTMRG | 0.438 | 0.339 |
BranchLSTM | 0.454 | 0.336 |
MTL2 | 0.441 | 0.376 |
Proposed model | 0.483 | 0.418 |
Table 2: Rumor verification result on PHEME dataset