推荐系统深入解析:从显式反馈到探索与利用的权衡
1. 显式反馈下的推荐模型
在推荐系统中,显式反馈指用户明确给出的对物品的评分信息。我们可以将推荐问题看作矩阵补全问题,目标是预测评分矩阵 $Y$ 中所有缺失的条目。
1.1 矩阵分解
   矩阵分解是解决推荐问题的一种有效方法。我们可以将其表示为如下优化问题:
   
   $L(Z) = \sum_{ij:Y_{ij}\neq?} (Z_{ij} - Y_{ij})^2 = ||Z - Y||^2_F$
   
   然而,这是一个欠定问题,因为填充 $Z$ 中缺失条目的方法有无数种。为了解决这个问题,我们假设 $Y$ 是低秩的,那么可以将其写成 $Z = UV^T \approx Y$ 的形式,其中 $U$ 是 $M \times K$ 矩阵,$V$ 是 $N \times K$ 矩阵,$K$ 是矩阵的秩,$M$ 是用户数量,$N$ 是物品数量。预测形式为:
   
   $\hat{y}_{ui} = u^T_u v_i$
   
   这就是矩阵分解。
  
如果我们观察到所有的 $Y_{ij}$ 条目,可以使用奇异值分解(SVD)找到最优的 $Z$。但当 $Y$ 有缺失条目时,对应的目标函数不再是凸函数,也没有唯一的最优解。我们可以使用交替最小二乘法(ALS)来拟合,即先给定 $V$ 估计 $U$,再给定 $U$ 估计 $V$;或者使用随机梯度下降(SGD)。
   在实践中,考虑用户和物品的特定基线是很重要的,预测公式可以写成:
   
   $\hat{y}
   
    {ui} = \mu + b_u + c_i + u^T_u v_i$
    
    此外,我们还可以对参数添加 $\ell_2$ 正则化,得到目标函数:
    
    $L(\theta) = \sum
   
   {ij:Y_{ij}\neq?} (y_{ij} - \hat{y}
   
    {ij})^2 + \lambda(b^2_u + c^2_i + ||u_u||^2 + ||v_i||^2)$
    
    使用 SGD 优化时,通过从观测值集合中随机采样一个 $(u, i)$ 条目,并进行以下更新:
    
    $b_u = b_u + \eta(e
   
   {ui} - \lambda b_u)$
   
   $c_i = c_i + \eta(e_{ui} - \lambda b_i)$
   
   $u_u = u_u + \eta(e_{ui}u_u - \lambda u_u)$
   
   $v_i = v_i + \eta(e_{ui}v_i - \lambda v_i)$
   
   其中 $e_{ui} = y_{ui} - \hat{y}_{ui}$ 是误差项,$\eta \geq 0$ 是学习率。
  
下面是矩阵分解的流程:
graph TD;
    A[初始化U和V] --> B[计算预测值\(\hat{y}_{ui}\)];
    B --> C[计算误差\(e_{ui}\)];
    C --> D[更新参数\(b_u, c_i, u_u, v_i\)];
    D --> E{是否满足停止条件};
    E -- 否 --> B;
    E -- 是 --> F[输出最终的U和V];
  1.2 概率矩阵分解(PMF)
   我们可以将矩阵分解转换为概率模型,定义为:
   
   $p(y_{ui} = y) = N(y|\mu + b_u + c_i + u^T_u v_i, \sigma^2)$
   
   这就是概率矩阵分解(PMF)。该模型的负对数似然(NLL)等价于矩阵分解的目标函数。概率视角使我们更容易推广模型,例如,使用泊松或负二项似然来处理评分是整数的情况。
  
1.3 实例:Netflix 和 MovieLens
- Netflix :应用 PMF 到 Netflix 数据集,使用 $K = 2$ 个潜在因子。通过可视化学习到的电影嵌入向量,我们可以看到不同类型电影在潜在空间中的分布。例如,左边是低俗幽默和恐怖电影,右边是严肃戏剧,顶部是受到好评的独立电影,底部是主流好莱坞大片。用户也被嵌入到相同的空间中,我们可以通过潜在嵌入空间中的接近程度来预测用户对视频的评分。
 - MovieLens :将 PMF 应用到 MovieLens - 1M 数据集,使用 $K = 50$ 个因子。虽然模型不是特别准确,但能捕捉到数据中的一些结构。例如,模型似乎能“理解”用户的潜在偏好,即使在训练过程中没有使用明确的类型信息,预测的电影类型也与用户自己的前 10 名列表中的类型相符。
 
