社交网络SNS的好友推荐算法



花了几天看了些作社交的好友推荐,如今不少App都有社交场景,自己就是作用户的场景,因此之后确定要在这块有一些应用。像早期的论坛类的更偏重资讯类的信息,后来像优酷土豆这又是作视频类,网易云音乐作音乐类。豆瓣相对来讲还比较全一些,有包含资讯、音乐电台等这些。也用了一些其余作社交场景的App,包括像脉脉、钉钉这些。感受不是太好,具体缘由就是都不是什么认识的人,活跃度也不高。不少App基本上就是属于少数意见领袖,这些人有大量的粉丝。而还有一帮大量用户,他们粉丝很少活跃也不高。本质上来讲,仍是没有找到他们感兴趣的内容。就跟昨天同样,忽然腾讯视频给我推了下2007出的《远古入侵》,这推的太给力了!一部科幻、时空穿越、冒险题材的英剧就应该推给我这样tag的用户。html

咱们平时光计算用户的关系亲密度,好比二者的SNS互动次数、媒介场景关系度、地理位置相关度,这些缺陷都很依赖用户之间的活跃程度。后来又有人提出了好友的好友、圈子、共同兴趣、共同话题等方面角度进行研究。实际场景中咱们也是会结合 “社交”+“兴趣”两点平衡,找到一个比较融合的权衡,推荐用户感兴趣的content。算法


计算共同好友比例

通常最简单推荐好友就是计算二者有哪些共同好友,若是共同好友不少天然就认识的几率很大。好比我和Jackie是同窗,可是咱们可能都由于用Facebook时间不长,可能都没相互添加,那就能够计算我和Jackie之间发现同窗的占比是多少。包括像同事、家人、朋友等等都差很少。在社交网络中, 能够根据现有的社交网络图给用户推荐新的好友, 好比给用户推荐好友的好友。基于好友的好友推荐算法能够用来为用户推荐在现实社会中相互熟悉而在当前社交网络中没有联系的其余用户。例如使用人人网时, 常常看到一些久未联系的老同窗出如今推荐好友列表中。网络

优势是简洁、易实现, 效果明显。可是其缺点也是显而易见的, 若是用户好友人数不够多, 那么不管是为其推荐其余好友或者将其推荐给其余人都会变得很难。其次是该算法只是关注“ 人” 的因素而忽略了其余因素, 可能影响所推荐好友的准确性。性能

最简单的好友推荐算法是为用户推荐共同好友数最多的用户。其基本思想是, 用户之间的共同好友越多, 则他们越多是好友。因为这种方法受用户好友总数影响较大, 所以一般根据共同好友比例计算类似度来推荐好友。网站

在Twitter和新浪微博等有向社交网络中, 用户u关注的人out(u)和关注用户u的人in(u)是两个不一样的集合, 所以使用共同好友比例计算类似度有三种不一样形式, 本文采用出度的方法, 用户u和用户v的共同好友比例fuv表示为:视频


社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

其中, out(u)表示用户u关注的用户集合, out(v)表示用户v关注的用户集合。out(u)∩ out(v)表示两个集合的交集。|out(u)|和|out(v)|分别表示集合out(u)和out(v)的元素个数。htm


互动次数

无论人们有多少共同好友, 都没法肯定是否会一直与其保持联系。社交网站倾向于促使用户尽量多地与别人产生互动, 这样他们就能看到并从中提取信息。若是两我的之间没有互动, 很难称得上朋友。blog

社交网络中用户之间的互动包括消息、评论、转发和收藏等形式, 转发和评论等行为在必定程度上表明着信息对于用户的吸引力, 评论与转发等一般有不一样的权重, 为了简化计算, 这里对消息、评论和转发取相同权重。ci

用户u与用户v之间的互动状况iuv能够用二者之间互动次数占用户u和用户v所有互动行为的比例来表示, 本文提出的互动比例计算方法以下:get


社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

其中, interact(u, v)表示用户u对用户v的互动次数, interact(u)表示用户u对全部用户的总互动次数。两用户之间互动次数用单向互动次数的平均值表示。

社交兴趣度


本文对根据社交图谱计算用户类似度的传统方法进行改进, 从共同好友和互动状况两方面来表现用户之间的关系亲密程度, 从而计算出目标用户对待推荐用户的社交兴趣度, 以此描述目标用户和待推荐用户成为好友的可能性。

创建n个用户之间的关系矩阵A, A是一个n× n矩阵, 其中, 若是用户u和v是好友关系(或用户u关注了用户v), 则auv=1, 不然auv=0。矩阵A中第u行ua= (au1, au2, , aun)反映了用户u的好友关系。

社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

。其中, fuv表示用户之间的共同好友比例, iuv表示用户之间的互动状况比例。α 是综合共同好友比例和互动比例的参数, 其取值范围为[0, 1], 不一样数据集中α 可能有不一样的最佳值, 可根据经验取值或者在特定数据集上逐步调整和比较以得到最佳值。本文中取α =0.5。矩阵C中元素cuv反映了用户u与用户v关系的亲密程度。

社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

最近邻协同过滤技术中, 因为最近邻居与目标用户对项目的评分很是类似, 所以目标用户对未评分项目的评分能够经过最近邻居对该项目评分的加权平均值近似表示。相似地, 在好友推荐中, 能够把待推荐用户看做待评分项目, 把好友做为邻居, 把用户u与用户v的关系亲密程度看做用户u对用户v的评分或者邻居用户v的权重。

社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙 社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙 兴趣类似度

