在上一篇博客里面分享的是《推荐系统实践》中上下文推荐相关的推荐算法,对此还不熟悉的读者可以戳这里。
关于这个系列会分为如下几个部分:
《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
《推荐系统实践》算法纯享(附代码链接)(三)—— 冷启动篇
《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇
《推荐系统实践》算法纯享(附代码链接)(五)—— 借助上下文信息推荐篇
《推荐系统实践》算法纯享(附代码链接)(六)—— 借助社交网络推荐篇
《推荐系统实践》算法纯享(附代码链接)(七)—— 评分预测篇
完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice
下面将开始本系列的第六部分——借助社交网络推荐篇。
6 社会化推荐
6.1 利用社交网络信息推荐
利用用户的社交网络数据进行推荐,主要是源于:
- 好友推荐可以增加推荐的信任度
- 社交网络可以解决冷启动问题
6.1.1 基于邻域的社会化推荐算法
最简单的方法是给用户推荐好友喜欢的物品集合,用户u对物品i的兴趣 p u i p_ui pui可以通过如下公式计算:
p u i = ∑ v ∈ o u t ( u ) r v i p_{ui} = \sum_{v \in out(u)} r_{vi} pui=∑v∈out(u)rvi
其中 o u t ( u ) out(u) out(u)是用户u的好友集合,如果用户v喜欢物品i,则 r v i = 1 r_vi=1 rvi=1,否则 r v i = 0 r_vi=0 rvi=0。
当然,不同好友之间的熟悉度和兴趣相似度是不一样的,因此应该在推荐的时候把这个考虑在内:
p u i = ∑ v ∈ o u t ( u ) w u v r v i p_{ui}=\sum_{v \in out(u)}w_{uv}r_{vi} pui=v∈out(u)∑wuvrvi
这里的 w u v w_{uv} wuv由两部分相似度构成,一部分是用户u和用户v的熟悉程度,另一部分是用户u和用户v的兴趣相似度。
其中,用户u和用户v的熟悉程度由如下公式度量,即他们之间的共同好友比例:
f a m i l i a r i t y ( u , v ) = ∣ o u t ( u ) ⋂ o u t ( v ) ∣ ∣ o u t ( u ) ⋃ o u t ( v ) ∣ familiarity(u, v)=\frac{|out(u)\bigcap out(v)|}{|out(u)\bigcup out(v)|} familiarity(u,v)=∣out(u)⋃out(v)∣∣out(u)⋂out(v)∣
而用户u和用户v的兴趣相似度由如下公式度量,即他们喜欢的物品重合度:
s i m i l a r i t y ( u , v ) = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ⋃ N ( v ) ∣ similarity(u, v) =\frac{|N(u)\bigcap N(v)|}{|N(u)\bigcup N(v)|} similarity(u,v)=∣N(u)⋃N(v)∣∣N(u)⋂N(v)∣
6.1.2 基于图的社会化推荐算法
用户的社交网络可以表示为为社交网络图,用户对物品的行为可以表示为用户物品二分图,而这两种图可以结合成一个图。如下图所示:
在定义完图中的顶点和边后,需要定义边的权重。其中用户和用户之间边的权重可以定义为用户之间相似度的 α \alpha α倍(包括熟悉程度和兴趣相似度),而用户和物品之间的权重可以定义为用户对物品喜欢程度的 β \beta β倍。
在定义完图中的顶点、边和边的权重后,就可以利用前面几章提到的PersonalRank图排序算法给每个用户生成推荐结果。
6.2 给用户推荐好友
代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter6/为用户推荐好友.ipynb
这里主要介绍基于社交网络图的好友推荐,最简单的方法是给用户推荐好友的好友。主要用来给用户推荐他们在现实社会中互相熟悉,而在当前社交网络中没有联系的其他用户。
有下面几种方法计算相似度:
- w o u t ( u , v ) w_{out}(u, v) wout(u,v)
对于用户u和用户v,用共同好友比例计算相似度:
w o u t ( u , v ) = ∣ o u t ( u ) ⋂ o u t ( v ) ∣ ∣ o u t ( u ) ∣ ∣ o u t ( v ) ∣ w_{out}(u, v) = \frac{|out(u)\bigcap out(v)|}{\sqrt{|out(u)||out(v)|}} wout(u,v)=∣out(u)∣∣out(v)∣∣out(u)⋂out(v)∣
其中 o u t ( u ) out(u) out(u)是在社交网络图中用户u指向的其他好友的集合。
- w i n ( u , v ) w_{in}(u, v) win(u,v)
也可以定义 i n ( u ) in(u) in(u)是在社交网络图中指向用户u的用户集合,此时可以定义另外一种相似度:
w i n ( u , v ) = ∣ i n ( u ) ⋂ i n ( v ) ∣ ∣ i n ( u ) ∣ ∣ i n ( v ) ∣ w_{in}(u, v) = \frac{|in(u)\bigcap in(v)|}{\sqrt{|in(u)||in(v)|}} win(u,v)=∣in(u)∣∣in(v)∣∣in(u)⋂in(v)∣
- w o u t , i n ( u , v ) w_{out,in}(u, v) wout,in(u,v)
这个是用户u关注的用户中,有多大比例也关注了用户v:
w o u t , i n ( u , v ) = ∣ o u t ( u ) ⋂ i n ( v ) ∣ ∣ o u t ( u ) ∣ w_{out,in}(u, v) = \frac{|out(u)\bigcap in(v)|}{\sqrt{|out(u)|}} wout,in(u,v)=∣out(u)∣∣out(u)⋂in(v)∣
- w o u t , i n ′ ( u , v ) w^{'}_{out,in}(u, v) wout,in′(u,v)
上面公式的一个缺点在于,所有人都和名人有很大的相似度。因此可以用如下方法改进:
w o u t , i n ′ ( u , v ) = ∣ o u t ( u ) ⋂ i n ( v ) ∣ ∣ o u t ( u ) ∣ ∣ i n ( v ) ∣ w^{'}_{out,in}(u, v) = \frac{|out(u)\bigcap in(v)|}{\sqrt{|out(u)||in(v)|}} wout,in′(u,v)=∣out(u)∣∣in(v)∣∣out(u)⋂in(v)∣
对于借助社交网络推荐部分的介绍就到这里,下面将继续分享第七部分——评分预测算法。