推荐算法Chapter2.1 协同过滤基础与邻域方法


1.协同过滤推荐 vs 基于内容的推荐

1. 协同过滤的核心思想:矩阵分解与相似度

协同过滤本质上是在处理一个用户-物品交互矩阵 $R$。矩阵的行代表用户(Users),列代表物品(Items),单元格的值代表行为(评分、点击等)。

2. 两种主要的协同过滤路径

User-based CF (基于用户的协同过滤)

  • 逻辑: 找到与目标用户 $A$ 兴趣相似的 Top-N 用户,把他们喜欢过但 $A$ 没见过的东西推给 $A$。
  • 场景: 适用于用户少、物品多,且时效性强的场景(如新闻推荐)。
数学表达
  1. 用户相似度计算(以余弦相似度为例):

    其中 $N(u)$ 是用户 $u$ 评价过的物品集合,$r_{ui}$ 是用户 $u$ 对物品 $i$ 的评分。

  2. 预测评分

Item-based CF (基于物品的协同过滤)

  • 逻辑: 如果用户喜欢物品 $a$,而物品 $a$ 与 $b$ 经常被同一群人购买(相似),则把 $b$ 推给该用户。
  • 场景: 适用于物品少、用户多,且兴趣相对稳定的场景(如电商、电影)。
    注意: 工业界 Item-based 往往比 User-based 更常用,因为物品的属性通常比人的性格更稳定。
数学表达
  1. 物品相似度计算

    $N(i)$ 是喜欢物品 $i$ 的用户集合。该公式意味着:如果两个物品被同一群人喜欢,它们就相似。

  2. 预测评分

3. 对比

协同过滤 (CF) 基于内容 (CB)
核心逻辑 找相似的人/物(群体智慧) 找属性相似的物(内容匹配)
特征工程 不需要物品属性特征,只需 ID 极度依赖物品的标签、文本、元数据
惊喜感 高(能推出来你没见过的领域) 低(推荐的东西通常很相似)
冷启动 劣势:新用户/新物品无法处理 优势:只要有内容标签,新物品就能推
可解释性 弱(“因为买了它的人也买了…”) 强(“因为你喜欢动作片,这又是一部…”)

相似度计算公式

1. 欧几里得距离 (Euclidean Distance)

  • 定义:$n$ 维空间中两点间的真实距离。
  • 公式:$d(x, y) = \sqrt{\sum (x_i - y_i)^2}$
  • 特点:受量纲影响大,使用前需标准化 (Standardization)

2. 余弦相似度 (Cosine Similarity)

  • 定义:两个向量夹角的余弦值,衡量方向一致性。
  • 公式:$Sim(A, B) = \frac{A \cdot B}{|A| |B|}$
  • 特点:在推荐系统中应用最广,因为它不随向量模长改变,适合处理用户行为频次不一的情况。

3. 皮尔逊相关系数 (Pearson Correlation)

  • 定义:衡量两个变量线性相关的程度。
  • 公式:中心化后的余弦相似度。
  • 特点:能自动解决用户评分尺度 (Rating Bias) 不一的问题(如:有人习惯好评,有人习惯差评)。

4. Jaccard 相似系数

  • 定义:交集除以并集。
  • 公式:$J(A, B) = \frac{|A \cap B|}{|A \cup B|}$
  • 特点:适用于隐式反馈数据(只有 0/1 行为,没有具体评分分数)。

5. 汉明距离 (Hamming Distance)

  • 定义:两个等长向量中不同元素的个数。
  • 特点:常用于 SimHash 后的位运算,在海量文本去重和近邻搜索中效率极高。

2.基于用户的协同过滤 vs 基于物品的协同过滤

1. 核心思想 (Core Idea)

协同过滤的核心在于 “协同” 二字,即利用群体智慧进行预测。其核心假设是:在过去有相似偏好的人,在未来也会有相似的偏好。

2. 基于用户的协同过滤 (UserCF)

2.1 核心原理

通过寻找与目标用户 $u$ 兴趣相似的 Top-K 邻居,将邻居喜欢而 $u$ 没见过的物品推荐给 $u$。

2.2 数学表达

  1. 用户相似度计算(以余弦相似度为例):

    其中 $N(u)$ 是用户 $u$ 评价过的物品集合,$r_{ui}$ 是用户 $u$ 对物品 $i$ 的评分。

  2. 预测评分

    这里减去均值 $\bar{r}$ 是为了消除不同用户打分尺度(宽松或严格)的影响。

2.3 适用场景

  • 代表领域:新闻推荐、社交动态。
  • 原因:新闻时效性强,物品更新极快,但用户兴趣相对稳定,通过“邻居”可以快速发现热点。

3. 基于物品的协同过滤 (ItemCF)

3.1 核心原理

根据用户历史行为,计算物品间的相似度,推荐与用户曾喜欢的物品最相似的其他物品。

3.2 数学表达

  1. 物品相似度计算

    $N(i)$ 是喜欢物品 $i$ 的用户集合。该公式意味着:如果两个物品被同一群人喜欢,它们就相似。

  2. 预测评分

3.3 适用场景

  • 代表领域:电商(亚马逊、淘宝)、电影(Netflix、优酷)。
  • 原因:物品库相对稳定,且用户的长期兴趣通常围绕特定品类展开。

4. UserCF vs. ItemCF 对比总结

