数据挖掘——社交网络水军团体识别
github地址
1.主要工作
将论文的做法应用于自己的数据集。
[论文链接](在线阅读-中国知网 (cnki.net))
2.问题背景
随着在线社交网络的不断发展,基于社交网络的信息传播也越来越深入和广泛。然而近年来,有组织的网络水军的出现,导致社交网络上谣言信息盛行、欺诈活动猖獗,造成巨大的社会、经济损失,严重动摇了社交网络的安全基础,最终会影响社交网络的发展前景。所以进行网络水军识别研究是一项迫在眉睫的工作。在庞大的社交网络中,传统的水军识别工作,主要是基于单个特征进行的,没有把水军团体作为识别的目标,这类方法不能全面评价一个水军的特征,识别准确率和效率有提高的空间。
网络水军作为一个带有一定任务的团体,在他们的团体成员结构中会呈现出一种异常特征。基于这一思想,本文提出了一种基于结构与内容的社交网络水军团体识别方法。可以通过挖掘网络水军在社交网络中的结构特征,对社交网络中的水军团体进行识别;并结合节点本身所传播信息的内容特征,对社交网络中的水军团体进行综合分析,从而确认网络水军的身份。具体工作:
(1)挖掘社交网络水军的网络结构特征。根据垃圾信息出现的时间,结合社交网络用户的转发记录构建社交网络中的转发关系网络,寻找其中传播信息能力强的重叠社区结构,初步识别网络水军团体。
(2)用户传播内容的特征挖掘。分析用户所发送内容的特征和垃圾信息的特征,通过度量它们之间的相似度,来判断一个用户是否传播过垃圾信息。
(3)综合用户的结构特征与发布内容的特征识别网络水军团体。在已识别的重叠结构的基础上,度量重叠社区内节点的内容与垃圾信息的相似度,寻找多次传播过垃圾信息的重叠社区节点,确定为网络水军。
3.数据集
SourceID | TargetID | RetweetTime | RetweetText |
---|---|---|---|
7055093688 | 1465195220 | 2022/3/24 22:59 | 快转微博 |
7055093688 | 7334280971 | 2022/3/24 23:04 | 最近微博看到太多人间疾苦了! |
7055093688 | 6319009505 | 2022/3/24 23:04 | 难过,年纪大了,眼泪却越来浅 |
7055093688 | 3562616764 | 2022/3/24 23:05 | ## 疑似医护人员,因为小区封禁没有得到及时救助而病亡。@北京人应该知道的北京事 |
7055093688 | 2733944900 | 2022/3/24 23:05 | 尴尬了…西安的事**又来一次��� |
7055093688 | 2201977432 | 2022/3/24 23:05 | 感觉**整个气氛再过一周不缓和,要出zz问题了。 |
7055093688 | 7546499106 | 2022/3/24 23:06 | 转发微博 |
3562616764 | 1802533672 | 2022/3/24 23:06 | |
… | … | … | … |
4.具体工作
4.1社交网络水军的网络结构特征分析
社交网络拓扑结构是用户在社交活动中遗留的“痕迹”,社交网络中的用户无法去掩盖。从网络拓扑结构的角度,可以体现用户的信息传播能力和影响力,并且社交网络结构的获取较为容易。网络结构中的节点和边分别代表用户和他们之间建立的关系,在分析传播信息能力和影响力的时候,它们都起着关键作用。
社交网络用户利用网络拓扑结构进行信息传播和影响力的放大,而网络水军所在网络的结构特殊性,使得他们传播信息的能力很强。本文所提到的信息传播能力,指的是一个节点有能力影响周围的用户并通过周围用户将信息传播出去,并且有多次传播信息的记录。我们通过分析社交网络结构特征,找出网络结构与影响力大小的联系,间接分析网络结构与信息传播能力大小的联系。
社交网络的结构用图*G(V,E)*表示,用邻接矩阵表示两个用户之间的关系:
4.1.1对节点和边的度量
(1)节点的中心度
(2)节点的出度和入读
(3)紧密中心度
(4)介数中心度
(5)基于随机游走特征的度量
(6)局部聚集系数
(7)Jaccard 相似度与边介数
这些对接下来的工作贡献不大,略过…
4.1.2重叠社区结构的引入
计算社交网络中的影响力可以通过使用上一小节的方法遍历网络拓扑中的每一个节点计算得到,但是如果直接将节点的影响力作为判断节点是否为水军的依据,会有两个弊端存在:一、在亿量级的社交网络节点上算法的运行时间将接近于无穷大;二、有些节点的影响力是天生的,比如影视明星,即使明星从不发送任何东西,他们仍然有很大的影响力。所以,在论文中,作者提出信息传播能力的概念,通过信息传播能力判断网络水军,更加合理、准确,它既体现了节点的影响力,又体现了节点有较强的传播信息意愿。
社交网络中,在一条信息传播之前,我们规定网络中的节点只有两个状态:激活态和非激活态,并且每个节点的状态只能由非激活态变成激活态,而不能由激活态再变为非激活态,也就是说,我们的激活过程是不可逆的,只是单一的一个方向变化。两个节点之间可能不相邻,但是可以通过其他节点相互联系。当一个节点与越多的其他节点直接或者间接的相邻,则它传播的信息就会有更大的可能被更多的节点接受(激活),而继续向其他节点传播。通过其它文献对节点传播影响力的分析可知,某节点的传播能力与和其直接相连的社区的数目有关,越多则传播速度越快,且传播范围越广。进一步分析,若某节点隶属于多个社区,则它的传播能力应该更强,因为它不仅连接了多个社区,还直接与这些社区里的成员有直接的连接,重叠社区中的节点就具有这样特性。重叠社区结构作为多个社区的共有部分,可以将所要推广的信息传递给各个社区里的成员,由各个社区里的成员继续推广下去。在现实中,这种现象很常见,推销人员常常注册很多 QQ 账号,加入几百个 QQ 群,向每个 QQ 群发送推广信息,以达到他们推广信息的目的。通过挖掘转发关系网络中的重叠社区结构,初步识别社交网络中的水军团体。
4.2构建社交网络中的转发关系网络
在以往的水军识别研究中,都是在整个网络中识别水军,这种做法还是存在一个巨大计算量的问题。由于社交网络存在庞大的数据,节点以及边的数量都是千万级别的,使得在整个网络上检测网络水军容易产生计算风暴,无法运用到实际的社交网络水军识别工作中。
因此作者提出了一个新的方法:利用垃圾信息出现时间点后 10 小时内,发布过信息的用户作为种子节点,这其中就包括了传播过垃圾信息的节点;根据社交网络中的以往这些种子节点的转发记录,通过深度遍历来构建社交网络中的转发关系网络,由于六度分隔理论,本文中的遍历深度不超过 3 层。垃圾信息出现的时间,就是网络水军们活动的时间,通过这种做法,既减少了数据的规模,避免在全网络进行识别工作;又排除了很多与此垃圾信息无关的数据,提高水军识别的效率和准确率。
构建社交网络中的转发关系网络的伪代码如下:
输入:种子节点集SEED(垃圾信息出现时间点后10小时内,传播过信息的用户)
输出:转发关系网络G
WHERE (节点集SEED非空):
IF (∀n∈SEED && n有过转发行为):
THEN 以n为起点,根据节点转发记录进行深度遍历(深度不超过3层,遍历过程中将两有转发历史的两个节点连边);
ELSE SEED-n;//将节点n从SEED中删除
SEED-n
RETURN G
4.2.1代码
在构造社交网络时,我使用了python中的networkx库,它可以很方便地建立节点和边,也可以查询相邻节点和相邻边等等。代码存放于
(github地址)里的network_3.ipynb,欢迎查看和指正。
4.2重叠社区结构发现算法
4.2.1定义引入
定义 3.1 边e=(u,v)的邻居边N(e),指的是分别与节点u和v相连且不包括e的边集合,即:
N
(
e
)
=
{
l
=
(
v
,
i
)
∈
E
∣
i
∈
N
(
v
)
}
∪
{
l
=
(
u
,
j
)
∈
E
∣
i
∈
N
(
u
)
}
−
{
e
}
N(e)=\{l=(v,i)\in E\mid i\in N(v)\}\cup\{l=(u,j)\in E\mid i\in N(u)\}-\{e\}
N(e)={l=(v,i)∈E∣i∈N(v)}∪{l=(u,j)∈E∣i∈N(u)}−{e}
定义3.2 边 e 的 ε 领域 Nε(e) 是指在边e的邻居N(e)中,与边e的相似度大于或者等于ε的边集合,即:
N
ε
(
e
)
=
{
l
∈
N
(
e
)
∣
s
(
l
,
e
)
≥
ε
}
N_{\varepsilon}(e)=\begin{Bmatrix}l\in N(e)|s(l,e)\geq\varepsilon\end{Bmatrix}
Nε(e)={l∈N(e)∣s(l,e)≥ε}
定义3.3 若一条边 e 的 ε 领域中的边数|Nε(e)|≥μ ,则称 e 为核心边。
定义3.4 若边e为一个核心边且边 l 属于 e 的 ε 领域时,称边 l 直接密度可达于 e ,即:
D
i
r
Re
a
c
h
(
e
,
l
)
⇔
e
.
C
o
r
e
=
t
r
u
e
∧
l
∈
N
ε
(
e
)
Dir\operatorname{Re}ach(e,l)\Leftrightarrow e.Core=true\wedge l\in N_{\varepsilon}(e)
DirReach(e,l)⇔e.Core=true∧l∈Nε(e)
根据定义 3.1~3.4,算法的第一步是在本文的转发关系网络中,找出所有的链接社区;若某条边不属于任何社区,则它为孤立边,被自然排出在外。第二步,再根据下面的定义 3.5和定义 3.6,将链接社区集合转化为相应节点社区集合,最终找出重叠社区结构。
定义 3.5 节点社区 C 即为链接社区 LC 中所对应的所有边的连接节点:
∀
e
=
(
u
,
v
)
∈
L
C
⇒
u
∈
C
∧
v
∈
C
\forall e\mathrm{=}(\mathfrak{u},\mathfrak{v})\in LC\Rightarrow u\in C\wedge v\in C
∀e=(u,v)∈LC⇒u∈C∧v∈C
定义3.6 如果存在两条边被同一节点 v 连接,同时这两条边分别属于不同的链接社区LC 时,节点 v 即本文所寻找的重叠社区结构 OS 中的一员:
O
S
(
v
)
⇔
∃
u
1
,
u
2
,
L
C
1
,
L
C
2
(
u
1
≠
u
2
∧
L
C
1
≠
L
C
2
)
:
e
=
(
v
,
u
1
)
∈
L
C
1
∧
e
=
(
v
,
u
2
)
∈
L
C
2
\begin{aligned}&OS(v)\Leftrightarrow\exists u_1,u_2,LC_1,LC_2(u_1\neq u_2\wedge LC_1\neq LC_2):\\&e=(v,u_1)\in LC_1\wedge e=(v,u_2)\in LC_2\end{aligned}
OS(v)⇔∃u1,u2,LC1,LC2(u1=u2∧LC1=LC2):e=(v,u1)∈LC1∧e=(v,u2)∈LC2
4.2.2算法介绍
重叠社区结构发现算法按四步走:
- 先将网络中的每一条边设置为未被分类。遍历每一条未被分类的边,计算该边是否为核心边,若是则找出所有与之直接密度可达的边,构造链接社区LC。
- 所有链接社区LC构成链接社区集合LCS。
- 遍历LCS中的每一个链接社区LC,建立对应的节点社区C,得到节点社区集合CS。
- 寻找同时加入多个节点社区的节点,即重叠社区中的一员。
4.2.3代码实现
4.3基于结构与内容的水军团体识别
合LCS。
3. 遍历LCS中的每一个链接社区LC,建立对应的节点社区C,得到节点社区集合CS。
4. 寻找同时加入多个节点社区的节点,即重叠社区中的一员。