写点什么

大规模 SNS 中兴趣圈子的自动挖掘

  • 2012-02-20
  • 本文字数:3591 字

    阅读完需:约 12 分钟

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

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

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

二.如何挖掘兴趣圈子

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

图 ****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 谱聚类算法流程

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

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

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

图 ****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 )关注我们,并与我们的编辑和其他读者朋友交流。

2012-02-20 00:0013361

评论

发布
暂无评论
发现更多内容

程序员专属的搜索主页

程序员阿杜

搜索技巧 搜索引擎;

2021京东Java面试真题:Java枚举的作用与好处

Java 程序员 面试 后端

2021年Java面试心得:Java开发工程师试用期一般多久

策划Java工程师

Java 程序员 面试 后端

2021年您应该知道的技术之一!Javafor循环乘法表

策划Java工程师

Java 程序员 面试 后端

Java磁盘文件IO

文件I/O

Fil行情:什么时候投资fil合适?

区块链 分布式存储 IPFS fil fil行情

体验设计工具:18格窗口

石云升

用户体验 7月日更 体验设计

2021Java高级面试题总结:docker运行jar包依赖和程序分开

程序员 面试 后端

2021年您应该知道的技术之一!Java工程师一天工作多久

策划Java工程师

Java 程序员 面试 后端

2021春招面试,mysql自增主键最大值

策划Java工程师

Java 程序员 面试 后端

牛客网爆火!面试命中率高达 90% 的阿里 10W 字面试笔记已被疯传

Java 程序员 架构 面试 计算机

操作系统--虚拟内存

en

2021Java面试总结!Java中VO的使用

Java 程序员 面试 后端

2021年Java面经分享:mysql创建数据表

策划Java工程师

Java 程序员 面试 后端

2021年Java面试心得:西安Java电商开发招聘

策划Java工程师

Java 程序员 面试 后端

Text classification with TensorFlow Hub: Movie reviews

毛显新

tensorflow

2021吊打面试官系列!mysql数据库版本最新

Java 程序员 面试 后端

2021年Java开发实战!Java获取系统日期时间

Java 程序员 面试 后端

Drools 入门

LeifChen

drools 规则引擎 8月日更 业务规则

程序员有哪些不可或缺的效率神器?

Jackpop

开发

2021年Java面试心得:Java基本类型对应的包装类型

策划Java工程师

Java 程序员 面试 后端

2021年“金三银四”来袭!Java开发接口利用http协议

策划Java工程师

Java 程序员 面试 后端

2021春招BAT面试真题详解,mysqlloaddata自增id

策划Java工程师

Java 程序员 面试 后端

【翻译】数据包的旅程 - 关键角色

luojiahu

交换机 路由器 OSI模型 ARP协议

redis,memcached,nginx网络组件

赖猫

nginx redis memcached 网络组件

Tensorflow日常随笔(一)

毛显新

tensorflow

2021Java高级面试题总结!Java数组添加另一个数组

Java 程序员 面试 后端

2021Java高级面试题!Java面试问题大全及答案大全下载

Java 程序员 面试 后端

2021春招BAT面试真题详解,从单体式架构迁移到微服务架构

策划Java工程师

Java 程序员 面试 后端

阿里面试官把以往的Java面试题全部总结在这份《Java10W字面试复盘笔记》里面了

Java 程序员 架构 面试 计算机

揭开进程的概念、状态、通信的迷雾。看完瞬间豁然开朗

Linux服务器开发

线程 网络编程 Linux服务器开发 Linux后台开发 进程管理

大规模SNS中兴趣圈子的自动挖掘_《架构师》月刊_张俊林_InfoQ精选文章