一种面向社交网络的分布式用户聚类方法

文档序号:24620356发布日期:2021-04-09 20:25阅读:117来源:国知局
一种面向社交网络的分布式用户聚类方法

本发明涉及一种面向社交网络的分布式用户聚类方法,属于软件技术领域。



背景技术:

社交网络,是由许多节点以及节点间关系构成的一个网络结构。节点通常是指个人或组织(又称社团)。社交网络代表各种社交关系,经由这些社交关系,把从偶然相识的泛泛之交到紧密结合的家人关系的各种人们或组织串连起来。将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。社交网络中的用户聚类即将连接紧密的用户节点分为一个簇,处于同一簇中的用户节点之间连接紧密,而位于不同的簇的用户节点之间的连接比较稀疏,位于同一簇中的节点往往具有共同性,例如规范、价值观、习俗或身份等。社交网络中的核心节点是指在社交网络中占有较大影响力的用户,通过识别核心节点有助于用户聚类。

随着互联网的快速发展,实际生活中社交网络的规模呈现指数级增长,可以达到数十亿的用户节点和边集,远远超出一台机器的内存容量上限。而传统的面向社交网络的用户聚类方法是基于单机的串行算法,显然难以满足现有的需求。分布式计算可以将计算过程分解为一系列较小的部分,并分配给不同的计算机进行并行计算。分布式计算可以充分利用多台机器的计算资源和存储资源,节约应用的整体计算时间从而提高计算效率。图计算与分布式计算相结合,可以缓解由数据规模增大带来的计算时间过长和存储资源不足的问题。



技术实现要素:

本发明针对现有的面向社交网络的用户聚类方法的不足,提供了一种面向社交网络的分布式用户聚类方法,能发现社交网络中的核心节点的同时在大规模的社交网络上完成用户聚类。在此基础上,本发明提出了一种优化策略,旨在提高本发明提出的面向社交网络的分布式用户聚类方法的效率,能在较短时间内完成大规模社交网络中的用户聚类。

本发明提出的面向社交网络的分布式用户聚类方法的执行过程可分为预处理、图划分、计算节点间的相似度、寻找核心节点和用户节点聚类共五个步骤。具体的分布式实现如下所示:

1)预处理

预处理过程主要是对社交网络图数据的处理,将获得的数据转化为边集的形式。处理的过程如下,对每个不同的用户进行编号,每个用户都具有独一无二的id,每个id可以表示一个用户节点,并用用户节点之间的边去表示用户之间的关系,例如朋友关系。预处理的过程就是将实际社交网络中用户的关系转化为由节点对表示的边集的形式。预处理完成后,将边集提交给图处理引擎,图处理引擎会根据边集去建立图网络,并进行后续的图划分步骤。

2)图划分

在图规模较大的情况下,在一台机器上会无法存储图中的所有数据,需将图划分为一些较小的部分,分别存储在不同的机器上。本方法采用了一种基于点切分的图划分方法。该方法首先将边进行编号,并根据编号的hash值将边以及该边所连的两个顶点划分到不同的机器上,例如两条边(i,j),(i,k)的编号分别为1,3。我们使用3台机器去存储编辑,编号分别a,b,c,采用的hash函数为f(x)=xmod3,则(i,j)会被存储到a机器上,同时用户节点i的和j的固有属性信息(包括用户节点id号和用户节点所代表的用户的自身信息,这些自身信息可以是购买过的书籍或是否欺诈者等信息)也会被存储到机器a上,同理机器c会存储边(i,k)和用户节点i和k的固有属性信息。根据该方法,一个用户节点会被存储到多台机器上,会增加存储空间,但相应地减少了不同机器之间的消息通信。

3)计算用户节点间相似度

本方法采用了二阶相似度来衡量用户节点之间的相似性,二阶相似度,即两个相邻用户节点的共同邻居节点占所有邻居的比重。通过消息传递机制,各个节点将自己的独有id暴露给邻居节点,即每个节点可以保存邻居id信息。每个节点将自己收到的邻居节点id信息加入自身节点属性中的邻居节点列表,在完成这一步骤后,每条边会收到来自源节点和终节点的邻居列表。然后根据二阶相似度的计算公式计算出两个节点之间的相似度,存储在边上,即每条边根据收到的该边所连两节点的邻居节点列表,计算出两节点之间的相似度,并存储在边上。

4)寻找核心用户节点

