基本问题

推荐系统要做的事,是在海量物品中,预测你对哪些物品感兴趣。

形式化地说:给定用户 u 和物品 i,预测一个评分或点击概率。

经典方法:协同过滤

协同过滤的核心思想很朴素:与你品味相似的人喜欢的东西,你可能也喜欢。

两种主要形式:

基于用户的协同过滤:找到与你行为相似的用户群,把他们喜欢但你没接触过的物品推荐给你。

基于物品的协同过滤:计算物品之间的相似度(基于"喜欢 A 的人也喜欢 B"的共现统计),根据你的历史行为推荐相似物品。

优点:不需要理解物品的内容本身,纯粹从行为模式中学习。

缺点:

  • 冷启动:新用户没有历史行为,新物品没有交互数据,都无法推荐;
  • 稀疏性:用户—物品交互矩阵极其稀疏(大多数人只接触过极小一部分物品);
  • 难以解释:为什么推荐这个?"因为和你相似的人喜欢"说服力有限。

矩阵分解

把巨大的用户—物品矩阵,分解成两个低维矩阵的乘积:

  • 用户隐向量矩阵(每个用户一个向量);
  • 物品隐向量矩阵(每个物品一个向量)。

预测评分 = 用户向量 · 物品向量。

这些"隐向量"的每一维没有明确的语义解释,但在训练中自动捕捉了潜在的偏好维度(可能对应题材、风格、价位等)。

现代方法:深度学习

  • Wide & Deep:结合"记忆"(Wide 部分,捕捉特征共现)和"泛化"(Deep 部分,神经网络的泛化能力);
  • 双塔模型:用户侧和物品侧分别用神经网络编码成向量,再计算相似度。这个结构非常适合召回——可以预先计算物品向量,线上只算用户向量再做向量检索;
  • 序列模型:把用户的行为序列(点击、购买的时间序列)建模,捕捉兴趣的演变;
  • 注意力机制:判断历史行为中哪些与当前候选更相关。

典型架构:召回 + 排序

工业级推荐系统通常分多层:

召回层:从千万级物品中快速筛出几百到几千个候选。要求快,用相对简单的模型和向量检索。

粗排层:进一步缩小到几百个。

精排层:用复杂模型对候选做精确打分排序。

重排层:考虑多样性、新颖性、业务规则(如打散同类型内容、插入新内容)。

一个常被批评的问题

信息茧房:如果系统只推荐你喜欢的内容,你可能被局限在越来越窄的兴趣范围内。

应对手段包括在目标函数中加入多样性和探索的考量——有意识地推荐一些你未必会点、但可能拓宽视野的内容。

这是一个典型的短期指标(点击率)与长期价值(用户成长、生态健康)冲突的问题。

说明:本文为推荐算法的公开知识整理。