1.4 自编码器
   矩阵分解是一个(双)线性模型,我们可以使用自编码器构建非线性版本。设 $y_{:,i} \in R^M$ 是评分矩阵的第 $i$ 列,未知评分设为 0。我们可以使用以下形式的自编码器来预测评分向量:
   
   $f(y_{:,i}; \theta) = W^T \phi(Vy_{:,i} + \mu) + b$
   
   其中 $V \in R^{K \times M}$ 将评分映射到嵌入空间,$W \in R^{K \times M}$ 将嵌入空间映射到评分分布,$\mu \in R^K$ 是隐藏单元的偏置,$b \in R^M$ 是输出单元的偏置。这是 AutoRec 模型的基于物品的版本,有 $2MK + M + K$ 个参数。还有基于用户的版本,有 $2NK + N + K$ 个参数。在 MovieLens 和 Netflix 数据集上,基于物品的方法效果更好。
  
   我们可以仅更新与 $y_{:,i}$ 观测条目相关的参数,并对权重矩阵添加 $\ell_2$ 正则化,得到目标函数:
   
   $L(\theta) = \sum_{i = 1}^{N} \sum_{u:y_{ui}\neq?} (y_{u,i} - f(y_{:,i}; \theta)_u)^2 + \frac{\lambda}{2} (||W||^2_F + ||V||^2_F)$
   
   尽管这种方法简单,但效果比一些更复杂的方法(如受限玻尔兹曼机和局部低秩矩阵近似)更好。
  
2. 隐式反馈下的推荐模型
在实际应用中,用户并非总是提供显式评分,隐式反馈更为常见。例如,用户观看了某部电影但没有观看另一部电影,这可以被视为一种隐式信号,表明用户更喜欢前者。
2.1 贝叶斯个性化排序(BPR)
   为了拟合 $(u, i, j)$ 形式的数据,我们需要使用排序损失,使模型为用户 $u$ 对物品 $i$ 的排名高于物品 $j$。一种简单的方法是使用伯努利模型:
   
   $p(y_n = (u, i, j)|\theta) = \sigma(f(u, i; \theta) - f(u, j; \theta))$
   
   结合高斯先验,我们得到以下最大后验(MAP)估计问题:
   
   $L(\theta) = \sum_{(u,i,j) \in D} \log \sigma(f(u, i; \theta) - f(u, j; \theta)) - \lambda||\theta||^2$
   
   其中 $D = {(u, i, j) : i \in I^+_u, j \in I \setminus I^+_u}$,$I^+_u$ 是用户 $u$ 选择的物品集合,$I \setminus I^+_u$ 是其他物品集合。这就是贝叶斯个性化排序(BPR)。
  
当可能的物品集合很大时,$I \setminus I^+_u$ 中的负样本数量可能非常大。我们可以通过对负样本进行子采样来近似损失。
   另一种替代对数损失的方法是使用 hinge 损失,形式为:
   
   $L(y_n = (u, i, j), f) = \max (m - (f(u, i) - f(u, j)), 0) = \max (m - f(u, i) + f(u, j), 0)$
   
   其中 $m \geq 0$ 是安全边际,它试图确保负样本 $j$ 的得分不会比正样本 $i$ 高 $m$ 以上。
  