各用户节点在计算完与邻居节点的相似度后,会通过相似度判断有效边的数量。如果一对节点之间的相似度超过某个阈值e,这对节点之间的边便被称为有效边。当一用户节点所拥有的有效边的数量超过设定的阈值μ时,则将该用户节点更新为核心用户节点。

5)用户节点聚类

图中的每个用户节点都拥有自己独有的id和用于指示该节点所在的簇的标签label,每个用户的节点的label都被初始化自身的id。在聚类步骤的第一步迭代中,图中的核心用户节点以消息传递的方式向邻居节点发送自身的标签信息label。普通节点收到消息后,选择收到的所有标签中最小的标签min_label做为自身的标签。核心节点在收到消息后,收到的标签中如果存在比自身标签还要小的标签,则选择收到标签中最小的标签min_label作为自身的标签,若收到的标签中如果不存在比自身标签还要小的标签,核心节点不会进行任何操作。在接下来的迭代中,只有在上一轮修改了标签的核心节点才会继续发送消息,发送消息后各个节点按照第一轮迭代的计算逻辑修改标签。当在一轮迭代中,没有任何核心节点,修改了自身的标签,则聚类阶段的计算就结束,拥有相同标签的节点会被划分到同一个簇中,在一个簇中至少会存在一个核心节点。我们可以利用得到的社交网络的核心用户节点信息以及簇信息进行商品推荐或者新朋友推荐。我们可以向每个簇中的用户节点推荐该簇中核心用户节点曾经购买过的物品来完成商品推荐。

针对分布式计算的特点,本发明在计算用户节点相似度阶段,采用了边融合策略,将部分在用户节点上的计算转移到边上,减少了重复计算和消息发送。具体的策略规则如下:

在以节点为中心的编程模型中,计算是在节点上进行的,节点接受到其他节点发送的消息然后进行计算,计算之后更新节点的状态。在某些图计算算法中,邻居两节点的计算内容和计算结果相同,会导致重复计算。本方法采用的边融合计算策略将消息聚集到边上,在边上进行计算,然后再将计算结果发送到节点上。在计算节点相似度时,边的两个节点将邻居列表发送到边上,边得到邻居列表后计算两个节点之间的相似度,存储在边上。通过边融合策略可以避免各自节点上的重复计算从而提高执行效率。边融合策略计算用户节点之间的相似度步骤如下:

每个节点将自己的邻居节点列表消息发送到边上,在此之后,每条边上就拥有两个节点的邻居节点列表信息。每台机器就可以通过这两个邻居节点列表来计算其存储的边的相似度。计算的结果存储在边上,这样每对相邻节点的相似度就被存储在边上。

结合以上叙述,本发明通过以下步骤在拥有一台主节点master及多台工作节点worker机器的集群上实现面向社交网络的分布式用户聚类方法:

1.预处理,将初始的社交网络数据集处理为边集的形式,为每个用户节点创造独一无二的id标识和簇标签label,标签label初始化为自身id,然后在图处理引擎上建立用户关系图。

2.图划分,master节点将1中所建立的用户关系图通过基于节点切分的方式进行划分,并分发到不同的worker机器上。

3.收集邻居信息,每台worker机器上,对于每条边,边上的两个用户节点会将自己的id互相发送给对方。然后每个节点创建一个邻居列表,将收到的id都加入到邻居节点列表,在每个worker机器都完成邻居消息收集之后,会触发一次各个worker机器之间的同步,同步的流程如下,如果一个用户节点被保存在多台worker机器上,则该worker会将该节点的信息发送给其他worker,其他worker收到信息会将自己的邻居列表与收到的邻居列表合并。例如节点i被保存在worker机器a,b,c上,则worker机器a会收到worker机器b和c发送的i用户节点的消息列表,然后将机器a会将原有的消息列表与收到的消息列表进行合并得到新的消息列表。

4.通过边融合策略计算用户节点的相似度,对每个worker机器上的每条边,边上的两个节点将自己的邻居节点列表发送到与自己相连的每条边上。每条边会收到来自源节点和终节点的邻居列表。然后边所在机器根据二阶相似度的计算公式计算出两个节点之间的相似度,存储在边上。

