HipHop算法:利用微博互动关系挖掘社交圈

标签: hiphop 算法 利用 | 发表时间:2013-06-29 10:15 | 作者:malefactor
出处:http://blog.csdn.net

       /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/
                 CopyMiddle: 张俊林                    

                 TimeStamp:2012年3 月

 

        在微博环境下,如何自动挖掘某个微博用户的社交圈子或者兴趣圈子是个很基础且重要的问题。如果能够对于某个用户在微博上体现的社交关系进行准确的挖掘,对于很多具体应用来说都有很好的作用,比如可以更好的对用户的兴趣进行挖掘或者能够推荐用户还未关注的社交圈子成员等,或者根据其社交圈子更准确的对用户进行个性化建模,为其它基于用户个性化模型的推荐或者广告推送等提供基础服务。

      我们在微博相关研发任务中提出了HipHop算法,旨在通过利用微博用户的互动行为,来自动挖掘出用户的不同社交圈子。在设计算法之初,我们希望圈子挖掘算法能同时满足以下几个条件:

1.    对于某个微博用户A来说,可以挖掘出其所属的多种社交圈子,比如用户既有同事关系圈,也有所属的专业兴趣圈。

2.    同时对于另外一个用户B来说,可能同时属于用户A的不同社交圈子,比如B既是A的大学同学,也是A的某公司同事,那么B应该同时出现在用户A的两个不同兴趣圈里。

3.    不使用用户隐私数据,出于保护用户隐私的目的,我们希望算法只使用用户公开行为和信息,所以HipHop算法只使用了互动关系这种公众完全可见的公开信息。

4.    社交圈可解释,即可以通过简洁的方式描述社交圈子的性质或者特点,目前是通过给每个圈子打上不同的标签来进行区分。

     HipHop社交圈挖掘算法就是在以上几个指导原则下设计开发出的,它能够同时满足以上几条约束条件,目前公开的参考文献中很少见到能够同时满足这些条件的相关社交圈挖掘算法。

常见的社交圈挖掘算法

      社交圈挖掘是目前社交网络研究中非常典型和热门的研究任务,通常被称为“社群发现“。学术界也陆续提出了很多算法来解决这个问题,大体而言,可以将其分为两大类:”单社群“方法和”多社群“方法。所谓”单社群“方法,就是说网络结构中的某个节点只能隶属于某个社群,不允许出现隶属多个社群的现象。而”多社群“方法则允许用户同时隶属于多个社群。下面分别以GN算法和”最大团结构“作为这两类算法的代表对其思路进行简要介绍。

     GN算法

    GN算法是一种非常常用的图结构中社群自动发现算法,最初由Girvan和Newman在2002年提出,因其有效性得到了广泛的使用。

    GN算法的基本思想是:在图结构中,首先计算每条边的“介数”,然后从图中删除“介数”最大的边,如此不断循环,一直迭代删除当前“介数”最大的边,最终就形成了发现出的社群。所谓边的“介数”,是指的图中任意两个节点的最短路径中经过这条边的次数。边的“介数”越大,则这条边是连接了两个或者多个社群或者圈子的多余的边的概率越大,所以通过不断删除高“介数”边可以达到分离社群的目的。

    GN算法是有效的算法,但是这是一种“单社群”发现方法,就是说,对于图中某个节点,只能属于固定的一个社群,不可能同时属于多个社群,这个与实际应用场景需求是有较大差异的,形成了该算法的局限。

    “最大团结构“算法

    “最大团结构”(max clique)是一种比较流行的能够进行“多社群”发现算法,即图中的节点可以同时隶属于多个不同的社群。

      “最大团结构”通过对图的拓扑结构进行分析,找到满足“最大团”性质的子图结构,也就是最大的全联通子图,每个“最大团”就是一个发现的社群。

    尽管“最大团结构”算法可以发现某个节点属于多个社群,比“单社群”发现方法有更多的实用性和应用场景,但是这个算法有其局限:因为“最大团结构”要求是全联通子图,即子图中任意两个节点都有边连接,这是一种非常强的约束。真实应用的图中往往满足如此强约束的这种图结构很小或者很少,这导致这个算法很多图中的节点无法归入某个社群。

     HipHop算法在某个步骤也采取了“最大团结构”的思想,但是通过技术手段放松了这种约束,有效地改进了其效果。

 

