[推荐系统]利用社交网络数据

获取社交网络数据的途径

电子邮件

电子邮件是一种社交工具,可以通过邮箱的后缀得到一定的社交关系信息。一种隐性的社交网络数据。

用户注册信息

注册信息,比如公司、学校等,可以知道哪些用户曾经在同一家公司工作过,在同一个学校学习。。。这也是一种隐性的社交网络数据。

用户的位置数据

用户位置信息就是IP地址。对于手机等移动设备,可以拿到更详细的GPS数据。位置信息也是一种反应用户社交关系的数据。可以合理地假设同一栋宿舍楼或同一家公司的用户可能有好友关系。

论坛和讨论组

如果两个用户在讨论组中曾经就某一个帖子共同进行过讨论,那就更加说明他们之间的熟悉程度或兴趣相似度很高。

即时聊天工具

用户在即时聊天工具上会有一个联系人列表,而且往往还会给联系人进行分组。通过这个列表和分组信息,我们就可以知道用户的社交网络关系,而通过统计用户之间聊天的频繁程度,可以度量出用户之间的熟悉程度

但是,即时聊天工具是一个封闭系统,获取用户的即时聊天信息是非常困难的,存在很多隐私问题。一般来说,绝大部分用户不会公开他们的联系人列表和聊天记录。

社交网站

它们允许创建一个公开的页面介绍自己,并默认公开用户的好友列表;大大降低了隐私问题,同时也一定程度上开放了社交关系。 社交网站的另一个好处是自然地减轻了信息过载问题。在社交网站中,可以通过好友给自己过滤信息。比如,我们只关注那些和我们兴趣相似的好友,只阅读他们分享的信息,因此可以避免阅读很多和自己无关的信息。个性化推荐系统可以利用社交网站公开的用户社交网络和行为数据,辅助用户更好地完成信息过滤的任务,更好地找到和自己兴趣相似的好友,更快地找到自己感兴趣的内容

  1. 社会图谱和兴趣图谱

Facebook和Twitter作为社交网站中的两个代表,代表了不同的社交网络结构。在Facebook里,人们的好友关系一般都是自己在显示社会中认识的人,比如亲戚、同学、同事等,而且Facebook中的好友关系是需要双方确认的。在Twitter里,人们的好友往往都是现实中自己不认识的,只是出于对对方的言论感兴趣而建立好友关系,好友关系也是单向的关注关系。以Facebook为代表的社交网络称为社交图谱(social graph),以Twitter为代表的社交网络称为兴趣图谱(interest graph)

但是,每个社会化网站都不是单纯的社交图谱或兴趣图谱

社交网络数据简介

社交网络定义了用户之间的联系,可以用图定义社交网络。用图G(V,E,w)定义一个社交网络,其中V是顶点集合,每个顶点代表一个用户,E是边集合,如果用va和vb有社交网络关系,那么就有一条边e(va,vb)连接这两个用户,而w(va,vb)定义了边的权重。双向关系可以用无向图表示,单项好友关系用邮箱图表示。 此外,对图G中的用户顶点u,定义out(u)为顶点u指向的顶点集合(微博中out(u)就是用户u关注的用户集合),定义in(u)为指向顶点u的顶点集合(也就是关注用户u的用户集合)。无向社交网络中显然有out(u)=in(u).

一般来说,有3种不同的社交网络数据:

  • 双向确认的社交网络数据:以Facebook、QQ、微信为例,用户A和用户B形成好友关系需要通过双方的确认。这种社交网络一般可以通过无向图表示。
  • 单向关注的社交网络数据:以Twitter、微博、知乎为例,用户A可以关注用户B而不需要得到用户B的允许,这种社交网络中的好友关系是单向的,可以通过有向图表示。
  • 基于社区的社交网络数据:用户之间并没有明确的关系,但是这种数据包含了用户属于不同社区的数据。比如,在同一家公司工作的人,或是同一个学校毕业的人等。

社交网络数据中的长尾分布:社交网络中用户的入度(in degree)和出度(out degree)的分布满足长尾分布。

基于社交网络的推荐

社会化推荐的优点:

  • 好友推荐可以增加推荐的信任度:好友往往是用户最信任的。
  • 社交网络可以解决冷启动问题:当一个新用户通过微博登录网站时,可以从社交网站中获取用户的好友列表,然后给用户推荐好友在网站上喜欢的物品。从而可以在没有用户行为记录时就给用户提供较高质量的推荐结果,部分解决了推荐系统的冷启动问题.