下面是 BPR 训练的流程:
graph TD;
    A[初始化参数\(\theta\)] --> B[从D中采样\((u, i, j)\)];
    B --> C[计算\(f(u, i; \theta) - f(u, j; \theta)\)];
    C --> D[计算损失\(L(\theta)\)];
    D --> E[更新参数\(\theta\)];
    E --> F{是否满足停止条件};
    F -- 否 --> B;
    F -- 是 --> G[输出最终的\(\theta\)];
  2.2 因子分解机(FM)
   AutoRec 方法是非线性的,但对用户和物品的处理不对称。因子分解机是一种更对称的判别式建模方法。对于给定的用户 - 物品对 $x = [one - hot(u), one - hot(i)]$,预测输出的基本思想是:
   
   $f(x) = \mu + \omega^T x + x^T W x = \mu + \sum_{i = 1}^{D} v_i x_i + \sum_{i = 1}^{D} \sum_{j = i + 1}^{D} (w^T_i w_j) x_i x_j$
   
   其中 $W \in R^{D \times K}$ 是低秩矩阵,$\omega \in R^D$ 是权重向量,$\mu \in R$ 是全局偏移,$D = (M + N)$ 是输入数量。这就是因子分解机(FM)。
  
   计算上述公式的时间复杂度为 $O(KD^2)$,但我们可以将其重写为 $O(KD)$ 时间复杂度的形式:
   
   $\sum_{i = 1}^{D} \sum_{j = i + 1}^{D} (w^T_i w_j) x_i x_j = \frac{1}{2} \sum_{i = 1}^{D} \sum_{j = 1}^{D} (w^T_i w_j) x_i x_j - \frac{1}{2} \sum_{i = 1}^{D} (w^T_i w_i) x_i x_i$
   
   $= -\frac{1}{2} \left( \sum_{i = 1}^{D} \sum_{j = 1}^{D} \sum_{k = 1}^{K} w_{ik} w_{jk} x_i x_j - \sum_{i = 1}^{D} \sum_{k = 1}^{K} w_{ik} w_{ik} x_i x_i \right)$
   
   $= -\frac{1}{2} \sum_{k = 1}^{K} \left( (\sum_{i = 1}^{D} w_{ik} x_i)^2 - \sum_{i = 1}^{D} w_{ik}^2 x_i^2 \right)$
   
   对于稀疏向量,整体复杂度与非零分量的数量呈线性关系。
  
我们可以使用任何损失函数来拟合这个模型,例如,如果有显式反馈,可以选择均方误差(MSE)损失;如果有隐式反馈,可以选择排序损失。
   还有一种深度因子分解机,将上述方法与多层感知机(MLP)相结合,形式为:
   
   $f(x; \theta) = \sigma(FM(x) + MLP(x))$
   
   这种模型结合了双线性模型和 MLP 的优点,双线性模型捕捉特定用户和物品之间的显式交互(一种记忆形式),而 MLP 捕捉用户特征和物品特征之间的隐式交互,使模型能够更好地泛化。
  
2.3 神经矩阵分解
   神经矩阵分解是另一种将双线性模型与深度神经网络相结合的方法。双线性部分定义了广义矩阵分解(GMF)路径,计算用户 $u$ 和物品 $i$ 的特征向量:
   
   $z^1_{ui} = P_{u,:} \odot Q_{i,:}$
   
   其中 $P \in R^{M \times K}$ 是用户嵌入矩阵,$Q \in R^{N \times K}$ 是物品嵌入矩阵。DNN 部分是一个应用于嵌入向量拼接的 MLP:
   
   $z^2_{ui} = MLP([ \tilde{U}
   
    {u,:}, \tilde{V}
   
   {i,:}])$
   
   最后,模型将两者结合得到:
   
   $f(u, i; \theta) = \sigma(w^T [z^1_{ui}, z^2_{ui}])$
   
   在 [He + 17] 中,模型在隐式反馈上进行训练,$y_{ui} = 1$ 表示用户 $u$ 与物品 $i$ 的交互被观察到,否则 $y_{ui} = 0$。该模型也可以训练以最小化 BPR 损失。
  