维度 UserCF ItemCF
推荐逻辑 人以群分(像你的人也喜欢这些) 物以类聚(你喜欢的物品关联这些)
可解释性 弱(很难解释另一个用户是谁) (因为你买过 A,所以推 B)
计算复杂度 用户多时,计算压力大 物品多时,计算压力大
惊喜感 (跨领域推荐能力强) 低(倾向于推荐相似领域的物品)
存储压力 维护用户相似度矩阵 维护物品相似度矩阵

5. 协同过滤 vs. 基于内容推荐 (CB)

区别维度 协同过滤 (CF) 基于内容 (CB)
数据源 用户行为(评分、点击) 物品属性(标签、文本、类别)
特征提取 自动(通过交互自动捕捉) 手动/显式(需要 NLP/图像处理)
新物品处理 冷启动困难(无交互无法推荐) 友好(只要有标签就能推)
核心挑战 数据稀疏性、冷启动 特征提取质量、推荐过于狭窄

6. 工业界进阶与技术演进

6.1 核心瓶颈与对策

  1. 数据稀疏性 (Sparsity):用户交互过的物品仅占总量的极小部分,导致相似度计算不准。
    • 对策:引入矩阵分解 (Matrix Factorization),将高维稀疏矩阵分解为低维稠密向量。
  2. 冷启动问题 (Cold Start):新用户或新物品由于没有交互数据,CF 无法发挥作用。
    • 对策:利用基于内容 (CB) 的特征作为补充,或使用热门榜单兜底。
  3. 马太效应 (Popularity Bias):热门物品会与大多数物品产生高相似度。
    • 对策:在相似度计算中引入热门惩罚项

6.2 现代演进路径

  • 召回层应用:在现代深度推荐系统中,ItemCF 思想常被简化为“共现矩阵”,作为多路召回中的一小路。
  • Embedding 化:ItemCF 的“物品共现”思想影响了 Item2VecGraph Embedding (如 DeepWalk, EGES),通过向量化手段处理相似性。
  • 图神经网络 (GNN):将用户-物品关系建模为二分图,通过 GNN(如 LightGCN)捕捉高阶协同信号,这是 CF 在深度学习时代的终极进化版。

7. 面试避坑指南

  1. 数据稀疏性问题:如果矩阵太稀疏(用户只买过一两个东西),CF 效果会极差。此时应提到 矩阵分解 (Matrix Factorization)
  2. 热门物品长尾效应:对于像“大米”或“周杰伦”这种全网热门,会导致相似度计算偏离。
    • 优化:在计算相似度时给热门物品降权(添加处罚因子)。
  3. 实时性:CF 算法通常涉及大矩阵运算,工业界常通过 “离线计算相似度矩阵 + 在线召回” 的流程实现。

知识点:缓解数据稀疏性的相似度改进

1. 核心背景

在推荐系统初期或长尾物品库中,数据稀疏性 (Data Sparsity) 是邻域方法(CF)的最大敌人。

  • 痛点:传统的余弦相似度或皮尔逊相关系数仅关注“共有项”。如果两个物品只被 1 个用户共同购买过,且该用户对两者评分都高,相似度就会倾向于 1.0,产生严重的统计偏见

2. 改进方案:加权相似度 (Weighted Similarity)

A. 数学公式

针对 ItemCF,改进后的相似度公式如下:

  • $|U_i \cap U_j|$:物品 $i$ 和 $j$ 的共同交互用户数。
  • $\lambda$ (Shrinkage Factor):平滑参数(通常为正整数)。
  • $sim(i, j)$:原始计算出的相似度(如余弦相似度)。

B. 为什么有效?

  1. 显著性权重:该方法给相似度增加了一个“置信度”。交互人数越多,置信度越高。
  2. 抑制噪声:当共同用户数极小时,权重项 $\approx 0$,从而扼杀了那些因为偶然因素产生的高分相似度。
  3. 贝叶斯平滑:其思想本质上是将估计值向“先验均值(0)”收缩。样本量不足时,我们更倾向于认为它们不相似。

3. 拓展思考:解决稀疏性的进阶路径

面试中,如果该改进方法不足以打动面试官,可以补充以下技术演进:

  1. 矩阵分解 (MF)

    • 原理:将 User-Item 矩阵分解为 $P$(User 矩阵)和 $Q$(Item 矩阵)。
    • 公式:$\hat{R} = P \times Q^T$。
    • 价值:通过 Latent Factor(隐向量)填充了缺失值,具备比邻域方法更强的泛化能力。
  2. 融合侧信息 (Side Information)

    • 当交互数据几乎为 0 时,引入物品的 Category(类别)Tags(标签) 或用户的 Age、Gender 进行相似度补偿。
    • 公式(混合相似度):

    • 即使没有共同购买,但如果两个物品属于同一类别、同一品牌,它们依然有一定的相似性。

  3. 双塔模型 (Two-Tower Model)
    • 现代工业界的主流方案。分别学习 User 和 Item 的 Embedding,通过内积(Inner Product)快速计算相似度,能同时处理稀疏交互和稠密特征。

4. 常见面试追问

  • 问:如何确定 $\lambda$ 的值?
  • :通过离线验证集进行调优。通常观察不同 $\lambda$ 下推荐列表的准确率(Precision)和覆盖率(Coverage)。如果系统非常稀疏,$\lambda$ 往往取值较大。

Author: YANG
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source YANG !
  TOC