Web 2.0社交相关性排序算法探秘
FriendFeed最近推出了搜索功能,相信Facebook不久之后也会跟进。
对社交网络的“活动流(streams of activities,指人们在社交网络中所从事的一系列活动信息)”进行实时搜索是当前的一大热点,包括谷歌和微软在内的所有互联网企业都意识到,将自己信赖的人当做过滤器来使用的价值所在。实时搜索曾一度被称作社交搜索,如今它正在逐渐发展壮大。它将首先被用于“活动流”,随后则会被应用于整个网络。
社交相关性排序算法(Social Relevancy Rank)即将诞生。届时,当你搜索“活动流”时,所得的结果不会再按照时间顺序排列,而是会根据每条信息与用户的“社交图谱(social graph)”之间的相关性来排列。也就是说,那些与你关系更为紧密的人将会排在前面。这种模式的流程如何?实际上,需要通过一个算法,就像谷歌的Page Rank一样。
以好友为依据
将你所关注的人排在搜索结果的前端是一种显而易见的做法,但Twitter目前仍未采用。现在,当你在Twitter上搜索“Wilco”时,所得的结果会按照时间先后排列。这种方式其实并没有很好的体现“相关性”,因为搜索结果中的多数信息都来自于陌生人。但如果所列信息来自于你所关注的人,那么搜索结果就将更为有用。
Twitter目前并不支持这种模式,但FriendFeed却已经很好地采纳了这一模式。FriendFeed会根据用户的社交图谱对搜索结果进行过滤。对于FriendFeed而言,要做到这一点并不困难。一方面,它了解你所关注的人;另一方面,它会将高端feed搜索技术整合到了用户的社交图谱中。
这种方式听起来很很棒,但也存在一个问题。搜索“Wilco”时,效果不错,因为这支乐队刚刚推出了新专辑,但是很多其他的关键词却无法返回任何结果。道理很简单,你在Facebook上的好友以及在Twitter上所关注的人不可能对你所感兴趣的每个话题都发表评论。问题在于数据稀疏,也就是缺乏可信赖的观点。
寻找更多数据来源
很明显,想要解决数据稀疏的问题就需要更多的数据。解决方案之一就是整合其他可信赖的资源,比如拓宽社交图谱。例如,搜索结果所列的内容未必来自于你直接关注的人,它还会包含那些你关注的人所关注的其他人。在Facebook中,就是所谓的“好友的好友”。你或许会认为,自己并不熟悉这些人的观点,因而并不信任他们,但“六度分隔理论”表明,人们的社交圈都很小,因此,这类内容通常会拥有相同的价值。
还有一种社交相关性排序算法是将兴趣类似的人整合到一起,这也就是所谓的“兴趣邻居(taste neighbors)”。这种方法在垂直社交网络中非常普遍,例如Last.fm、Flixster和Goodreads等。这些网络都能够帮助你了解,除好友之外还有哪些人与你类似。然而,这种运算成本较高,而且非常耗时。如果Twitter要完成类似的功能,就需要根据人们所发布的链接和Twitter信息的语义来判定。即使这一问题非常棘手,但随着时间的推移,应该可以解决。
群体因素
除了使用社交图谱的“第二度”和“兴趣邻居”外,社交相关性排序还可以为具有影响力的人赋予更高的权重。在缺乏任何其他衡量标准时,那些拥有数十万名关注者的人有可能会比其他陌生人具备更高的相关性。使用关注者的数量来衡量剩余的“活动流”是一种不错的方式。
总之,将来自陌生人的无数信息机械地整合在一起并非上策。正如人们很少会查看谷歌搜索第一页以后的内容一样,以时间顺序排列的Twitter信息也将很快令人厌倦。社交相关性排序需要将群体的共同感受考虑进来,以此来提供一种过滤标准,从未为你提供更多的结果。
完美算法
相关推荐
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。