在微博上,你关注的人会是谁?微博网络中几亿用户,如何在里面找出你感兴趣的人推荐给你? 从系统层面上来看,这个是很有挑战性的工作,即涉及到好的推荐算法能把握用户的喜好和关注点,同时也要良好计算系统能够快速响应。这里主要谈论微博好友推荐算法部分(Twitter上的推荐算法)。
首先看下面的用户关注之间的二部图(1),左边是用户圈,就是用户的信任圈子,右边的是用户信任圈集合用户关注的所用用户,我们所要做的是从这些节点中找到最能吸引眼球的关注者。
如何构建用户的信任圈?给定一个用户,已知该用户的关注用户群,我们可以通过类似personalized PageRank 随机游走方法,设定随机游走步数和重启概率,忽视低概率节点,采样那些大度节点。从当前节点出发,进行随机游走过程,那些到达概率高的节点中取一定数量节点作为改节点信任圈。
完成节点信任圈的构造后,可以构建出图1的网络,通过SALSA算法迭代算出右边节点(我们称作:authorities)的得分,分数高的节点用户关注的概率越高。SALSA也是类似pagerank,HITS的随机游走系列的算法,它是两方向随机游走过程,它最早是出现在网页搜索排序算法中。
(1)
下面重点介绍下SALSA算法
介绍SALSA算法之前,我们必须先了解下HITS算法。
(1)HITS算法最早是用于搜索排序中的,给点一个query,搜索引擎会返回一些关键词相关网页,如何确定这些网页的重要性呢?
HITS算法是这样的:
首先把那些根据关键相关返回网页作为根集合S,再由S集合网页节点的链入和链出网页节点派生出结合C,结合C包括S,链入和链出节点集合。
C中的每个节点分配一对权重<h(s),a(s)>, 节点h(s)权重由节点链出的节点的a(s)决定,a(s)由节点的链入节点的h(s)决定。
算法的迭代过程如下:
从上面可以看到I操作,即网页的a权重向量:
O操作可以看作是:
h = Wa
其中,W是图连接矩阵。
关于HITS算法收敛性,可以从如下变换形式来得出:
当算法收敛时候,a其实就是对应矩阵A那个最大特征值对应的特征向量的归一化形式,同样,h也是H矩阵那个最大特征值对应的特征向量的归一化形式。
(2) SALSA算法
SALSA算法和HITS算法初始部分一样,构建相同的集合集C和彼此的链接关系。
SALSA一种随机游走过程,但是不同经典的随机游走。它涉及到把一个网页节点看成2种不同类型节点:hub和authority,随机游走对应着这样两种不用类型的Markov链:hub链和authority链,状态转移为网页前向和后向。算法构建方式如下:
首先是把构建一个无向图,原图节点分为2类,然后构建边。
这样从某个节点出发,进行两个方向的随机游走。h和a方向的状态转移矩阵:
对于以上的形式可以通过如下的矩阵相乘的方式展现:
有了H和A矩阵,就可以知道节点集合最终的h和a向量:和HITS一样,h和a对应H和A的最大特征值对应的归一化特征向量。其实,计算h和a可以参照HITS,进行迭代求解。
参考文献:
[1]WTF: The Who to Follow Service at Twitter
[2]Lempel R, Moran S. SALSA: the stochastic approach for link-structure analysis[J]. ACM Transactions on Information Systems (TOIS), 2001, 19(2): 131-160.