《推荐系统实践》阅读笔记(二):利用用户行为数据

    技术2022-07-13  71

    《推荐系统实践》阅读笔记(二):利用用户行为数据

    仅仅基于用户行为数据设计的推荐算法一般称为系统过滤算法。其中又基于领域的方法、隐语义模型、基于图的随机游走算法等,

    用户行为数据简介

    用户行为数据在网站上最简单的存在形式就是日志。这些日志记录了用户的各种行为,如在电子商务网站中这些行为包括网页浏览、购买、点击、评分和评论等。用户行为在个性化推荐系统中一般分两种:显性反馈数据和隐性反馈数据,其中显性反馈数据更明确,正负反馈数据都有,但是数据量较少,而隐性反馈数据不明确且只有正反馈数据,但是它的数据量大,一般来说,显示反馈数据存储在数据库中,隐性反馈数据存储在分布式文件系统中。

    用户行为分析

    PoweLaw分布(长尾分布): f ( x ) = α x k f(x) = \alpha x^k f(x)=αxk。互联网上的很多数据分布都满足长尾分布。

    用户活跃度与物品流行度的关系。一般来说,新用户倾向于浏览热门的物品,老用户会逐渐开始浏览冷门的物品。

    基于领域的算法

    基于用户的协同过滤算法(UserCF)

    找到一个与用户A有着相似兴趣的其他用户,然后将那些用户喜欢的而用户A没有听说过的物品推荐给A。所以基于用户的协同过滤方法主要包括两个步骤:1、找到和目标用户兴趣相似的用户集合;2、找到这个集合中的用户喜欢的、且目标用户没有听说过的物品推荐给目标用户。

    步骤1的关键即为计算两个用户的兴趣相似度。协同过滤算法主要利用行为的相似度计算兴趣的相似度。 使用Jaccard公式 ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ⋃ N ( v ) ∣ \frac{\mid N(u)\bigcap N(v)\mid}{\mid N(u)\bigcup N(v)\mid} N(u)N(v)N(u)N(v)或余弦相似度 ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ \frac{\mid N(u)\bigcap N(v)\mid}{\sqrt{\mid N(u)\mid \mid N(v)\mid}} N(u)N(v) N(u)N(v)来计算两个用户的相似度,其中N(x)代表用户x曾经有过正反馈的物品集合。使用 w u v = ∑ i ∈ N ( u ) ⋂ N ( v ) 1 l o g 1 + ∣ N ( i ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ w_{uv} = \frac{\sum_{i \in N(u)\bigcap N(v)}\frac{1}{log1 +\mid N(i)\mid}}{\sqrt{\mid N(u)\mid \mid N(v) \mid}} wuv=N(u)N(v) iN(u)N(v)log1+N(i)1公式进行计算,其中 1 l o g 1 + ∣ N ( i ) ∣ \frac{1}{log1 +\mid N(i)\mid} log1+N(i)1惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响 步骤2:使用公式 p u i = ∑ v ∈ S ( u , k ) ⋂ N ( i ) w i j r u i p_{ui} = \sum_{v \in S(u, k)\bigcap N(i)} w_{ij}r_{ui} pui=vS(u,k)N(i)wijrui计算出推荐的物品,其中S(u,k)包含和用户u兴趣最接近的K个用户, w u v w_{uv} wuv是用户u和用户v的兴趣相似度, r v i r_{vi} rvi代表用户v对物品i的兴趣

    基于物品的协同过滤算法(ItemCF)

    ItemCF并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户行为记录计算物品之间的相似度。ItemCF主要也包括两个步骤:1、计算物品之间的相似度,2、根据物品的相似度和用户的历史行为给用户生成推荐列表。

    步骤1计算物品之间的相似度 w i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ w_{ij} = \frac{\mid N(i)\bigcap N(j)\mid}{\mid N(i)\mid} wij=N(i)N(i)N(j)其中N(i)为喜欢物品i的用户。 w i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij} = \frac{\mid N(i)\bigcap N(j)\mid}{\sqrt{\mid N(i)\mid \mid N(j)\mid}} wij=N(i)N(j) N(i)N(j),避免公式1中出现的当物品j很热门时, w i j w_{ij} wij接近1的问题 w i j = ∑ u ∈ N ( i ) ⋂ N ( j ) 1 l o g 1 + ∣ N ( u ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij} = \frac{\sum_{u \in N(i)\bigcap N(j)}\frac{1}{log1 +\mid N(u)\mid}}{\sqrt{\mid N(i)\mid \mid N(j) \mid}} wij=N(i)N(j) uN(i)N(j)log1+N(u)1,体现了活跃用户对物品相似度的贡献应该小于不活跃的用户 步骤2:使用公式 p u j = ∑ u ∈ S ( j , k ) ⋂ N ( u ) w j i r u i p_{uj} = \sum_{u \in S(j, k)\bigcap N(u)} w_{ji}r_{ui} puj=uS(j,k)N(u)wjirui计算出推荐的物品,其中S(j,k)包含和物品j最相似的K个物品, w j i w_{ji} wji是物品i和物品j的相似度, r u i r_{ui} rui代表用户u对物品i的兴趣对相似度进行归一化,可以提高推荐的准确度以及推荐的覆盖率和多样性

    UserCF与ItemCF的比较:UserCF的推荐更加社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCf的推荐更加个性化,反映了用户自己的兴趣传承。

    隐语义模型(LFM)

    LFM采取基于用户行为统计的自动聚类,较好的对物品进行分类,可以代表用户对物品分类的看法;同时LFM允许我们指定最终由多个分类,可以控制分类的粒度;LFM计算出的结果为物品对每个类的权重,解决传统很难给一个物品多个分类的问题;LFM对每个分类都不是同一个维度,它是基于用户的共同兴趣计算出来的。

    LFM通过公式 P e r f e r n c e ( u , i ) = r u i = p u T q i = ∑ f = i F p u , k q i , k Perfernce(u, i) = r_{ui} = p_u^Tq_i = \sum_{f=i}^Fp_{u,k}q_{i,k} Perfernce(u,i)=rui=puTqi=f=iFpu,kqi,k计算用户u对物品i的兴趣,然后通过优化损失函数 C = ∑ ( u , i ) ∈ K ( r u i − ∑ k = 1 K p u , k q i , k ) 2 + λ ∣ ∣ p u ∣ ∣ 2 + λ ∣ ∣ q i ∣ ∣ 2 C = \sum_{(u,i)\in K}(r_{ui} - \sum_{k=1}^Kp_{u,k}q_{i,k})^2 + \lambda\mid\mid p_u\mid\mid^2+\lambda\mid\mid q_i\mid\mid^2 C=(u,i)K(ruik=1Kpu,kqi,k)2+λpu2+λqi2学习到pu,qi;其中可以使用SGD(随机梯度下降法)进行优化

    LFM与CF的比较 LFM具有比较好理论基础,它是一种学习方法,通过优化一个设定的指标建立最优的模型。基于领域的方法更多的是一种基于统计的方法,没有学习过程LFM相较于CF使用更少的空间,CF需要维护一张离线的相关表(用户相关表、物品相关表)一般情况,LFM的时间复杂度高于CF。CF可以实现实时推荐,而LFM不行

    基于图的模型

    用户和物品可以构成一个二分图,其中用户和物品之间的交互作为二分图的边

    基于图的随机游走算法(PersonalRank算法)

    假设要给用户u进行个性化推荐,可以从用户u队形的节点 v u v_u vu开始再用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率 α \alpha α决定是继续游走,还是停止这次游走并重新开始游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。

    P R ( v ) = α ∑ v ′ ∈ i n ( v ) P R ( v ′ ) ∣ o u t ( v ′ ) ∣ ( v ≠ v u ) , P R ( v ) = ( 1 − α ) + α ∑ v ′ ∈ i n ( v ) P R ( v ′ ) ∣ o u t ( v ′ ) ∣ ) ( v = v u ) PR(v) = \alpha \sum_{v'\in in(v)}\frac{PR(v')}{\mid out(v')\mid}(v \not= v_u), PR(v) = (1-\alpha)+ \alpha \sum_{v'\in in(v)}\frac{PR(v')}{\mid out(v')\mid})(v = v_u) PR(v)=αvin(v)out(v)PR(v)(v=vu),PR(v=(1α)+αvin(v)out(v)PR(v))(v=vu)

    令M为用户物品二分图的转移概率矩阵, M ( v , v ′ ) = 1 ∣ o u t ( v ) ∣ M(v, v') = \frac{1}{\mid out(v)\mid} M(v,v)=out(v)1

    迭代公式可以转换为(即迭代结束后 r n = r n − 1 r_n = r_{n-1} rn=rn1): r = ( 1 − α ) r 0 + α M T r r = (1-\alpha)r_0 +\alpha M^Tr r=(1α)r0+αMTr,其中 r 0 = [ 1 , 0 , 0 , 0...... ] r_0 = [1,0,0,0......] r0=[1,0,0,0......]

    解得: r = ( 1 − α ) ( 1 − α M T ) − 1 r 0 r = (1-\alpha)(1-\alpha M^T)^{-1}r_0 r=(1α)(1αMT)1r0

    只需要计算一次 ( 1 − α M T ) − 1 (1-\alpha M^T)^{-1} (1αMT)1就可以计算出用户对物品访问的概率

    Processed: 0.049, SQL: 9