修改内容 | 修改日期 |
---|---|
修正社交网络关系图:社交图谱的关系图应是无向图,而兴趣图谱是有向图 | 2020-03-27 |
美国著名的第三方调查机构尼尔森调查了影响用户相信某个推荐的因素,调查结果显示,9 成的用户相信朋友对他们的推荐,7 成的用户相信网上其他用户对广告商品的评论。从该调查可以看到,好友的推荐对于增加用户对推荐结果的信任度非常重要。
因此,在社交网络的背景下,推荐系统不单单需要关注用户与物品之间的关系,还要关注用户之间的关系。
在社交网站方面,国外以 Fackbook 和 Twitter 为代表,国内社交网站以新浪微博、QQ 空间等为代表。这些社交网站形成了两类社交网络结构。
【社交网络结构】:
- 社交图谱:好友一般是自己在现实社会中认识的人,比如同事、同学、亲戚等,并且这种好友关系是需要双方确认的,如 Fackbook、QQ 空间。
- 兴趣图谱:好友往往都是现实中互不相识的,只是出于对对方言论的兴趣而建立好友关系,并且这种好友关系也是单向的关注关系,如 Twitter、新浪微博。
需要注意的是,任何一个社会化网站都不是单纯的社交图谱或兴趣图谱。在 QQ 空间中大多数用户联系基于社交图谱,而在微博上大多数用户联系基于兴趣图谱。但在微博中,也会关注现实中的亲朋好友,在 QQ 中也会和部分好友有共同兴趣。
在社交网络中需要表示用户之间的联系,可以用图 G(V, E, W) 定义一个社交网络。其中 V 是顶点集合,每个顶点代表一个用户,E 是边集合,如果用户 V a V_a Va 和 V b V_b Vb 有社交网络关系,那么就有一条边 e ( V a , V b ) e(V_a, V_b) e(Va,Vb) 连接这两个用户, W ( V a , V b ) W(V_a, V_b) W(Va,Vb) 用来定义边的权重。
- 社交图谱:朋友关系是需要双向确认的,因而可以用无向边连接有社交网络关系的用户——无向图;
- 兴趣图谱:朋友关系是单向的,可以用有向边代表这种社交网络上的用户关系——有向图。
在之前的博客推荐系统-基于用户的推荐在社交网络中的应用中,我们使用了基于用户社交网络计算用户相似度的方法,但对于新浪微博、微信这样大规模的社交关系,离线计算好用户的相似度并存储下来供线上推荐系统使用,显然不合理。那能否用一个坐标表示来描述用户在社交网络中的位置呢?这样只需提前计算好用户坐标,线上计算用户之间的相似度时,只要计算坐标的距离或者余弦相似度即可。node2vec 可以帮助我们实现这个目标。
【node2vec 整体思路】:
- random walk(随机游走),通过一定规则随机抽取一些点的序列。
- 将点的序列输入至 Word2Vec 模型,从而得到每个点的 embedding 向量。
下面我们将分别介绍这两个步骤的计算方法。
random walk
【基本流程】:给定一张图 G 和一个起始节点 S,标记起始节点位置为当前位置,随机选择当前位置节点的一个邻居,并将当前位置移动至被选择的邻居位置,重复以上步骤 n 次,最终会得到从初始节点到结束节点的一条长度为 n 的“点序列”,此条“点序列”即称为在图 G 上的一次 random walk。
【示例】:假设我们的起始节点为 A,随机游走步数为 4。
- 首先从 A 开始,有 B、E 两个节点可游走,我们随机选择 B;
- 再从 B 开始,有 A、E、F 三个备选下一节点,随机选择节点为 F;
- 再从 F 开始,于 B、C、D、E 四个节点,我们随机选取 C;
- 再从 C 开始,游走到 H。
- 达到游走步数,停止随机游走。我们获得一条 random walk 路径:A -> B -> F -> C -> H。
由上面的实例可以看出,random walk 算法主要分为两步:
- 选择起始节点:起始节点的选择存在两种常见的做法。
- 按照一定规则随机从图中抽取一定数量的节点;
- 以图中所有节点作为起始节点。一般来说我们选择这种方式,以便所有节点都能被选取到。
- 选择下一节点:最简单方法是按照边的权重随机选择,但是在实际应用中,我们希望能控制广度优先还是深度优先,从而影响 random walk 能够游走到的范围。
- 深度优先:发现能力更强;
- 广度优先:社区内的节点更容易出现在一个路径中。
斯坦福大学计算机教授 Jure Leskovec 给出了一种可以控制广度优先或者深度优先的方法。
以上图为例,我们假设第一步是从 t 随机游走到 v,接下来要确定下一步的邻接节点。参数 p 和 q 用以调整游走节点的倾向。
- p:计算回到上一节点的概率;
- q:计算走到远离上一节点的节点概率。
首先计算当前节点的邻居节点与上一节点 t 的距离 d,根据公式可得 α。
α = { 1 / p , d = 0 1 , d =