社交网络中用户留下的文字和行为能够反映用户兴趣和需求。一般用户可以使用天然语言或者标签主动展现其喜爱。这种方法能够得到一些关于用户兴趣爱好的信息, 可是其缺点也比较明显, 天然语言理解技术不能很好地理解用户的描述, 并且用户兴趣是动态变化的, 兴趣描述很容易过期, 何况不少时候用户并不知道或者很难用语言描述喜欢什么。所以, 须要经过算法自动发掘用户历史行为数据, 以推测用户兴趣, 从而推荐知足兴趣的项目。

计算用户之间的兴趣类似度, 主要思想是: 若是用户喜欢相同物品, 则说明具备类似的兴趣。微博内容能够看做物品, 若是两个用户曾经评论、转发或者收藏过一样的微博, 则说明他们具备类似的兴趣。此外, 也能够根据用户在社交网络中的发言提取用户的兴趣标签(关键词), 计算用户的兴趣类似度。基于标签的推荐中, 不少时候用户主动标记使用的标签不多, 这多是因为用户没有使用标签的习惯或者用户新近加入或者用户活跃度较低。所以, 一般从用户的内容数据中抽取关键词做为标签或者是根据标签之间的类似度作一些关键词扩展。

本文运用现有知识计算兴趣类似度。用关键词向量描述兴趣, 用TF-IDF公式计算关键词权重, 用关键词向量之间的余弦类似度表示兴趣类似度。

通常来讲, 用户兴趣能够经过向量空间模型表示为一个关键词向量。从微博内容中提取关键词的过程须要引入一些天然语言处理技术。关键词向量生成过程包括中文文本分词、命名实体(如人名、地名、组织名等)检测、关键词排名和关键词权重计算等。用户u兴趣特征向量能够表示为社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙


,N为用户总数, ni为包含ei的用户数目。

向量空间模型的优势是简单, 缺点是丢失了一些信息, 好比关键词之间的关系信息。可是, 在绝大多数应用中, 向量空间模型对于文本的分类、聚类、类似度计算已经能够给出使人满意的结果。

用户之间的兴趣类似度能够经过兴趣特征向量之间的余弦类似度计算以下:

社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

余弦值与类似度成正比, 余弦值越小表示类似度越低, 余弦值越大表示类似度越高, 其取值范围为[0, 1], 0表示彻底不一样, 1表示彻底相同。


综合社交和兴趣的好友推荐

不一样的社交网络中人们的目的和侧重点每每是存在差别的, 所以, 人们一般在不一样的社交网站创建不一样的关系网络。例如人人网中的好友一般以同窗校友或者熟人为主, 而豆瓣网中的好友却大多因类似兴趣而汇集。所以本文先计算交际兴趣度和兴趣类似度, 而后将两者综合评分, 最终推荐得分最高的Top-k位用户。因为只须要计算存在好友关系的用户之间的共同好友比例和互动比例, 所以能够有效提升效率。

社交图谱是静态的, 没有时间变化概念, 认识10年的朋友和昨天才发生交集的朋友在社交关系图上没有明显差异; 而兴趣图谱是动态的, 其变化一般会反映在历史行为中。社交图谱反映了用户的交友倾向, 而兴趣图谱反映了用户的兴趣偏好, 将二者综合考虑极可能得到比单纯考虑社交关系或者兴趣爱好更好的推荐结果。为了便于控制以上两个因素对最终结果的影响, 可将社交兴趣度和兴趣类似度分别按最大值归一化。综合社交关系和兴趣偏好的最终评分可表示以下:

社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

其中, β 是改进的好友推荐算法的可调参数, 表示最终评分中社交因素的权重, β 取值范围为[0, 1], 本文实验中β 取0.5。s(u, v)为社交兴趣度。w(u, v)为兴趣类似度。

本文好友推荐算法执行过程如图1所示:


社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙 图1 基于社交和兴趣的好友推荐方法 实验与分析

从 2012 KDD 竞赛所提供的腾讯微博数据中提取部分做为实验数据, 对本文提出的算法进行实验分析。所采集数据包括用户社交网络(关注关系)、用户社交行为(通知、转发和评论行为)以及用户关键词(关键词及其权重)。

从用户社交网络中随机选取5个较活跃用户做为种子, 采用宽度优先策略收集用户好友关系, 过滤掉好友数目少于5个和大于150的用户, 最终获得3 237个用户, 以此模拟一个小型的社交网络。随后的实验中只考虑这些用户之间的好友关系。平均每一个用户关注13.4我的, 为很是稀疏的好友网络, 网络稀疏度99.6%, 表现出明显的数据长尾性。根据以上得到用户列表, 分别从用户社交行为和用户关键词中提取出相关用户的社交行为和关键词。实验数据处理步骤如图1所示。根据关系网络计算共同好友比例, 根据行为信息计算交互比例, 综合共同好友比例和交互比例得到社交兴趣度。而后根据用户关键词创建兴趣向量, 从而计算兴趣类似度。最后综合社交和兴趣两方面因素得到最终评分, 将评分最高的k位用户推荐给目标用户。

Top-k推荐中经常使用的评价指标有准确率(Precision)、召回率(Recall)以及综合准确率和召回率的F1-measure。其定义以下:社交网络SNS的好友推荐算法 - 黄大仙 - 黄大仙

实验比较了基于共同好友比例、基于兴趣类似度、基于共同好友比例和兴趣类似度以及基于社交和兴趣类似度4种好友推荐算法的性能。