利用HipHop算法发现微博里的社交圈

      Hiphop算法利用微博用户的互动关系来自动挖掘某个用户的不同社交圈子。这里的“互动”是一种总称,具体互动内容包括:转发微博、评论微博和@其它用户等行为,如果用户A和用户B有任意上述提到的行为则可以认为两者有互动关系存在,且根据其频率可以赋予边不同的强度,代表了两个用户的社交亲密程度。

     我们之所以使用社交关系来挖掘社交圈,是基于以下的一个基本假设:和某个微博用户进行过交互行为的人群存在不同的小团体,而小团体成员之内有较为密切的互动行为,不同小团体之间成员之间交互行为较少。比如你的大学同学之间在微博上有较多互动行为,但是他们和你的同事之间就很少有交互行为(参考图1)。尽管这只是一种假设,但是实际挖掘效果表明大多数情况下这个假设是成立的。

     HipHop算法的技术流程可以划分为顺序进行的三个步骤:

     步骤一:从与用户有直接互动的其它用户中寻找“最大团结构”

        首先,对于某个微博用户A,所有和用户A在微博上有过直接互动行为的用户形成直接互动集合S。本步骤试图在集合S中找到多个“最大团结构”,也即挖掘多个小团体的核心成员。

对于集合S中的节点来说,可以根据他们相互之间的互动关系构造一个图G,在此基础上去挖掘图G中的“最大团结构”。所谓“团结构”,就是图G中包含的任意全连通子图,比如图G中的三个节点{a,b,c},如果他们之间任意两人都有互动关系存在,则形成了一个三节点的“团结构”。而所谓“最大团结构”,是指对于某个“团结构”T来说,无法在图G中找到任意其它节点n,如果把n纳入T,就形成更大的一个“团结构”。比如上述的三节点团结构,如果存在节点d,这个节点和a、b以及c都有互动关系,那么{a,b,c,d}就形成了一个四节点的“团结构”,而如果找不到节点能够和{a,b,c}都有互动关系,那么{a,b,c}就是一个三节点的“最大团结构”。

      图的“团结构”是一个非常强的约束,因为它要求图中任意两个节点都存在互动关系。步骤一找出的某个用户A的“最大团结构”的物理含义是:和用户A有密切关系的那些用户中,有哪些是有密切联系的小团体。

   

步骤二:“最大团结构”在直接互动用户集合的扩充

        步骤一找出了与用户A有过直接互动行为的集合S中形成的“最大团结构”,步骤二在此基础上,在集合S范围内对每个发现的“最大团结构”进行扩充,来发现更多属于某个“最大团结构”的其它用户。具体的扩充方式如下:

       对于某个具体的“最大团结构”T,其包含若干用户,首先找到和T中用户有过互动行为,同时又在集合S中的其它用户,我们简称这个集合为U。对于U中的某个用户w,我们需要判断是否应该将其扩充进入“最大团结构”T,目前的判断标准采取如下公式:




     假设G是最大团T将用户w融合后形成的新图,公式的分子部分代表新图G中所有节点内部边的权重之和,而分母部分代表图G中所有节点和图G之外的任意节点形成的所有边权重之和。如果Utility(G)函数比未扩充节点w的原图结构T的效用函数Utility(T)值大,那么我们认为将节点w扩充进入T是合理的,否则不应该将节点w扩充进入图T中。有了这个函数作为标准,我们就知道集合U中的用户哪些应该扩充进入团结构T中,而哪些应该被舍弃。