3. 利用侧信息
到目前为止,我们假设预测器可用的唯一信息是用户和物品的整数 ID。这种表示非常匮乏,在遇到新用户或新物品时会失效(即冷启动问题)。为了克服这个问题,我们需要利用“侧信息”。
物品的侧信息通常包括丰富的元数据,如文本(标题)、图像(封面)、高维分类变量(位置)或标量(价格)。用户的侧信息取决于交互系统的具体形式,例如搜索引擎中用户发出的查询列表,在线购物网站中的搜索、浏览和购买历史,社交网络中的友谊图等。
在因子分解机框架中,很容易通过扩展 $x$ 的定义来捕获这些侧信息。同样的输入编码也可以输入到其他类型的模型中,如 deepFM 或 neuralMF。除了用户和物品的特征,还可能有其他上下文特征,如交互时间。最近查看物品的顺序也是一个有用的信号,例如 Caser 模型通过嵌入最后 $M$ 个物品,并将 $M \times K$ 输入视为图像,使用卷积层来捕获这一信息。
4. 探索与利用的权衡
推荐系统与其他预测问题不同的一个有趣之处在于,系统训练的数据是早期版本系统推荐的结果,因此存在反馈循环。例如,YouTube 视频推荐系统有大量视频,系统需要为用户提供一个短列表。如果用户观看了其中一个视频,系统可以认为这是一个好的推荐,并相应地更新模型参数。但可能存在其他用户更喜欢的视频,系统只有尝试展示一些用户反应不确定的物品才能回答这个反事实问题,这就是探索与利用的权衡。
此外,系统可能需要等待很长时间才能检测到推荐策略的改变是否有益。通常使用强化学习来学习优化长期奖励的策略。
综上所述,推荐系统涉及多种模型和技术,从显式反馈到隐式反馈,从简单的线性模型到复杂的神经网络模型,并且需要考虑侧信息和探索与利用的权衡。在实际应用中,我们需要根据具体情况选择合适的方法,以提高推荐系统的性能。
推荐系统深入解析:从显式反馈到探索与利用的权衡
5. 不同推荐模型的对比分析
   为了更清晰地了解各种推荐模型的特点,我们对前面介绍的几种模型进行对比分析,如下表所示:
   
   | 模型名称 | 模型类型 | 处理反馈类型 | 复杂度 | 优点 | 缺点 |
   
   | — | — | — | — | — | — |
   
   | 矩阵分解 | 线性 | 显式 | 适中 | 原理简单,易于实现;能捕捉用户和物品的潜在特征 | 欠定问题,需要添加约束;对非线性关系处理能力弱 |
   
   | 概率矩阵分解(PMF) | 概率线性 | 显式 | 适中 | 可转换为概率模型,便于推广;能处理评分的整数特性 | 依赖于假设的概率分布 |
   
   | 自编码器(AutoRec) | 非线性 | 显式 | 较高 | 可构建非线性模型,效果较好 | 参数较多,训练时间可能较长 |
   
   | 贝叶斯个性化排序(BPR) | 排序 | 隐式 | 适中 | 适用于隐式反馈数据;能有效处理物品排序问题 | 负样本数量大时需要子采样 |
   
   | 因子分解机(FM) | 线性 | 显式/隐式 | 适中 | 能处理多种类型反馈;可捕捉特征间的交互;复杂度可优化 | 线性模型,对复杂非线性关系处理有限 |
   
   | 深度因子分解机 | 非线性 | 显式/隐式 | 高 | 结合双线性模型和 MLP 优点,泛化能力强 | 模型复杂,训练难度大 |
   
   | 神经矩阵分解 | 非线性 | 隐式 | 高 | 结合双线性和 DNN,能更好地处理隐式反馈 | 模型复杂,计算资源需求高 |
  
通过这个对比表格,我们可以根据不同的应用场景和数据特点选择合适的推荐模型。例如,如果数据是显式反馈且关系较为线性,矩阵分解或 PMF 可能是不错的选择;如果是隐式反馈,BPR 或神经矩阵分解可能更合适。
6. 推荐系统的评估指标
   在实际应用中,我们需要评估推荐系统的性能。常见的评估指标有以下几种:
   
   1.
   
    准确率(Precision)
   
   :预测正确的推荐结果占所有推荐结果的比例。计算公式为:$Precision = \frac{TP}{TP + FP}$,其中 $TP$ 是真正例(推荐的物品是用户喜欢的),$FP$ 是假正例(推荐的物品用户不喜欢)。
   
   2.
   
    召回率(Recall)
   
   :预测正确的推荐结果占所有用户喜欢的物品的比例。计算公式为:$Recall = \frac{TP}{TP + FN}$,其中 $FN$ 是假反例(用户喜欢但未被推荐的物品)。
   
   3.
   
    均方误差(MSE)
   
   :用于评估显式反馈下预测评分与真实评分之间的误差。计算公式为:$MSE = \frac{1}{n} \sum_{i = 1}^{n} (y_i - \hat{y}_i)^2$,其中 $y_i$ 是真实评分,$\hat{y}_i$ 是预测评分,$n$ 是样本数量。
   
   4.
   
    归一化折损累积增益(NDCG)
   
   :考虑了推荐列表的顺序,更适合评估排序问题。它衡量了推荐列表的质量,值越高表示推荐列表越符合用户的偏好。
  
