基于图的推荐系统

可以用图G(V,E,W)定义一个社交网络,其中V是顶点集合,每个顶点代表一个用户,E是边集合。如果用户V_a和用户V_b有社交网络关系,就有一条边e(V_a,V_b)连接这两个用户。W(V_a,V_b)用来定义边的权重。out(u)为顶点u指向的顶点集合(也就是用户u关注的用户集合),in(u)为指向u的顶点集合。

此时就可以利用之前的协同算法,如:

(1)通过u和v的共同关注好友计算相似度:w_1(u,v)=\frac{|out(u)|∩|out(v)|}{\sqrt{|out(u)||out(v)|}}

(2)同样的,也可以利用被关注用户数量计算相似度w_1(u,v)=\frac{|in(u)|∩|in(v)|}{\sqrt{|in(u)||in(v)|}}

node2vec

我们希望利用一个坐标(向量)描述用户在社交网络中的位置,线上计算相似度时只需要计算坐标的距离或者余弦相似度即可。node2vec,或者是network embedding就是一种图特征的表示学习方法,从输入的网络图中,学习到节点的表达。

node2vec分为两个步骤,第一个步骤是随机游走,通过一定规则随机抽取一些点的序列。第二个步骤是将点的序列输入至word2vec模型从而得到每个点的embedding向量。

  1. random walk

给定一张图G和一个起始节点S,标记起始节点位置为当前位置,随机选择当前位置节点的一个邻居并将当前位置移动至被选择的邻居节点,重复以上步骤n次,最终得到从初始节点到结束节点的一条长度为n的点序列。

如何选择下一个节点呢?为了能够控制广度优先还是深度优先,我们定义两个参数pq,计算\alpha=\begin{equation} \left\{ \begin{array}{lr} 1/p,d=0 & \\ 1,d=1\\ 1/q,d=2, & \end{array} \right. \end{equation}

如果p大于max(q,1),则产生的序列与深度优先搜索类似,钢钢钢钢被访问过的节点不太可能被重复访问;如果p小于min(q,1),则产生的序列与宽度优先搜索类似,倾向于周边节点。

​ 2.word2vec

模型的输入是某个用户的one-hot编码,输出是该用户在节点串中前后的节点。最后得到的输出是每个节点(即用户)的word2vec向量。

有了数值化的向量,对任意两个用户,就可以计算相似度。然后就可以利用协同的方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容