之所以采取上述公式作为判断标准,是基于之前提到的如下假设:一个社交圈子成员之间互动关系密切,而圈子成员与圈子外成员之间的互动关系不是很密切。上述公式就是这个基本假设的具体体现,分子部分是衡量圈子成员内部的关系紧密程度,而分母衡量的是圈子成员和圈子外成员的关系紧密程度。从公式可以看出,如果圈子成员之间互动越多,而与圈子外成员互动越少,则效用函数越大,也就是说这个圈子越紧密。

      如果对于集合U中所有后续扩充用户都采用上述公式进行判断取舍,来做出是否将这个用户扩充进入“最大团结构”T的决策,则就完成了T的一轮扩充,形成了扩充后的新集合T’。对于T’来说,仍然可以采取上述扩充方法不断外扩。“最大团结构”T外扩的终止条件是:如果对于集合U中所有用户,做出的决策都是不进行扩充,那么此时已经达到了扩充的边界,可以停止外扩,形成最终扩充结果。

      如果对步骤一中发现的所有“最大团结构”都采取上述方式外扩,即完成了步骤二的任务。从上述过程可以看出,步骤二是对步骤一的扩充阶段。

    步骤三:与用户有“二级互动“关系的其它用户集合中的扩充

          

        所谓用户A的“二级互动”用户集合,是指与用户A有直接互动的用户形成集合S,而与集合S中任意一个用户有互动行为的所有其他用户形成了二级互动集合。

       对于步骤二的结果来说,完成了对“最大团结构”的扩充,在直接互动用户集合中找到了不同的社交圈子。步骤三首先将直接互动用户集合S扩充为二级互动用户集合,然后采取和步骤二类似的方法继续向外扩充,这样就形成了HipHop算法的最终结果,形成了用户A的多个不同社交圈子,而任意一个其他用户B可能同时属于用户A的多个社交圈。

      通过上述三个步骤,就可以通过微博互动关系自动挖掘出某个用户的社交关系圈子。对于微博的海量用户而言,只要对每个用户都依次采取上述步骤,即可获得最终结果,这可以采取大规模并行计算来快速实现。

       下面我们用一个具体例子来说明HipHop算法。以“李开复”作为示例,说明上述步骤及其中间输出结果。

        对于步骤一,首先找到与“李开复”有过互动的微博成员形成集合S,之后在集合S里采用发现“最大团结构”的方法,可以得到最初的5个“最大团结构”:

        最大团1(创新工场有关):王肇辉/蔡学镛/周源/张亮/徐磊Ryan

        最大团2(互联网媒体相关):keso已被XX/牛立雄/金磊

        最大团3(财经投资相关):徐小平/爱国者冯军/潘石屹/杨澜

        最大团4(创新工场有关):郎春辉/罗川/袁聪iw/应用汇

        最大团5(企业家相关):曹国伟/江南春/吴征bruno/蒋锡培

      经过步骤二,对原始的5个最大团在集合S中进行扩充,每个原始的最大团都有不同程度的扩大,其新扩充进的成员范围在3-10个不等。

      步骤三首先将直接互动成员集合S扩充为二级互动成员集合,即将与集合S中成员有过互动行为的微博用户形成新的更大范围的集合。通过上文讲述的扩充方式后,5个最初的“最大团结构”获得了进一步的扩充,最后形成了包含48个到150个成员的不同社交圈子。

     经过人工评估,HipHop算法挖掘出的社交圈有较强的社交内聚度,同时也满足算法设计之初设定的几个约束条件,所以具有很强的实用性。同时,经过大量实例的分析,我们发现在微博中形成的社交关系和IM形成的社交关系有较大的差异,大部分用户的微博中的社交关系以同事关系和兴趣关系为主,而IM中形成的社交关系则以亲友、同事、同学等线下关系为主,这可能反映了社会化媒体和传统社交网络的区别所在。


作者:malefactor 发表于2013-6-29 10:15:42 原文链接
阅读:98 评论:0 查看评论

相关 [hiphop 算法 利用] 推荐:

HipHop算法:利用微博互动关系挖掘社交圈

- - CSDN博客互联网推荐文章
       /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/.                  CopyMiddle: 张俊林                    .                  TimeStamp:2012年3 月.         在微博环境下,如何自动挖掘某个微博用户的社交圈子或者兴趣圈子是个很基础且重要的问题.

