转自:http://www.infoq.com/cn/articles/zjl-sns-automatic-mining

一.为何要在大规模SNS中挖掘兴趣圈子

随着国外的facebook、twitter以及国内的人人、新浪微博等SNS及内容分享平台的逐步流行,如何从上亿的海量用户中自动挖掘兴趣圈子成为了一个有趣也非常必要的工作。所谓“兴趣圈子”,指的是在同一分享平台下,有着共同的兴趣爱好的用户群体,比如新浪微博里哪些用户是对云计算感兴趣的?他们是否形成了一个密切交互的圈子?对这些信息的挖掘是很有趣也很有实际用处的。

如果能够从海量用户中通过自动手段挖掘出一个个的兴趣圈子,对于很多具体应用来说是非常重要的基础数据,比如可以利用用户所属兴趣圈子进行感兴趣人物推荐,或者根据所属圈子的群体特性分析用户的个人兴趣点等,所以在SNS平台下,如何对海量数据自动进行兴趣圈子挖掘是个非常有用的基础功能。

二.如何挖掘兴趣圈子

现在的问题是:给定海量用户,如何才能挖掘出具有相似兴趣的圈子?我们基于微博用户的互动信息,构建了一整套兴趣圈子挖掘算法,并取得了较好的挖掘效果。如果把每个用户想象成一个巨大的图中一个节点,如果用户A对用户B有互动行为(转发,评论等),我们可以在用户A和用户B之间建立一条有向边,通过这种方式可以构建出有上亿节点,几十亿边的巨大的有向图。挖掘兴趣圈子就是在这样的巨图中进行的。我们把兴趣圈子挖掘转换为一个图切割问题的具体应用。图1是这个思路的简化图示例。

 

兴趣图例子

2.1 图切割问题

图切割问题本质上是一个聚类问题,几乎所有聚类算法的基本思想都是相近的:给定一批数据,自动对数据进行聚类,使得聚合到同一类别的数据之间比较相似,而不同类别之间的数据差异较大。图切割问题也符合这个定义,等于是将图中节点进行聚类,把密集相连的一批节点聚合到一起,而连接比较稀疏的节点尽可能划分到不同的类别中。

如果用相对形式化的语言来描述的话,图切割问题就是:给定n个点(x1, x2…,xn),聚类的目标是将这n个点分成k个簇,使得同一簇中的数据点比较相似,不同簇间的数据点比较相异。如果按照节点之间的兴趣相似度构建关系图G(V, E),问题就转化为了在图G上做划分,将图G分成k个子图A1,A2,…Ak,使得划分后子图内包含边的总权值尽可能高,而子图之间边的权重尽可能小。在图1所示的例子中,标为相同颜色的节点可被视为聚合到相同子图中,边的权值直观表示为边的长度,即边越长,两个节点距离越远,即其相似性越小,也就是说其边的权值小。

图切割算法有很多,比如min-cut,min-max cut,ratio cut等等,我们采用了谱聚类算法来挖掘用户兴趣圈子。

2.2谱聚类算法

谱聚类算法和很多其他距离算法相比有很多优点,下文会详述此点,同样的,谱聚类也适合解决图切割问题。

谱聚类有个比较有趣的特性,即这个算法可以将图切割问题转换为求由图形成的矩阵的特征值和对应的特征向量问题,这样就把图切割问题转换为矩阵特征值求解及在其基础上的聚类问题。

谱聚类算法流程

图2是利用谱聚类进行兴趣圈子挖掘的算法流程示意图,首先我们获得用户之间的互动数据,由于谱聚类只能处理无向图,而用户之间的互动数据是有向的,所以首先根据一定规则将有向图转换为无向图,之后就形成了所有用户的兴趣相似性图。根据谱聚类算法要求,将这个相似性图转换为拉普拉斯矩阵,然后对这个矩阵求其前K个特征值及其对应的特征向量,求解前K个特征向量s1,s2,…,sk,组成矩阵S[n][k](n为用户编号),这样就将一个原本是n*n的矩阵转换为小很多的n*k矩阵,对S按行进行Kmeans聚类,每一行对应相似兴趣图中一个节点。其最终聚类结果就是谱聚类最终的输出结果。

之所以采取谱聚类来解决这个问题,源于这个算法本身具有的一些优点,比如:

  1. 谱聚类具有坚实的理论基础:图谱理论
  2. 谱聚类不含凸球形数据分布的隐性假设,而常见的很多聚类算法比如KMeans, EM算法都存在这一假设。比如对于图3所示的例子中,谱聚类的聚类效果比较好。

非凸球形数据

由于谱聚类具备独特的优点,所以近来应用非常广泛(语音识别、文本挖掘等),但是谱聚类的计算复杂度还是较高,所以面对海量数据,如何能够快速计算是个问题。

