面试题:隐语义模型是在推荐系统中的应用的吗?

Posted 七月在线实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题:隐语义模型是在推荐系统中的应用的吗?相关的知识,希望对你有一定的参考价值。

文 | 七月在线
编 | 小七


解析:



本篇记录在学习隐语义模型的一些总结,隐语义建模;隐语义模型的核心思想;隐语义模型在推荐系统中的应用;隐语义模型与推荐系统的关系;工程中常用的矩阵分解方法

前言


推荐系统中一个重要的分支,隐语义建模。隐语义模型LFM:Latent Factor Model,其核心思想就是通过隐含特征联系用户兴趣和物品。

过程分为三个部分,将物品映射到隐含分类,确定用户对隐含分类的兴趣,然后选择用户感兴趣的分类中的物品推荐给用户。它是基于用户行为统计的自动聚类。

隐语义模型在Top-N推荐中的应用十分广泛。常用的隐语义模型,LSA(Latent Semantic Analysis),LDA(Latent Dirichlet Allocation),主题模型(Topic Model),矩阵分解(Matrix Factorization)等等。

这些模型是本质上是相通的,目的就是找出潜在的主题或分类。这些技术一开始实在文本挖掘中提出来的。从netflix推荐大赛之后,这些技术被用在推荐领域,并且得到明显的效果。比如,在推荐系统中,能够用这些模型将用户的行为(用户的偏好)对item进行自动聚类,也就是把item划分到不同类别/主题,这些主题/类别可以理解为用户的兴趣。

凭借这种思想,著名的推荐领域大神Yehuda Koren更是凭借矩阵分解模型勇夺Netflix Prize推荐比赛冠军,以矩阵分解为基础,Yehuda Koren在数据挖掘和机器学习相关的国际顶级会议(SIGIR,SIGKDD,RecSys等)发表了很多文章,将矩阵分解模型的优势发挥得淋漓尽致。实验结果表明,在个性化推荐中使用矩阵分解模型要明显优于传统的基于邻域的协同过滤(又称基于记忆的协同过滤)方法,如UserCF、ItemCF等,这也使得矩阵分解成为了之前个性化推荐研究领域中的主流模型。



基本算法与UserCF和ItemCF对比
首先通过一个例子来理解一下这个模型,比如说有两个用户A和B,目前有用户的阅读列表,用户A的兴趣涉及侦探小说,科普图书以及一些计算机技术书,而用户B的兴趣比较集中在数学和机器学习方面。
那么如何给A和B推荐图书呢?

对于UserCF,首先需要找到和他们看了同样书的其他用户(兴趣相似的用户),然后在给他们推荐那些用户喜欢的其他书。
对于ItemCF,需要给他们推荐和他们已经看的书相似的书,比如用户B 看了很多数据挖掘方面的书,那么可以给他推荐机器学习或者模式识别方面的书。

还有一种方法,可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。

基于兴趣分类的方法大概需要解决的问题:

如何给物品进行分类?
如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度?
对于一个给定的类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重?

对于第一个问题最简单的解决方案是找编辑给物品打标签,或者采用豆瓣的方式,让用户自己打标签。这样做的确定是,这种打标签不自动发现类比,还有一点就是编辑的意见并不能达标各种用户的意见,比如一些书目的划分是模棱两可的。这就涉及到分类的粒度不易控制的问题。另外,编辑很难决定一个物品在某一个分类中的权重,比如编辑可以很容易的决定《数据挖掘导论》属于挖掘类的图书,但是这本书在这类书中的定位是什么样的,编辑就很难给出一个准确的数字来标示。

为了解决上面的问题,研究人员提出:为什么我们不从数据出发,自动地找到那些类,然后进行个性化推荐,隐语义分析技术因为采取基于用户行为统计的自动聚类,较好地解决了上面的问题。隐语义分析技术从诞生到今天产生了很多著名的模型和方法,其中和推荐技术相关的有pLSA,LDA,隐含类别模型(latent class model), 隐含主题模型(latent topic model), 矩阵分解(matrix factorization)。


隐语义模型的应用


向用户推荐物品
在推荐系统中,可以通过隐含语义模型将用户(user)和物品(item)自动分类,这些类别是自动生成的,这些类比也可以叫做“隐含的分类”,或许我们看不懂分类后的结果。但是采用这种技术后,每个用户或者物品会被分到多个类别中,属于某个类别的权重会被计算出来。