利用Mahout实现在Hadoop上运行K-Means算法

- - CSDN博客云计算推荐文章
    K-Means算法是基于分划分的最基本的聚类算法,是学习机器学习、数据挖掘等技术的最基本的 知识,所以掌握其运行原理是很重要的.     转载请注明出处:  http://hanlaiming.freetzi.com/?p=144.      一、介绍Mahout.     Mahout是Apache下的开源机器学习软件包,目前实现的机器学习算法主要包含有 协同过滤/推荐引擎, 聚类和 分类三个部分.

利用归并排序算法对大文件进行排序

- - ITeye博客
归并排序算法介绍,请参照Wikipeida. 大文件分割成行数相等的两个小文件,使用递归一直分割到所有所有小文件低于限制行数. 两个排序好的小文件归并到大文件. 直到最后所有排序好的文件归并到输入的大文件并返回. 之前看了网上很多示例代码,写的很不简洁, 引入了过多的临时变量i, j, k等等, 导致程序基本没法看,.

IJCAI 2019 丨利用半参表示算法缓解推荐系统中的冷启动问题

- - 雷锋网
由于常见电商、视频等推荐系统 (淘宝首猜、优酷推荐等) 用户量巨大, 而且用户个性化兴趣差异明显, Item-CF 较于 User-CF 有着天然的巨大优势,它因此被广泛运用于推荐系统中. 常见的 Item-CF 推荐系统中, 服务器收到用户访问请求, 经解析、查询得到用户 profile(包括用户长期画像、历史足迹等) 后,通过 Item2Item、tag 等方式进行候选召回,参与后续排序和后处理.

缓存算法

- lostsnow - 小彰
没有人能说清哪种缓存算法由于其他的缓存算法. (以下的几种缓存算法,有的我也理解不好,如果感兴趣,你可以Google一下  ). 大家好,我是 LFU,我会计算为每个缓存对象计算他们被使用的频率. 我是LRU缓存算法,我把最近最少使用的缓存对象给踢走. 我总是需要去了解在什么时候,用了哪个缓存对象.

BFPRT算法

- zii - 小彰
BFPRT算法的作者是5位真正的大牛(Blum 、 Floyd 、 Pratt 、 Rivest 、 Tarjan),该算法入选了在StackExchange上进行的当今世界十大经典算法,而算法的简单和巧妙颇有我们需要借鉴学习之处. BFPRT解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分析,BFPRT可以保证在最坏情况下仍为线性时间复杂度.

贪心算法

- Shan - 博客园-首页原创精华区
顾名思义,贪心算法总是作出在当前看来最好的选择. 也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 当然,希望贪心算法得到的最终结果也是整体最优的. 虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解. 如单源最短路经问题,最小生成树问题等.

缓存算法

- 成 - FeedzShare
来自: 小彰 - FeedzShare  . 发布时间:2011年09月25日,  已有 2 人推荐. 没有人能说清哪种缓存算法由于其他的缓存算法. (以下的几种缓存算法,有的我也理解不好,如果感兴趣,你可以Google一下  ). 大家好,我是 LFU,我会计算为每个缓存对象计算他们被使用的频率.

K-Means 算法

- - 酷壳 - CoolShell.cn
最近在学习一些数据挖掘的算法,看到了这个算法,也许这个算法对你来说很简单,但对我来说,我是一个初学者,我在网上翻看了很多资料,发现中文社区没有把这个问题讲得很全面很清楚的文章,所以,把我的学习笔记记录下来,分享给大家. k-Means 算法是一种  cluster analysis 的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法.

查找算法:

- - CSDN博客推荐文章
从数组的第一个元素开始查找,并将其与查找值比较,如果相等则停止,否则继续下一个元素查找,直到找到匹配值. 注意:要求被查找的数组中的元素是无序的、随机的. 比如,对一个整型数组的线性查找代码:. // 遍历整个数组,并分别将每个遍历元素与查找值对比. 要查找的值在数组的第一个位置. 也就是说只需比较一次就可达到目的,因此最佳情况的大O表达式为:O(1).