社会化推荐的缺点,主要是很多时候并不一定能提高推荐算法的离线精度(准确率和召回率)。特别是在基于社交图谱数据的推荐系统中,因为用户的好友关系不是基于共同兴趣产生的,所以用户好友的兴趣往往和用户的兴趣并不一致。

基于邻域的社会化推荐算法

给定一个社交网络和一份用户行为数据集,其中社交网络定义了用户之间的好友关系,用户行为数据集定义了不同用户的历史行为和兴趣数据。最简单的算法是给用户推荐好友喜欢的物品集合。即用户u对物品i的兴趣pui可以表示为: $p_{ui} = \sum_{v \in out(u)}rvi$ 其中out(u)表示用户u的好友集合,如果用户v喜欢物品i,rvi=1,否则rvi=0.但是,不同的好友和用户u的熟悉程度和兴趣相似度不尽相同。应该在推荐算法中考虑好友和用户的熟悉程度以及兴趣相似度: $p_{ui} = \sum_{v \in out(u)}w_{uv}r_{vi}$ 其中,wuv由两部分组成,一部分是用户u和用户v的熟悉程度,另一部分是用户u和用户v的兴趣相似度。用户之间的熟悉程度描述了用户u和用户v在现实社会中的熟悉程度熟悉度可以用用户之间的共同好友比例来度量。如果用户u和用户v很熟悉,那么一般来说他们有很多共同好友。 $familiarity(u,v) = \frac{|out(u) \cap out(v)|}{|out(u) \cup out(v)|}$

用户之间的兴趣相似度可以通过和UserCF类似的方法度量,即如果两个用户喜欢的物品集合重合度很高,两个用户的兴趣相似度就高。 $similarity(u,v) = \frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|}$ 其中,N(u)是用户u喜欢的物品集合。

基于图的社会化推荐算法

图模型的优点是可以将各种数据和关系都表示到图上去。在社交网站中存在两种关系,一种是用户对物品的兴趣关系,一种是用户之间的社交网络关系。

社交网络图+用户物品二分图

用户和用户之间边的权重可以定义为用户之间相似度的alpha倍(包括熟悉程度和兴趣相似度),用户和物品之间权重可以定义为用户对物品喜欢程度的beta倍。alpha和beta需要根据应用的需求确定,希望用户好友的行为对推荐结果产生比较大的影响,选择比较大的alpha,相反,希望用户历史行为对推荐结果产生比较大的影响,选择比较大的beta。

实际系统中的社会化推荐算法

基于邻域的社会化推荐算法看起来非常简单,但在实际系统中却很难操作,主要是因为该算法需要拿到用户所有好友的历史行为数据.因为大型网站中用户数目非常庞大,用户的历史行为记录也非常庞大,不太可能将用户的所有行为都缓存在内存中,只能在数据库前做一个热数据的缓存。如果需要比较实时的数据,这个缓存的数据就要比较频繁地更新,因而避免不了数据库的查询,数据库查询一般是很慢的。

可以从几个方面改进基于邻域的社会化推荐算法,让他能够具有比较快的响应时间。改进方向有两种。一种治标不治本。可以做两处截断。第一处截断-在拿用户好友集合时并不拿出用户所有的好友,只拿出和用户相似度最高的N的好友(N可以去一个比较小的数)。从而给该用户做推荐时可以只查询N次用户历史行为借口。第二次截断–在查询每个用户的历史行为时,可以只返回用户最近1个月的行为,就可以在用户行为缓存中缓存更多的历史行为数据,从而加快查询用户历史行为借口的速度。此外,还可以牺牲一定的实时性,降低缓存中用户行为列表过期的频率。 第二种方法需要重新设计数据库。社会化推荐中关键的操作就是拿到用户所有好友的行为数据,然后通过一定的聚合展示给用户

设计方案:

  • 首先,为每个用户维护一个消息队列,用户存储他的推荐列表;
  • 当一个用户喜欢一个物品时,就将(物品ID、用户ID和时间)这条记录写入关注该用户的推荐列表消息队列中;
  • 当用户访问推荐系统时,独处他的推荐列表消息队列,对于这个消息队列中的每个物品,重新计算该物品的权重。考虑物品在队列中出现的次数、物品对应用户与当前用户的熟悉程度、时间戳。计算每个物品被哪些用户喜欢过,作为物品的推荐解释。

信息流推荐