5.寻找核心用户节点,在步骤4中,边上计算出相似度后,如果边上的相似度大于设定的阈值e,则将边上的属性值设为1,否则将边上的属性值设为0。每条边在进行上述计算后将边上的属性值发送给边的两个节点。每个节点将收到的值相加,如果相加后的值大于阈值μ,则将该节点设为核心用户节点。阈值e的取值范围一般为[0.5,0.75],μ的取值一般为不大于10的正整数。

6.用户节点聚类,图中核心节点以消息传递形式向相邻节点发送自身节点的标签label,普通节点(即非核心节点)将收到的所有标签中最小的标签min_label作为自身的标签,核心节点只有在收到比自身标签更小的标签才会修改标签,修改标签的方式与普通节点一致。在之后的迭代中,只有修改了标签的核心节点才会向邻居发送标签信息。接受到信息的节点的标签修改逻辑与前面所述一致。当在一轮迭代中,没有任何核心节点修改了自身的标签,聚类就完成了,拥有相同标签的用户节点回被划分到一个簇中。

本发明提出的面向社交网络的分布式用户聚类方法,针对分布式计算和聚类算法的计算特点进行优化,减小了计算开销。本发明具有以下优点:

1)在运算过程中,传播开销小于计算开销。本发明采用边融合的计算方式,既减少了分布式系统中重复性的消息传递,同时用消息传播的方式替换了重复性的计算工作,极大地降低了计算开销。

2)现实中的社交网络图数据呈现幂律分布的特点,存在一些节点拥有极大的度。在计算时,计算任务分布不平衡,会出现度较小的节点计算较快,而度较大的节点计算较慢,前者等待后者的情况。本发明采用边融合的计算方式,在相似度计算过程中避免了计算资源集中于度较大的节点上,大大提高了整体计算过程的效率,且不需要额外对图分割策略进行针对性改进和适配。

3)相对于传统的面向社交网络的用户聚类方法,本发明能发现社交网络中的核心用户节点。

附图说明

图1是本发明面向社交网络的分布式用户聚类方法框架图;

图2是本发明计算节点相似度边融合策略规则流程图;

图3是本发明的实施流程图。

具体实施方式

以下结合具体实施例和附图对本发明进行详细说明。

本发明提出的面向社交网络的分布式用户聚类方法应用在spark大数据处理系统中。

基于以上信息,本实施例的具体实施步骤如下。

1、通过消息传递机制,各个节点将自己的独有的id暴露给邻居,即每个节点可以保存邻居的id信息。

2、采用边融合策略计算节点相似度,将计算集中于边而非各节点上。通过步骤1中得到的邻居信息,对于任意相邻节点v和w,节点上保存有各自邻居集合,分别为γ(v)和γ(w)。在二者相连的边e上,计算v和w的相对二阶节点相似度为σ(v,w)=|γ(v)∩γ(w)|/(|γ(v)|*|γ(w)|)1/2。当相对二阶节点相似度大于阈值ε时,即σ(v,w)>ε,认为该两个节点之间的边为有效边,由边保存结果,并给节点v和w发送消息。

3、对每个节点v,统计步骤2中邻边发来的结果,统计自身相邻的有效边数量为m,判断自身结构化信息。当相邻的有效边数量大于阈值μ时,即m>μ,更新节点v的结构化信息为核心节点。

4、根据步骤3中结果,图中核心节点v以消息传递形式对相邻节点发送自身标签label(v)。普通节点w收到消息后选择收到消息中最小的标签min_label作为自身的标签label(w)。核心节点v收到消息后,对比自身的标签label(v),若消息中存在比自身标签还小的标签label(j),则将label(j)作为新的label(v)。在下轮迭代中修改了标签的核心节点继续发送信息。迭代重复步骤4,若无新消息产生,则聚类结束,拥有相同标签的节点被划分到同一个簇中。

本发明提出的面向社交网络的分布式用户聚类方法完成后,可得到每个节点的簇信息,以及簇中的核心用户节点,我们可以利用得到的社交网络的核心用户节点信息以及簇信息进行商品推荐,新朋友推荐和欺诈团伙检测。对于商品推荐,输入的数据为用户构成社交网络的边集,以及用户曾经购买过的物品信息。我们可以向每个簇中的用户节点推荐该簇中核心用户节点曾经购买过的物品来完成商品推荐。对于欺诈团伙检测,输入的数据为用户构成社交网络的边集,以及用户是否是欺诈者。或者某个簇中的核心用户都是非法的欺诈者,那么可以推断出这个簇中的用户节点很有可能构成一个欺诈团伙。

以上所述仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1