隐语义模型和Matrix Factorization Model

隐语义模型: latent factor model

和latent factor model相关的名词有LSI, pLSA,LDA和topic model。

隐语义模型的核心思想在于,通过隐含特征联系用户和物品。即先对用户喜欢的物品进行分类,得到用户的兴趣,再通过兴趣分类挑选物品。这个模型主要关注的问题是:

(1)如何给物品进行分类

(2)如何确定用户对哪些分类感兴趣,以及感兴趣的程度?

(3)对于一个给定的类,如何确定用户对这个类的哪些物品感兴趣?

在LFM中,用户u对物品i的preference如下定义:

<math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">p</mi><mfenced><mrow><mi mathvariant="normal">u</mi><mo>,</mo><mo>&#xA0;</mo><mi mathvariant="normal">i</mi></mrow></mfenced><mo>=</mo><msub><mi mathvariant="normal">r</mi><mi>ui</mi></msub><mo>&#xA0;</mo><mo>=</mo><msup><msub><mi mathvariant="normal">p</mi><mi mathvariant="normal">u</mi></msub><mi mathvariant="normal">T</mi></msup><msub><mi mathvariant="normal">q</mi><mi mathvariant="normal">i</mi></msub><mo>&#xA0;</mo><mo>=</mo><mo>&#xA0;</mo><munderover><mo>&#x2211;</mo><mrow><mi mathvariant="normal">k</mi><mo>&#xA0;</mo><mo>=</mo><mo>&#xA0;</mo><mn>1</mn></mrow><mi mathvariant="normal">K</mi></munderover><msub><mi mathvariant="normal">p</mi><mrow><mi mathvariant="normal">u</mi><mo>,</mo><mi mathvariant="normal">k</mi></mrow></msub><msub><mi mathvariant="normal">q</mi><mrow><mi mathvariant="normal">i</mi><mo>,</mo><mi mathvariant="normal">k</mi></mrow></msub></math>

相比起来,LFM的优势在于能节省大量存储空间,但是它的时间复杂度要稍高于CF,而在实时预测的能力上则不如CF。

Matrix Factorization

Matrix Factorization是一种和CF以及LFM都相关的方法。事实上,在实践中,我们的推荐系统一般都不只是使用一种方法,我们使用一种算法时,也未必使用它的原始结构和方法。我们使用算法的思想,根据这些思想把各种component组合起来,使用不同的优化方法达到我们的目的。实际上,算法是一个非常宽泛的概念,同样的算法有些是平级的,有些是上下级的,有些是相关的,我们分类算法的时候常常不会指明这一点,但它们之间的关系往往在实践中非常重要。

实际上,我们可以看到,LFM的本质就是矩阵乘法,其乘法的结果就是我们之前提到的user-item matrix。而使用matrix factorization,我们可以从user-item matrix中,得到这两个矩阵,再由这两个矩阵,得到新的user-item matrix。

扫描二维码关注公众号,回复: 3569649 查看本文章

详细的MF思想可以见http://nicolas-hug.com/blog/matrix_facto_1

简单地说,MF的基本思想是基于SVD分解的,即R = ADUT,其中D是对角矩阵,也是latent factors的权重矩阵。如果我们已知R,当然用代数方法就可以解决问题:A的列是RRT的特征向量组合,U的列是RTR的特征向量组合。 

但现在R是一个稀疏矩阵,里面的大部分元素都是未知的,我们就只能用别的方法进行矩阵分解。使用Simon Frank的方法,我们用一个优化问题来formulate这个问题。我们设pu和qi分别代表A和U的列向量,则

但R是不完整的,我们最开始的时候,忽略所有空值,也忽略正交限制,然后从这里开始我们的算法。我们使用SGD(Stochastic Gradient Descent)算法来解决这个优化问题(注意这个问题是非凸的)。

这个模型本身被广泛使用,并且有非常多变种,我们会在不同的场景下使用不同的变种。

猜你喜欢

转载自blog.csdn.net/friyal/article/details/82759462