隐语义模型
参考书本: 项亮, 推荐系统实践. 2012
本文系阅读笔记
LFM ( latent factor model )隐语义模型。该算法最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的名词有 LSI 、 pLSA 、 LDA 和 Topic Model 。
定义
隐语义模型是最近几年推荐系统领域最为热门的研究话题,它的核心思想是通过隐含特征(latent factor) 联系用户兴趣和物品。
eg:
用户 A 的兴趣涉及侦探小说、科普图书以及一些计算机技术书,而用户 B 的兴趣比较集中在数学和机器学习方面。可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。
但是往往来说,编辑的分类不能代表用户的真实意见,或者可能有各种各样的偏差。隐含语义分析技术( latent variable analysis )出现了。隐含语义分析技术因为采取基于用户行为统计的自动聚类。
相关模型: pLSA 、 LDA 、隐含类别模型( latent class model )、隐含主题模型( latent topic model )、矩阵分解( matrix factorization )。
LFM
通过如下公式计算用户 u 对物品 i 的兴趣:
度量了用户u和第k个隐类的关系,度量了第k个隐类和物品i直接的关系。
要计算这两个参数,需要一个训练集,对于每个用户 u ,训练集里都包含了用户 u 喜欢的物品和不感兴趣的物品,通过学习这个数据集,就可以获得上面的模型参数。
推荐系统的用户行为分为显性反馈和隐性反馈。 LFM 在显性反馈数据(也就是评分数据)上解决评分预测问题并达到了很好的精度。不过本章主要讨论的是隐性反馈数据集,这种数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)。
那么,在隐性反馈数据集上应用LFM解决TopN推荐的第一个关键问题就是如何给每个用户生成负样本。
对负样本采样时应该遵循以下原则。
对每个用户,要保证正负样本的平衡(数目相似)。
对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。
一般认为,很热门而用户却没有行为更加代表用户对这个物品不感兴趣。因为对于冷门的物品,用户可能是压根没在网站中发现这个物品,所以谈不上是否感兴趣。
经过采样,可以得到一个用户 — 物品集 K={(u,i)},其中如果(u, i)是正样本,则有 =1,否则,有=0,则优化如下损失函数来得到p,q
其中后面两项是用来防止过拟合的正则化项,λ由实验获得。
可以利用随机梯度下降使以上函数最小化。
梯度下降对两个参数求偏导。得到下降公式,学习到学习速率
【具体代码和公式见书,这一细节为机器学习的细节】
评测
我们同样通过离线实验评测LFM的性能。首先,我们在MovieLens数据集上用LFM计算出用户兴趣向量p和物品向量q,然后对于每个隐类找出权重最大的物品。表中展示了4个隐类中排名最高( 最大)的一些电影。结果表明,每一类的电影都是合理的,都代表了一类用户喜欢看的电影。从而说明LFM确实可以实现通过用户行为将物品聚类的功能。
其次,我们通过实验对比了LFM在TopN推荐中的性能。在LFM中,重要的参数有4个:
隐特征的个数 F ;
学习速率 alpha ;
正则化参数 lambda ;
负样本/正样本比例 ratio 。
通过实验发现, ratio 参数对LFM的性能影响最大。因此,固定 F =100、 alpha =0.02、lambda =0.01,然后研究负样本/正样本比例 ratio 对推荐结果性能的影响。
随着负样本数目的增加, LFM 的准确率和召回率有明显提高。不过当
ratio >10 以后,准确率和召回率基本就比较稳定了。同时,随着负样本数目的增加,覆盖率不断降低,而推荐结果的流行度不断增加,说明 ratio 参数控制了推荐算法发掘长尾的能力。
[在这里的实验,LFM性能优于userIF和itemIF,不过当数据集非常稀疏时, LFM 的性能会明显下降,甚至不如 UserCF 和 ItemCF 的性能。]
实例
雅虎的研究人员以 CTR (点击通过率,点击数,点击到达率)作为优化目标,利用 LFM 来预测用户是否会单击一个链接。为此,他们将用户历史上对首页上链接的行为记录作为训练集。其中,如果用户 u 单击过链接 i ,那么
就定义 (u, i) 是正样本,即 = 1 。如果链接 i 展示给用户 u ,但用户 u 从来没有单击过,那么就定义 (u, i) 是负样本,即 = -1 。然后,雅虎的研究人员利用前文提到的 LFM 预测用户是否会单击链接:
当然,雅虎的研究人员在上面的模型基础上进行了一些修改,利用了一些改进的 LFM 模型。
但是, LFM 模型在实际使用中有一个困难,那就是它很难实现实时的推荐。经典的 LFM 模型每次训练时都需要扫描所有的用户行为记录,这样才能计算出用户隐类向量( )和物品隐类向量( )。而且 LFM 的训练需要在用户行为记录上反复迭代才能获得比较好的性能。因此, LFM的每次训练都很耗时,一般在实际应用中只能每天训练一次,并且计算出所有用户的推荐结果。从而 LFM 模型不能因为用户行为的变化实时地调整推荐结果来满足用户最近的行为。
but新闻need实时性,首先,他们利用新闻链接的内容属性(关键词、类别等)得到链接 i 的内容特征向量 。其次,他们会实时地收集用户对链接的行为,并且用这些数据得到链接 i 的隐特征向量 。然后,他们会利用如下公式预测用户 u 是否会单击链接 i
y:根据内容属性直接生产
x:用户u对内容特征k的兴趣程度,根据历史记录获得。x每天只需要训练一次。
p/q根据用户最近几小时行为训练LFM获得。
对于一个新加入的物品i,先通过x,y估计用户对物品的兴趣,几个小时后通过计算LFM得到更加准确的值。
【可参考雅虎论文】
比较
和基于邻域的方法(比如 UserCF 、 ItemCF )相比
理论基础
LFM 具有比较好的理论基础,它是一种学习方法,通过优化一个设定的指标建立最优的模型。基于邻域的方法更多的是一种基于统计的方法,并没有学习过程。
离线计算的空间复杂度
基于邻域的方法需要维护一张离线的相关表。在离线计算相关表的过程中,如果用户 / 物品数很多,将会占据很大的内存。假设有 M 个用户和 N 个物品,在计算相关表的过程中,我们可能会获得一张比较稠密的临时相关表(尽管最终我们对每个物品只保留 K 个最相关的物品,但在中间计算过程中稠密的相关表是不可避免的)
在 Netflix Prize 中,因为用户数很庞大( 40 多万),很少有人使用 UserCF 算法(据说需要 30 GB 左右的内存),而 LFM 由于大量节省了训练过程中的内存(只需要 4 GB ),从而成为 Netflix Prize 中最流行的算法。
离线计算的时间复杂度
在一般情况下, LFM 的时间复杂度要稍微高于 UserCF 和 ItemCF ,这主要是因为该算法需要多次迭代。但总体上,这两种算法在时间复杂度上没有质的差别
在线实时推荐
UserCF 和 ItemCF 在线服务算法需要将相关表缓存在内存中,然后可以在
线进行实时的预测。以 ItemCF 算法为例,一旦用户喜欢了新的物品,就可以通过查询内存中的相关表将和该物品相似的其他物品推荐给用户。因此,一旦用户有了新的行为,而且该行为被实时地记录到后台的数据库系统中,他的推荐列表就会发生变化。而从 LFM的预测公式可以看到, LFM 在给用户生成推荐列表时,需要计算用户对所有物品的兴趣权重,然后排名,返回权重最大的 N 个物品。那么,在物品数很多时,这一过程的时间复杂度非常高。
因此, LFM 不太适合用于物品数非常庞大的系统,如果要用,我们也需要一个比较快的算法给用户先计算一个比较小的候选列表,然后再用LFM 重新排名。另一方面, LFM 在生成一个用户推荐列表时速度太慢,因此不能在线实
时计算,而需要离线将所有用户的推荐结果事先计算好存储在数据库中。因此, LFM 不能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化。
推荐解释
ItemCF 算法支持很好的推荐解释,它可以利用用户的历史行为解释推荐结果。但 LFM 无法提供这样的解释,它计算出的隐类虽然在语义上确实代表了一类兴趣和物品,却很难用自然语言描述并生成解释展现给用户。