推荐系统实践-利用社交网络信息

获取社交网络数据的途径:
电子邮件;用户注册信息;用户的位置信息;论坛和讨论组;即时通讯工具;社交网络
社交瓦那个罗分为3种不同的社交网络类型:双向确认的社交网络(人人),单向关注的社交网络(微博),基于社区的社交网络(豆瓣)
社交网络用户的入度近似长尾分部,这说明在一个社交网络中影响力大的用户总是占少数
社会化推荐之所以受到很多网站的重视,因为:
①好友推荐可以增加推荐的信任度;
②社交网络可以解决冷启动问题

考虑用户的熟悉程度以及兴趣相似度,用户u对物品i的兴趣pui可以通过如下公式计算:


wuv由两个部分相似度构成,一部分是用户u对用户v的熟悉程度;另一部分是用户u和用户v的兴趣相似程度。熟悉程度可以定义如下(out(u)是用户u的好友集合):

兴趣相似度定义如下:

其中N(u)是用户u喜欢的物品集合
基于图的社会化推荐算法


该图上有用户顶点(圆圈)和物品顶点(方块)两种顶点
在定义完图的顶点和边后,需要定义边的权重。其中用户之间边的权重可以定义为用户之间相似度的α倍(包含熟悉程度和兴趣相似度)。而用户和物品之间的权重可以定义为用户对物品喜欢程度的β倍。α和β需要根据应用的需求确定。

在社交网络中,还有一种关系,即两个用户属于同一个社群。如下图,可以加入一种节点表示社群,然后使用图推荐算法(比如PersonalRank)给用户推荐物品:

实际系统中的社会化推荐算法
在物品数不是很多的网站,可以很容易地讲物品相关表缓存在内存中,因此查询相关物品的代价很低,所以ItemCF算法很容易在实际环境下实现
另外有两种方法改进基于邻域的社会化推荐算法。第一种方法治标不治本,简单说就是可以做两处截断。第一处截断就是在拿用户好友集合时并不拿出用户所有的好友,而是只拿出和用户相似度最高的N个好友。此外,在查询每个用户的历史行为时,可以只返回最近一个月的行为。
第二种方法需要重新设计数据库。推特的解决方案是给每个用户维护一个消息队列(message queue),当一个用户发表一条微博时,所有关注他的用户的消息队列都会加入这条微博。所以我们可以按照如下方法设计系统:
①首先,为每个用户维护一个消息队列,用于存储他的推荐列表;
②当一个用户喜欢一个物品时,就将(物品ID,用户ID和时间)这条记录写入关注该用户的推荐列表消息队列中;
③当用户访问推荐系统时,读出他的推荐列表消息队列,对于这个消息队列中的每个物品,重新计算该物品的权重。计算权重时需要考虑物品在队列中出现的次数,物品对应的用户和当前用户的熟悉程度、物品的时间戳。
社会化推荐和协同过滤推荐系统
社会化推荐系统往往很难通过离线试验评测,因为社会化推荐的优势不在于增加预测准确度,而是在于通过用户的好友增加用户对推荐结果的信任度,从而让用户点击那些冷门的推荐结果。

目前最流行的信息流推荐算法是Facebook的EdgeRank,该算法综合考虑了信息流中每个会话的时间、长度与用户兴趣的相似度。FB将其他用户对当前用户信息流的会话产生过行为的行为成为Edge,而每一个会话权重定义为:


ue指产生行为的用户和当前用户的相似度,这里的相似度主要是在社交网络图中的熟悉度;
we指行为的权重,这里的行为包括创建、评论、like(喜欢)、打标签等,不同的行为有不同的权重;
de指时间衰减参数,越早的行为对权重的影响越低
不过ER算法的个性化因素仅仅是好友的熟悉度,并没有考虑帖子内容和用户兴趣的相似度。
为此,GroupLens的研究人员JC深入研究了信息流推荐中社会兴趣的个性化兴趣之间的关系,他的排名考虑了如下因素:
①会话的长度;
②话题的相关性;
③用户熟悉程度
试验结果说明,综合考虑用户的社会兴趣和个人兴趣对于提高用户满意度是有帮助的
基于好友的推荐算法可以用来给用户推荐提名在现实中互相熟悉,而在当前社交网络中没有联络的其他用户。
对于用户u和v,我们可以用共同好友比例计算他们的相似度:

def FriendSuggestion(User, G, GT):
    suggestions = dict()
    friends = G[user]
    for fid in G[user]:
        for ffid in GT[fid]:
            if ffid in friends:
                continue
            if ffid not in suggestions:
                suggestions[ffid] = 0
            suggestions[ffid] += 1
    suggestions = {x:y / math.sqrt(len(G[user])*len(G[x])for x,y in suggestions)}

但在微博这种有向社交网络中,这两个集合就不同了,因此也可以通过in(u)定义另一种相似度:



同时,我们也可以定义第三种有向的相似度:



但是,这个相似度有一个缺点,就是该相似度的定义下所有人都和名人有很大的相似度,因此可以用如下相似度:

这些相似度的计算无论时间复杂度还是空间复杂度都不是很高非常适合在线应用使用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容