协同过滤模型

·1528·4 分钟
AI摘要: 本文深入探讨了协同过滤算法,包括User CF和Item CF两种基本方法及其优缺点。同时,文章还详细讨论了矩阵分解技术在推荐系统中的应用,包括特征值分解、奇异值分解(SVD)和梯度下降法的基本原理、优点与缺点。此外,文章指出了当前协同过滤模型面临的挑战以及潜在的改进方向。

协同过滤算法是最原始的推荐算法,即使在深度学习占据主场的今天,依旧有非常强的学习意义

User CF

相似的用户会喜欢相同的Item

优点:UserCF基于用户相似度推荐,非常具有社交特性,比较适合新闻场景

缺点:互联网场景中,用户数远大于Item数

  1. 用户相似度矩阵的存储开销非常大,用户数的增长会导致用户相似度矩阵的空间复杂度以O(N2)O(N^2)的速度增长
  2. 用户历史数据非常稀疏,对于只有几次购买行为的用户,要找到与他相似的用户准确度非常低,导致UserCF不适合正反馈获取困难的场景(酒店预订、大件商品购买等低频场景)

Item CF

获取m个用户和n个Item交互的mnm*n矩阵,按照列计算不同Item之间的相似性,得到nnn*n的相似度矩阵。针对用户正反馈中的Item,找到Top k个相似的Item,生成推荐列表.

矩阵分解

CF的一个严重的缺点:热点Item有非常强的头部效应,导致和大量Item产生相似性,而尾部Item由于特征向量稀疏,很少和其他Item产生相似性,导致很少被推荐。

归根结底,不同Item的向量的稀疏性导致了推荐的缺陷,矩阵分解通过更加稠密的隐向量来挖掘用户和Item的隐含兴趣和隐含特征

image-20250117110000800

kk 的取值越小,隐向量包含的信息越少,模型的泛化程度越高;

kk 的取值越大,隐向量的表达能力越强,但泛化程度相应降低。

此外,kk 的取值还与矩阵分解的求解复杂度直接相关。

在具体应用中,kk 的取值要经过多次试验找到一个推荐效果和工程开销的平衡点

矩阵分解过程

  • 特征值分解
  • 奇异值分解(SVD)
  • 梯度下降

特征值分解

只适合方阵来分解,User-Item矩阵可不是方阵,pass

奇异值分解

M=UΣVTM = U \Sigma V^T , 其中UmmU_{m*m}VnnV_{n*n}是正交矩阵,Σmn\Sigma_{m*n}的对角阵

  1. 奇异值分解要求原始共现矩阵是稠密的,但是互联网场景中,大部分用户的行为历史非常少,导致User-Item矩阵是稀疏的。
  2. 奇异值分解的时间复杂度为O(MN2)O(M*N^2) ,这是不可接受的

梯度下降法

我们用qiq_i表示用户ii的特征向量,pup_u表示ItemuItem_u的特征向量,那么用户iiItemuItem_u的相关性ru,ir_{u, i}就是ru,i=qiTpur_{u, i} = q_i^Tp_u

那么训练损失就是:

SSE=u,i(ru,iqiTpu)2+λ(qi+pu)2\begin{align} SSE = \sum_{u, i} (r_{u, i} - q_i^T p_u)^2 + \lambda (||q_i|| + ||p_u||)^2 \end{align}

这里的ru,ir_{u, i}是来自共现矩阵中用户对Item的真实评价标签, 后面λ\lambda部分是正则化项。

优点:

  • 泛化能力强:在一定程度上解决了数据稀疏问题。
  • 更好的扩展性和灵活性:矩阵分解的最终产岀是用户和物品隐向量,这其实与深度学习中的 Embedding 思想不谋而合(不能说一样,只能说基本不差)

缺点:

  • 还是不能加入用户(Age、gender)、Item(价格、评分、分类)和上下文的特征,损失了不少有用的信息
Kaggle学习赛初探