为了能够处理上亿的海量数据,我们主要采取了两项措施来对原始算法进行改造,首先是利用MPI平台构建分布式计算系统,对于这种计算密集型迭代式应用,通常hadoop平台被认为是不太合适的,所以通过构建MPI分布式平台来加快数据的分布以提升计算速度。

第二项主要改进措施是将谱聚类由平面型聚类(flat)改造为层次聚类(hierarchy),其基本思想也很简单,即通过多次谱聚类迭代,首先将一个巨大的图划分为较少数的密集子图,然后针对每个密集子图再次迭代使用谱聚类来递归地将其划分为较小的密集子图,通过几个层级的切割,也可以有效增加分布式计算效果并大大提快整体运行效率。

当然,除了以上两项主要改进措施,还包含一些相对细小的改进,在此就不赘述细节了。

2.3应用谱聚类在SNS中挖掘兴趣圈子

正像上文所述,大规模SNS用户中挖掘兴趣圈子的问题可以进一步抽象为用户兴趣图的一个图切割问题,我们通过对谱聚类处理大规模数据进行了技术改进后,使得这项技术可以在多机并行环境下较快地处理上亿规模数据的图切割,在兴趣圈子自动挖掘方面既实现了较好的挖掘效果,又能够使得算法处理真实世界的大规模数据,使其在现实中可行而非仅仅停留在小规模数据处理的学术研究阶段。

下面给出三个使用上述技术在新浪微博平台挖掘出的兴趣圈子,因为实际的兴趣圈子很大(大部分包含几十到几百个节点),所以只列出了兴趣圈子的一部分,从这些例子可以看出其效果还是比较理想的。

用户微博ID

微博名

身份说明

1197161814

李开复

创新工场董事长兼首席执行官

1656232852

JackF2

创新工场豌豆实验室 联合创始人

1738208940

宓金华

创新工场魔图精灵项目负责人

1652837301

徐磊Ryan

布丁 创始人 CEO 原创新工场战略发展部总经理

1642333010

张亮

创新工场投资经理;Apple4us 发起人

1926746140

许红梅Grace

创新工场人力资源部副总裁

1650741047

cuijin

创新工场市场总监崔瑾

1676705655

裘伯纯Benjamin

创新工场法务负责人裘伯纯

1751792424

dikanggu

创新工场员工

1419563143

zouyu9631

创新工场员工

......................................

   

1 “李开复所属兴趣圈子

用户微博ID

微博名

身份说明

1656809190

赵薇

著名演员,代表作《画皮》《还珠格格》等

1829847745

一号立井

李亚鹏

1679085395

邓讴歌

太合麦田音乐制作人

1719232542

那英

内地流行乐天后

1629810574

veggieg

王菲

1496813600

老焦爱民

《杜拉拉升职记》制片人

1768955554

张扬张杨

著名导演

1262945510

廖凡

演员廖凡

1919269943

王一涵

北京中艺博文化传播有限公司董事长兼总经理

1497323383

磨刀哎呦霍霍

编剧霍昕

..............................

   

2 "赵薇"所属兴趣圈子

用户微博ID

微博名

身份说明

1922397344

白硕sse

上海证券交易所总工程师,IR与NLP专家

1937618377

林鸿飞

大连理工大学电子信息与电气工程学部 副部长

1684953923

关毅的围脖

哈尔滨工业大学计算机学院教授、博士生导师关毅

1936526225

王斌_ICTIR

中国科学院计算技术研究所副研究员,博士生导师王斌

1808067361

ITNLP

哈尔滨工业大学智能技术与自然语言处理(ITNLP)研究室

1970879995

孙茂松

清华大学计算机科学与技术系教授、中国中文信息学会副理事长孙茂松

1788077877

张颖峰

上海载和网络科技有限公司 研发总监

1340489195

韩先培

中国科学院软件所助理研究员

1497035431

梁斌penny

清华大学计算机科学与技术系在读博士;《走进搜索引擎》《深入搜索引擎》作者,THUIRDB的Coder。

1064649941

张俊林say

《这就是搜索引擎:核心技术详解》作者。本文作者。

.............................

   

3 “自然语言处理与信息检索兴趣圈子

通过大量的聚类数据分析,使用互动数据构建用户兴趣图得出的兴趣圈子大部分属于以下两种类型:一种类型是同事朋友圈子,这是因为线下关系迁移到网络的体现;另外一种比较常见的是兴趣类似的微博用户,比如NLP圈子,NOSQL圈子这种根据讨论技术确定的兴趣圈子等,这是由于共同关注相似话题并经常互动形成的。

三.结束语