信息流的个性化推荐要解决的问题就是如何进一步帮助用户从信息墙上挑选有用的信息。

目前最流行的信息流推荐算法是Facebook的EdgeRank,该算法综合考虑了信息流中每个会话的时间、长度与用户兴趣的相似度。Facebook将其他用户对当前用户信息流中的会话产生过行为的行为称为edge一条会话的权重定义为: $\sum_{edges e}u_ew_ed_e$

其中:

  • ue指产生行为的用户和当前用户的相似度,主要指在社交网络图中熟悉度;
  • we指行为的权重,行为包括创建、评论、like、打标签等。不同行为有不同权重;
  • de指时间衰减参数,越早的行为对权重的影响越低。

如果一个会话被你熟悉的好友最近产生过重要的行为,它就会有比较高的权重。

EdgeRank算法的个性化因素仅仅是好友的熟悉度,它并没有考虑帖子内容和用户兴趣的相似度。EdgeRank仅仅考虑了“我”周围用户的社会化兴趣,而没有重视“我”个人的个性化兴趣。

综合考虑用户的社会兴趣和个人兴趣对于提高用户满意度是有帮助的。当在设计社交网站中的推荐系统时,可以综合考虑这两个因素,找到最合适的融合参数来融合用户的社会兴趣和个人兴趣,从而给用户提供最令他们满意的推荐结果。

给用户推荐好友

好友推荐系统的目的是根据用户现有的好友、用户的行为记录给用户推荐新的好友,从而增加整个社交网络的稠密程度和社交网站用户的活跃度。好友推荐模块已经成为社交网站的标准配置之一。

好友推荐算法在社交网络上被称为链接预测(link prediction).

基于内容的匹配

给用户推荐和他们有相似内容属性的用户作为好友。常用的内容属性有:

  • 用户人口统计学属性,包括年龄、性别、职业、毕业学校和工作单位等。
  • 用户的兴趣,包括用户喜欢的物品和发布过的言论等。
  • 用户的位置信息,包括用户的住址、IP地址和邮编等。

基于共同兴趣的好友推荐

在Twitter和微博为代表的以兴趣图谱为主的社交网络中,用户往往不关心对于一个人是否在现实社会中认识,而只关心是否和他们有共同的兴趣爱好。因此,在这种网站中需要给用户推荐和他有共同兴趣的其他用户作为好友。

计算用户之间的兴趣相似度,主要思想是如果两个用户喜欢相同的物品,则具有相同的兴趣。

基于社交网络图的好友推荐

最简单的方式是给用户推荐好友的好友。 基于好友的好友推荐算法可以用来给用户推荐他们在现实社会中互相熟悉,而在当前社交网络中没有联系的其他用户

对于用户u和用户v,可以用共同好友比例来计算他们的相似度: $w_{out}(u,v) = \frac{|out(u) \cap out(v)|}{\sqrt{|out(u)||out(v)|}}$

$w_{out}(u,v)$公式中out(u)指在社交网络中用户u指向的其他好友的集合。定义in(u)为在社交网络图中指向用户u的用户集合。在无向网络图中,两个集合相同;但在微博这种有向网络图中,这两个集合就不同,因此可以用in(u)定义另一种相似度: $w_{in}(u,v) = \frac{in(u) \cap in(v)}{\sqrt{|in(u)||in(v)|}}$

这两种相似度的定义有着不同的含义,用微博中的关注来解释这两种相似度。如果用户u关注了用户v,那么v就属于out(u),而u就属于in(v)。因此, wout(u,v)越大表示用户u和v关注的用户集合重合度越大,而win(u,v)越大表示关注用户u和关注用户v的用户的集合重合度越大。 前两种相似度是对称的,win(u,v)=win(v,u);wout(u,v)=wout(v,u). 第三种有向的相似度: $w_{out,in}(u,v) = \frac{|out(u) \cap in(v)|}{|out(u)|}$

这个相似度的含义是用户u关注的用户中,有多大比例也关注了用户v。有一个缺点,就是在该相似度的定义下所有人都和名人有很大的相似度.因为没有考虑|in(v)|的大小,修正: $w_{out,in}^{‘}(u,v) = \frac{|out(u) \cap in(v)|}{\sqrt{|out(u)||in(v)|}}$

社交网络研究中有两个最著名的问题。第一个是如何度量人的重要性,也就是社交网络顶点的中心度(centrality),第二个问题是如何度量社交网络中人和人之间的关系,也就是链接预测

您的支持就是我更新的最大动力!谢谢!