假设现在有一个大小为m×n的评分矩阵V,包含了m个用户对n个物品的评分,评分从0到5,值越大代表越喜欢,0代表没有打分。设定共有r个隐含的分类。通过一些方法,将V展开为两个相乘的矩阵:

V = W*H

其中,W的大小为m×r,H的大小为r×n。在隐语义模型中,W(i,j)被解释为用户i属于类别j的权重,H(a,b)被解释为物品b属于类别a的的权重。

如果用户u对物品i没有评分,可以将这个评分r(u,i)预测为:

r(u,i) = sum(W(i, :) .* H(:, i)) // 向量点乘

据此可以构建一个推荐系统。


文本分类


隐语义模型的另一个常见的应用领域是文本分类,这个类似于上面的推荐系统。在文本分类领域,将文档和词用一个矩阵表示,如常见的词袋模型,文档-词矩阵。我们将数据集中的一堆文本构造成文档-词矩阵V,如果共有m个文本,n个单词,那么V的大小为m*n,V(i,j)表示文档i中出现单词j的次数。


设定共有r个隐含的分类。


通过一些方法,将V展开为两个相乘的矩阵:

V = W*H

其中,W的大小为m×r,H的大小为r×n。在隐语义模型中,W(i,j)被解释为文档i属于类别j的权重,H(a,b)被解释为单词b属于类别a的的权重。
对于一个文档,其权重最大的类别被看作是该文档的类别。由于设定共有r个隐含的分类,分类结果也是r个份分类。


采用矩阵分解技术发现两种实体见潜在的特征
使用矩阵分解来预测评分的思想来源于,我们可以通过矩阵分解来发现一些用户打分的潜在特征,比如两个人都喜欢某一演员,那他们就倾向于给该演员演的电影打高分;或者两个都喜欢动作片,假如我们能够发现这些特征,我们就能够预测特定用户对特定电影的打分。

为了发现不同的特征,我们假设特征的数量少于用户和电影的数量,矩阵分解算法的数学理论基础是矩阵的行列变换。在《线性代数》中,我们知道矩阵A进行行行变换相当于A左乘以一个矩阵,矩阵A进行列变换等价于矩阵A右乘以一个矩阵,因此矩阵A可以进行矩阵分解,一方面可以起到降低数据维度的作用,另一方面也可以找到潜在的特征。

矩阵分解可以开来非常好的结果,而且可以充分地考虑各种因素的影响,有非常好的扩展性,因为要考虑各种因素的综合作用,往往需要构造cost function来将矩阵分解转换为优化问题。根据要考虑的因素为优化问题其他限制条件,然后通过迭代的方法进行矩阵分解,原来评分矩阵中的missing value可以通过分解后得到的矩阵求得。


pureSVD
其实,矩阵分解的核心是将一个非常稀疏的评分矩阵分解为两个矩阵,一个表示用户user的特性,一个表示item的特性,将两个矩阵各自取一行一列向量做内积就可以得到对应评分。那么如何将一个矩阵分解为两个矩阵就是唯一的问题啦。

这里可以借用在线性代数和数值分析中学到的各种矩阵分解方法,如QR, Jordan,三角分解,SVD。这里说明下 svd方法的大概意思:将一个任意实矩阵分解为桑格矩阵U,S,V,其中U , V 是两个正交矩阵,称为左右奇异矩阵,S是个对称阵,称为奇异值矩阵。


Latent Factor Model
这是真正的矩阵分解算法,经过实践检验,具有非常高的准确性和易扩展性。正如上面提到的,实现推荐系统结果的目标是将那个稀疏的评分矩阵分解成为两个矩阵,一个表示user的feature,一个表示item的feature,然后做内积得到预测。

当然要实现满足一定约束条件的矩阵分解,不像上面的pureSVD那么容易,需要构造一个优化问题,用一些复杂的算法求最优化问题。而这些最优化问题往往是NP问题,只有局部最优解。首先构造一个优化目标函数,考虑到最后的评价指标是预测分值与实际分值之间的误差的平方(RMSE),所以构造的目标函数也是误差的平方的函数。为什么这样的算法可以得到更优的结果呢?因为算法可以很容易地扩展很多的feature进来,更加出色地考虑了多种影响推荐效果的实实在在的因素。