大规模SNS与内容分享平台中如何自动挖掘兴趣圈子是个很有趣也非常必要的功能,现有公开文献很少提及超大规模数据如何实现自动挖掘的算法,大多数是在10万以下规模数据进行的研究工作,本文简述了在新浪微博平台通过改造的谱聚类进行的大规模兴趣圈子挖掘,实践表明取得了很好的挖掘效果。当然,现有系统还面临一些问题,比如属于硬聚类,即每个用户只能隶属于一个兴趣圈子,而实际上很可能一个用户属于多个兴趣组中,所以我们面对大规模数据的软聚类,也在进行进一步的研发与改进。

关于作者

张俊林,《这就是搜索引擎:核心技术详解》作者、新浪微博研发人员。


感谢张龙对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

大规模SNS中兴趣圈子的自动挖掘的更多相关文章

  1. 【新词发现】基于SNS的文本数据挖掘、短语挖掘

    互联网时代的社会语言学:基于SNS的文本数据挖掘 python实现 https://github.com/jtyoui/Jtyoui/tree/master/jtyoui/word  这是一个无监督训 ...

  2. [转]在MyEclipse中设置struts.xml自动提示功能

    导入标签:<%@ taglib uri="/struts-tags" prefix="s" %> 要想在MyEclipse中实现struts.xml ...

  3. Eclipse中的Web项目自动部署到Tomcat

    原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写博客,现在感觉还是很有必要的,编程中每个人对于犯过的错误 ...

  4. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  5. openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)

    workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...

  6. Eclipse中的Web项目自动部署到Tomcat(转)

    转自:http://www.cnblogs.com/ywl925/p/3815173.html 问题: 这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中.在Eclipse中做 ...

  7. 在 jupyter 中添加菜单和自动完成功能

    在 jupyter 中添加菜单和自动完成功能 参考文档http://www.360doc.com/content/17/1103/14/1489589_700569828.shtmlhttp://to ...

  8. 如何在myeclipse中实现jquery的自动提示功能

    在web开发过程中,myeclipse中jsp可以实现自动提示功能,但是jquery代码却无法实现自动提示,需要自己一个个手动去输入,效率过低,怎么办? 工具/原料   jquery 1.8.3.js ...

  9. 在SVNX中实现$Ids的自动替换

    在PHPstorm中实现$Ids的自动替换 ①.打开SVN的配置文件. [miscellany] enable-auto-props = yes [auto-props] .c = svn:keywo ...

随机推荐

  1. tomcat配置问题:访问http://localhost:8080/ 遇到 Access Error: 404

    win7: 8080端口已经被其他应用使用,比如nixxxxxxxxxxxxx When I had an error Access Error: 404 -- Not Found I fixed i ...

  2. mysql 日期 字符串 时间戳转换

    #时间转字符串 select date_format(now(), '%Y-%m-%d'); -02-27 #时间转时间戳 select unix_timestamp(now()); #字符串转时间 ...

  3. Centos 安装Percona Toolkit工具集

    1.下载 下载地址:   https://www.percona.com/downloads/percona-toolkit/LATEST/ [root@bogon ~]# wget https:// ...

  4. 再谈JavaScript中的闭包

    一.什么是闭包 闭包就是有权访问另一个函数作用域中变量的函数,因此,闭包的本质是一个函数.当一个内部函数被保存到外部时,就会生成闭包. 二.闭包的作用 1.实现公有变量,即通过局部变量实现全局变量的效 ...

  5. SQL 版本说明

    http://www.cnblogs.com/SameZhao/p/6184924.html The ProductMajorVersion产品主版本号 如: 12为 SQL SERVER 2014 ...

  6. 【python】安装Python 的IDE--PyCharm

    [百度网盘-技术-pycharm破解需要的有安装包和破解jar] ================================================== 安装Tensorflow开发环境 ...

  7. Quartz:不要重复造轮子,一款企业级任务调度框架。

    背景 第一次遇到定时执行某些任务的需求时,很多朋友可能设计了一个小类库,这个类图提高了一个接口,然后由调度器调度所有注册的接口类型,我就是其中之一,随着接触的开源项目越来越多,我的某些开发习惯受到了影 ...

  8. 无线通信中FEC 编码原理及评价

    转自:http://blog.csdn.net/wiznet2012/article/details/7492146 大家好,前面我们给大家介绍了无线通信中FEC编码原理(1)和(2),今天继续献上F ...

  9. mysql 比较函数和操作符

    MYSQL之中的比较函数和操作符: 1.[NOT] BETWEEN ... AND ...  Check whether a value is within a range of values 说明: ...

  10. windows下apk查看工具的原理

    游戏出了版本之后,提供给渠道,有部分渠道会修改包名(当他们内部系统做出调整后,可能会改包名),这个时候我又需要知道包名.之前没办法,试图反编译apk,发现失败了.然后就安装apk到手机上,手机上再下载 ...