最小推荐系统:隐语义模型(Latent Factor Model)

依然范特西╮ 提交于 2020-08-12 03:39:08

上一篇中提到,邻域方法(Neighborhood/Similarity Based Models)基于一个强假设:在观测到用户消费过条目A之后,我们有很高的可能性观测到用户会喜欢与A相似的条目B(Item CF)以及 相似的用户可能喜欢同一个条目。

在这个描述中,我们提到两个相似性:条目相似性 和 用户相似性。在协同过滤中,对于条目,我们可以使用标签、消费用户群体等的相似性来描述其相似性;对于用户,我们可以使用消费过的条目的相似性、性别、年龄、地区等参数来描述其相似性。可见,这里的相似性都是基于现实世界中具有实际意义的语义维度来定义的。在SVM(Support Vector Machine)中,我们需要在高维空间中重新调整坐标轴,以使得数据在新的空间中跟好分。这个思想和实践说明,调整后的空间和维度可以比现实世界中具有实际语义的空间和维度能更好地描述事物对象。也就是说,如果我们可以把事物的描述通过某种转换,变换到一个新的语义空间,可能会更好地描述事物的相似性。

隐语义模型(LFM)就是这样一种描述。在隐语义模型中,我们使用同样的维度来表征(Embedding)条目和用户。对于条目,这个表征就是条目表现出的对应维度的特征强度;对于用户,就是用户表现出的对对应维度特征的偏好强度。这样,我们让用户的表征向量乘以条目的表征向量(数量积),就可以得到用户对该条目的偏好描述[1]. 也就是 R\left( u,i \right)=p_{u}^{T}q_i = \sum_{k=1}^{K}{p_{u,k}q_{i,k}} , 表示用户 u 对条目 i 的喜好程度,其中关于用户和条目的描述维度有 K 个,这个参数是自定义的。

def _predict(user_id, item_id):
    pm = np.mat(p.ix[user_id].values)
    qm = np.mat(q.ix[item_id].values).T
    r = (pm * qm).sum()
    logit = 1.0 / (1 + exp(-r))
    return logit

我们对模型的优化目标: min\sum\Vert \widehat{R}_{u,i} - R_{u,i} \Vert _F^2 , 其中 \widehat{R}_{u,i} 为实际喜好值, \Vert \cdot \Vert_F 为Frobenius范数。为了抑制过拟合,需要加入正则化参数: min\sum \left( \Vert \widehat{R}_{u,i} - R_{u,i} \Vert_F ^2 +\lambda  \Vert p_{u} \Vert _F^2 +\Vert q_{i} \Vert_F ^2 \right) .

本质上看,隐语义模型是不含非线性过程的单层图神经网络。模型的求解问题(训练过程)也就是最优化问题,跟神经网络训练中常用的方法一致。

一般来讲,我们观测到的用户对条目的行为是很少的,用户对大部分条目没有互动和喜好参数,特别是缺乏关于不喜欢条目的参数。为了训练过程中的正负样本均衡,我们希望不喜欢的条目( \widehat{R}_{u,i} =0 )数量跟喜好的条目( \widehat{R}_{u,i} =1 )数量是一致或至少接近的。这就需要人工的生产不喜好条目,比如最热门但是没有消费过的条目,多次展现但没有消费过的条目等。

由于有训练过程,LFM不能用于实时推荐,但可以作为Hybrid System中的一个选项。当然,也可以将LFM演变成2层神经网络,增加其表征能力:

这种表征类似于矩阵分解(Matrix Factorization)。不过这种改进一般使Recall的提升在几个百分点内,而计算量上大幅提升。为了避免计算导致的延迟,可以在模型确定之后对每个用户计算一个推荐条目表,在部署时直接查表以免除计算过程。

参考

  1. ^Jenatton, R. , Roux, N. L. , Bordes, A. , & Obozinski, G. . (2012). A latent factor model for highly multi-relational data. Advances in Neural Information Processing Systems. Curran Associates Inc.
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!