分享

微博“可能感兴趣的人”是怎么算出来的?

本帖最后由 nettman 于 2015-3-27 17:45 编辑

问题导读

1.这些结果是如何创造出来的?也就是推荐语料是如何生成的?
2.兴趣协同,细粒度时效性协同都是指什么?
3.总结二度关系是什么?
4.二度关系推荐存在什么问题?






本篇博客说是与@phunter_lau PK而写的,其实我无心PK,产品设计技术方案都是面向用户的,写博客也一样,单纯只想跟大家聊聊。几句话说在前头,个人不过是产品改进过程中的一个参与者,但博文将广泛涉猎。本文会有太多“个人”观点,但也仅仅是“个人”观点。

首先,介绍下我们团队负责的主要产品线:Feed流里面的“好友关注”,首页右侧的“可能感兴趣的人”,以及客户端“新的好友”页。微博的用户都应该会看到过这三个界面。

1.png

其中,“好友关注”采用投放的方式,“可能感兴趣的人”采用嵌入页面的方式,“新的好友页”则是用一个可以不停下拉的界面去支撑用户的主动行为。
第一个问题,这些结果是如何创造出来的?也就是推荐语料是如何生成的?@phunter_lau说,我们的结果只是去补充关系网络,这其实这是我们最初的方法,但现在这只是方法之一。当前出结果的方式主要分为如下几种:

二度关系:也就是“关注的关注”,“好友的好友”两种结果,这个直观上也很好解释,例如你关注了一个人,那么他所关注的人,有可能是他的朋友,有可能是他的爱好,你会有一定感兴趣的概率;

兴趣协同;如果你关注了林书豪,我们认为你可能对湖人队以及NBA感兴趣,于是给你推科比,湖人队,NBA官方账号等。主要方法是用主题模型,将用户的粉丝列表投影到一个低纬度空间。通过这个向量计算Item的相似度,再基于ItemBased协同计算备选,在这个过程中,再嵌入聚类,让结果分散在多个兴趣中;

细粒度时效性协同:如果用户关注了林书豪,我们会在较短的时间之内给用户反馈其瞬时兴趣,给其推荐他的粉丝团,贴吧等感兴趣。这里依然是ItemBased协同,通过用户的粉丝列表,计算相似度。

如上这几种方式,基于二度关系的结果用于补全与扩展用户的关系网络;兴趣协同则是挖掘用户兴趣,并对兴趣进行发散,通过发散后得到的大层面兴趣构建结果;而最后一种方式,则是用户当前兴趣的一种顺延,准确但没有惊喜。

二度关系推荐的最大问题在于,微博不仅仅是个关系网络,更是一个兴趣网络,一个人所关注的人中,最有价值的是他感兴趣的那些。例如我喜欢海贼王,NBA,所以就会关注海贼王运营号,NBA的球星,但是他们与我其实没有社交关系,他们感兴趣的人(关注的人),他们的社交圈子与我也没有太大关系。但部分情况下,二度关系依然是一种非常重要的出结果方式,短期内应该不会抛弃它。

我们也在尝试其他的方式,例如:

UserBased协同:这种协同的方式是找出与用户拥有共同兴趣的圈子,将这个圈子感兴趣的对象推荐给用户。尤其是找到与用户处于同一个圈子并且拥有较高“鉴赏能力”的节点,他们关注的人将更好;

基于图模型的方式:利用图挖掘方法,挖掘用户所处社团结构,将从属同一个社团的其它成员推荐给用户。这种方式试图克服“二度关系”的粗陋,深度探索微博的网络拓扑结构;

SVD方法:类似于兴趣协同,其根本思想是将Item的特性,用户兴趣均投影到低维度空间,通过两个向量的内积作为相关度,然而受限于效率,依然处于不成熟阶段。

等等,还有一些。是否这些就是最好的?我们也无法判断,但一直在路上。用户对于微博用户推荐系统的误解可能在于推荐理由是“间接好友”与“间接好友数”,但这只是因为我们暂时还没有想到更好的推荐理由罢了,后台已经远不限于“关系”了。
然后呢,我也聊聊预估与特征工程。

推荐系统的职能是否是做预估?预估是如此让人迷恋,模型与数据的魅惑尽在“预估”,我也爱“预估”。但“预估”不是推荐系统最重要的事情,不仅仅因为转化率与点击率等数字无法彻底代表推荐系统质量,而效果也不完全取决于算法。最重要的是,推荐系统首要问题是解决个性化需求,这往往是在推荐“语料”生成阶段解决的,而不是在“预估”阶段解决的。

也就是说,推荐系统的最大问题在“如何生成结果”,而不是“如何排序结果”。因为无法让所有的Item全部进入排序模块(Item少的推荐系统除外),那么只能在“生成结果”阶段减少结果量,显然每个人结果不同,于是这个阶段解决个性化问题是更加合适的。从推荐效果竞赛角度上看,“如何生成结果”对应单预估算法,而“如何排序结果”则对应“assembling”阶段。当然,“如何生成结果”广义上也属于“如何排序结果”,也可以算是预估(特征工程)的部分了。(未来我可能会为微博广告与推荐算法团队的特征工程积累单独撰文,但本文就不再多说了。)

在微博用户推荐架构体系中,预估也是非常重要的一个环节,一方面通过用户的属性信息进行调权,一方面用于融合多种来源的推荐结果。另外值得一提的是,我们也有两种架构方式:离线与在线。前者是基于Hadoop的一套时效性较差但数据量较大的离线计算体系,后者则是基于C/C++计算的,用于反馈用户的瞬时行为的体系。于是当前的体系如下图:

2.png

最后一个问题,为什么用户会反感?
博文里面陈述了我们的改进历程,在过去的一年里面,我们的这几个产品线,点击率关注率等数据提升都超过100%,部分已经到了200%。对现在的效果,个人比较自信,但的确有很多地方容易造成用户反感。

采用主动投放的方式:将结果投放到用户的Feed流里面,是一件非常危险的事情——打断用户要做的事。就算结果质量高,但用户没有加关注欲求,那依然让用户反感。要注意,Twitter也是做了这个功能的,但是Twitter应该只是用了ItemBased方法做了实时推荐,在用户关注一个账号不久,立即给他推荐与这个账号相关的账号。相对而言,微博的投放有点缺乏节制;

没有满足用户延续需求的界面,用户无法比较效果:Twitter有“发现”模块,里面有一个独立的找人页面,可以通过不断下拉的方式,不停的得到结果。那么,一方面,用户需要加人而又不是一个具体需求(需提需求回去搜索)会主动到这个界面找结果。一方面从产品设计上,这样的方式明显更加健康,另一方面,这些结果即使有一部分不符合自己需求,自己依然不会感到非常糟心,相反,微博信息流投放以及首页右侧展示只有两三个结果,一旦出现前女友这种,就让用户糟心死;

广告投放:为了养活这个大团队,微博不能不做广告,这个任谁也无可厚非。我们只能在用户体验与生存盈利之间取折中,部分广告结果自然不会太好,但我们会尽力而为。



加微信w3aboutyun,可拉入技术爱好者群

已有(2)人评论

跳转到指定楼层
Redgo 发表于 2015-3-30 16:09:50
回复

使用道具 举报

lml200 发表于 2015-11-25 21:17:41
感谢分享,受益匪浅
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条