这些评估指标各有优缺点,在实际应用中通常会结合使用多个指标来全面评估推荐系统的性能。
7. 推荐系统的未来发展趋势
   随着技术的不断发展,推荐系统也在不断演进。以下是一些未来的发展趋势:
   
   1.
   
    多模态信息融合
   
   :除了现有的侧信息,未来推荐系统将更多地融合多模态信息,如音频、视频、文本等。例如,在电影推荐中,结合电影的预告片视频、剧情介绍文本和电影原声音频等信息,能更全面地了解电影的特点,从而提供更精准的推荐。
   
   2.
   
    强化学习的应用拓展
   
   :目前强化学习在处理探索与利用权衡方面有一定应用,未来将进一步拓展其在推荐系统中的应用。例如,通过强化学习动态调整推荐策略,以适应不同用户的实时行为和环境变化。
   
   3.
   
    隐私保护推荐
   
   :随着用户对隐私保护的关注度不断提高,未来推荐系统需要在保护用户隐私的前提下提供高质量的推荐。例如,使用差分隐私技术对用户数据进行处理,在不泄露用户敏感信息的情况下进行模型训练。
   
   4.
   
    可解释性推荐
   
   :目前很多推荐模型是黑盒模型,用户难以理解推荐结果的原因。未来推荐系统将更加注重可解释性,让用户清楚地知道为什么会得到某个推荐结果,提高用户对推荐系统的信任度。
  
8. 推荐系统的实际应用案例
   为了更好地理解推荐系统在实际中的应用,我们来看几个具体案例:
   
   1.
   
    音乐推荐平台
   
   :如 Spotify,它使用多种推荐算法结合用户的听歌历史、收藏列表、创建的歌单等信息,为用户推荐个性化的音乐。同时,它还会考虑歌曲的流派、节奏、歌词等特征,以及用户所在的地理位置、时间等上下文信息。
   
   2.
   
    电商平台
   
   :像 Amazon,通过分析用户的浏览历史、购买记录、搜索关键词等数据,为用户推荐相关的商品。它还会根据商品的价格、评价、销量等因素进行排序,提供更符合用户需求的推荐列表。
   
   3.
   
    新闻推荐系统
   
   :例如今日头条,根据用户的阅读历史、点赞、评论等行为,为用户推荐感兴趣的新闻文章。同时,它会实时更新新闻内容,根据新闻的热度、时效性等因素进行推荐。
  
这些实际应用案例展示了推荐系统在不同领域的重要作用,也体现了推荐系统需要不断优化和改进以满足用户的需求。
9. 总结
推荐系统是一个复杂且不断发展的领域,涉及多种模型和技术。从显式反馈到隐式反馈,从简单的线性模型到复杂的神经网络模型,我们有多种选择来构建推荐系统。同时,利用侧信息可以解决冷启动问题,而处理探索与利用的权衡则能提高推荐系统的长期性能。
在实际应用中,我们需要根据具体的数据特点和业务需求选择合适的模型和评估指标。未来,推荐系统将朝着多模态信息融合、强化学习应用拓展、隐私保护和可解释性等方向发展。通过不断的研究和实践,我们可以构建出更加智能、高效、个性化的推荐系统,为用户提供更好的服务。
以下是一个简单的推荐系统选择流程图:
graph TD;
    A[数据类型] --> B{显式反馈};
    B -- 是 --> C{关系线性程度};
    C -- 线性 --> D[矩阵分解/PMF];
    C -- 非线性 --> E[自编码器];
    B -- 否 --> F{排序需求};
    F -- 是 --> G[BPR/神经矩阵分解];
    F -- 否 --> H[因子分解机/深度因子分解机];
  这个流程图可以帮助我们根据数据类型和特点选择合适的推荐模型。希望通过本文的介绍,你对推荐系统有了更深入的了解,能够在实际应用中更好地构建和优化推荐系统。
                      
                            
                        
                            
                            
                          
                          
                            
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					713
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            