Biases 用户评分的偏见:
因为有的用户总是会打出比别人高的分,或者说有的用户他的评价尺度比较宽松,同样有的item总是被打高分,所以在真正实
践中,构造目标函数需要增加几项:所有评分的平均值miu,user的偏见分数,item的偏见分数。

implicit feedback 隐式反馈数据
用户在使用web应用的时候,会产生大量的行为,充分挖掘这部分的价值,将会很好的提升推荐的效果,利用用户的隐式反
馈,相当于充分的利用评分矩阵中的missing value的价值,用户在页面的停留时间,检索,浏览,点击等等各种行为都可
以建模到目标函数中。在看到的论文中,这里,可以将简单的用一个boolean来描述一种行为有还是没有。补过在使用的使用
需要进行归一化处理。

User-associated attributes
基于用户的社会化属性进行推荐也是一种很基本的推荐,当然也可以考虑到目标函数中。

Temporal dynamics
用户的兴趣包括长期和短期,动态地考虑一段时间内用户的兴趣是很有必要的。

Confidence level
因为在处理上述的因素的时候,很多都是比较主观的,所以需要给每个因素添加一个置信权重,以平衡整个结果。

通过构造出这个目标函数,然后添加相应的约束条件,接下来的问题就是求解这个优化问题,通常比较好的方法是 随机梯度下降算法(Stochastic gradient desent)

这种方法在学术上主流的方法,参考http:research.yahoo.com/Yehuda_Koren以及上海交大在kddcup的论文集开源系统http://apex.sjtu.edu.cn/apex_wiki/svdfeature


非负矩阵分解
基本原理:NMF,非负矩阵分解,它的目标很明确,就是将大矩阵分解为两个小矩阵,使得这两个小矩阵相乘后能够还原到大矩阵。而非负表示分解的矩阵都不包含负值。从应用的角度来说,矩阵分解能够用于发现两种实体间的潜在特征,一个最常见的应用就是协同过滤中的预测打分值,而从协同过滤的这个角度来说,非负也很容易理解:打分都是正的,不会出现负值。

考虑到svd或者latent factor model 会得到负值的情况,所以非负矩阵分解的物理意义比较明确。同样的道理,NMF也是将评分矩阵的转置矩阵分解成两个矩阵。*不同的是这两个矩阵有着和上面的矩阵不同的物理意义。其中一个是基矩阵W,另一个是投影矩阵H,即R(nm)=W(nr)H(r*m)。
W:每一列包含一个基向量,这组基向量构成一个r维的空间。
H:每一列则近似为原始数据对应的列向量在该r维空间的投影。

做这个分解的方法也是构造一个目标函数和一些约束条件,然后用梯度下降的算法计算得到一个局部最优解。这种方法的大概思路
1 将评分矩阵转置然后分解称为两个矩阵W和H。
2 根据基矩阵W,可以计算得到目标用户评分向量a对基矩阵W的投影向量h.
3 计算投影向量h与投影矩阵H各行之间的欧氏距离,将其中距离最小的前k个用户组成目标用户a的最近邻集合。
4 然后用皮尔逊讲最近邻集合中的数据进行加权计算,然后拍下进行推荐。

这种方法的思路和上面的两种还是不同相同的,主要是在计算目标用户的最近邻集合,主要思想还是knn,只是在中间用了矩阵分解的方法降低了计算的时间复杂度。

参考:blog.csdn.net/zyvscc/article/details/7551842
www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

    
      
      
    
 面试题:隐语义模型是在推荐系统中的应用的吗?

今日学习推荐

电商推荐系统特训】

8 节实训课➕共享社群答疑➕源码

六大实战项目,从零开始

1月20日开课(下周三)

火热报名中

课程详情

戳一戳


购买,咨询,查看课程,请点击阅读原文

↓ ↓ ↓ 

以上是关于面试题:隐语义模型是在推荐系统中的应用的吗?的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统--隐语义模型LFM

个性化推荐中的隐语义模型

推荐系统中的矩阵分解演变方式

推荐系统之隐含语义模型LFM--Java代码

推荐算法之用矩阵分解做协调过滤——LFM模型

推荐算法之隐语义模型(LFM)矩阵分解梯度下降算法实现