Recommendation System
推荐系统会预测用户可能感兴趣的项目并为其排序。涵盖协同过滤、基于内容的过滤、工作流程、挑战和代码。
推荐系统(也称推荐器)是一种软件,用于预测用户可能感兴趣的商品、视频、歌曲、文章或帖子等内容,并为用户排序。它会从星级评分等显式反馈中学习,但更常从点击、观看时长和购买等隐式反馈中学习,因此成为应用最广泛的机器学习场景之一。两个里程碑塑造了这一领域:亚马逊在 2003 年对基于物品的协同过滤的介绍,以及 Netflix Prize(2006–2009);该竞赛向将 Netflix 电影评分预测准确率提高 10% 的团队颁发了 100 万美元奖金。
推荐系统的工作原理#
协同过滤只利用用户与内容的交互模式。基于用户的方法会查找历史记录相似的用户;基于物品的方法会查找被同一批用户喜欢的物品;在 Netflix Prize 期间普及的矩阵分解则会为每位用户和每件物品学习一个向量,并用它们的点积预测用户与物品之间的交互。基于内容的过滤则会根据物品属性来描述物品,例如类型、经过自然语言处理(NLP)的文本或图像嵌入向量,并推荐与用户已喜欢的物品相似的内容;即使某些物品还无人互动,这种方法也能奏效。混合系统会结合这两种信号,让内容特征在新物品积累足够交互数据之前帮助定位该物品。
以下示例将基于物品的协同过滤应用于小型评分矩阵,并根据电影评分列之间的余弦相似度,预测某位用户对尚未评分电影的评分:
import numpy as np
# Ratings from 4 users (rows) for 5 movies (columns); 0 means not rated
ratings = np.array(
[
[5, 4, 0, 1, 0],
[4, 5, 1, 0, 1],
[1, 0, 5, 4, 5],
[0, 1, 4, 5, 0],
]
)
# Item-item cosine similarity between the movies' rating columns
norms = np.linalg.norm(ratings, axis=0)
item_sim = ratings.T @ ratings / np.outer(norms, norms)
# Predict user 3's rating of each movie as a similarity-weighted average of their own ratings
user = ratings[3]
rated = user > 0
scores = item_sim[:, rated] @ user[rated] / item_sim[:, rated].sum(axis=1)
for movie in np.flatnonzero(~rated):
print(f"Movie {movie}: predicted rating {scores[movie]:.2f}")最后一行的用户 3 给电影 2 和 3 评了高分,给电影 1 评了低分;因此,与电影 2 和 3 的评分走势相似的电影 4,预测得分为 4.10;与电影 1 的评分走势相似的电影 0,预测得分为 2.09。系统会推荐电影 4。
深度学习推荐系统会端到端地学习这些表示。双塔网络分别为用户和物品生成嵌入向量,因此检索候选项时,只需向量搜索与用户嵌入向量最接近的物品嵌入向量;Transformer等序列模型则会按顺序读取用户历史记录,以预测下一次交互。
多阶段流程#
大型服务无法在每次请求时都对数百万件物品运行大型模型,因此会分阶段生成推荐。候选项生成(也称检索)会利用协同过滤或嵌入向量搜索等低成本信号,将目录范围缩小到数百件物品。然后,排序模型会利用丰富的特征为每个候选项评分,以预测用户点击、观看或购买的概率;最后的重新排序步骤会加入多样性、新鲜度和业务规则。YouTube 在 2016 年介绍了这种两阶段设计。每条展示的推荐也会生成用于训练下一版模型的反馈,因此,系统会从自身早期选择所塑造的数据中学习。
近期系统以类似语言模型的方式扩展排序和检索模型。Meta 于 ICML 2024 发表的生成式推荐模型将每位用户的操作视为一个序列,参数量达到 1.5 万亿,并在在线 A/B 测试中将指标提升了 12.4%。
视觉推荐#
时尚、家具和艺术品目录会根据外观进行推荐,因此“更多类似商品”功能会比较商品照片的图像嵌入向量;“整套搭配”功能则会先用目标检测从场景照片中裁剪出每件商品,再在目录中搜索外观相似的商品。同样的检索方法也能帮助筛选训练数据:Ultralytics Platform中的查找相似图像功能会从公开数据集和团队数据集中展示最多 24 张最相似的图像,每张图像都附有相似度分数;它会跳过数据集中已有的图像,也可以从模型验证表现最差的图像开始查找。
应用场景#
- 零售与电子商务:商品页面会展示“购买此商品的顾客也购买了”列表,并根据浏览和购买历史创建个性化主页。
- 流媒体:视频和音乐服务会根据观看和收听历史为内容排序并生成播放列表;Netflix 还会为每个标题个性化展示图片。
- 社交信息流与新闻:平台会根据预测的互动情况为帖子、短视频和文章排序,并在用户每次打开信息流时更新排序。
- 时尚:视觉相似度搜索会推荐在风格、颜色或图案上与购物者浏览过或拍摄过的商品相配的服装。
推荐系统与相关概念#
- 搜索:搜索引擎会回答明确的查询,而推荐器无需查询就会预测用户想要什么;现代系统会共用检索和排序组件。
- 向量搜索与向量数据库:查找与查询嵌入向量最接近的已存储嵌入向量,这是推荐器用于检索的基础组件。
- 重排序模型:第二阶段模型会更精确地重新评估较短的候选列表,这正是推荐器排序阶段的作用。
- 预测建模:排序阶段会预测用户交互的概率,而完整的推荐器还负责检索、排序和反馈循环。
挑战#
- 冷启动:新用户和新物品没有交互历史,因此系统会改用热门内容、新手引导问题或内容特征。
- 稀疏性:每位用户只会与大型目录中的极少数物品互动,因此用户-物品矩阵的大部分内容都是空的。
- 热门度偏差与反馈循环:使用记录的交互数据训练会偏向此前已频繁展示的物品,从而缩窄用户能看到的内容范围,并可能形成信息茧房。
- 评估:在历史数据上计算的 precision@k 和 NDCG 等离线指标,往往与在线 A/B 测试的结果不一致;在线 A/B 测试衡量的是用户实际如何使用新推荐。
- 隐私:详细的行为画像属于个人数据,在欧盟及其他司法辖区受到数据保护法的保护。
- 监管:欧盟《数字服务法》要求超大型在线平台和搜索引擎为每个推荐系统至少提供一种不基于用户画像的选项。










