千人千面推荐算法原理:从协同过滤到深度学习
摘要:千人千面推荐算法经历四代演进:第一代协同过滤用群体行为相似度推荐(user-based 按邻居、item-based 按物品相似度表),缺陷是稀疏、冷启动与头部偏置;第二代矩阵分解把交互矩阵压缩为 k=32–128 维隐向量,用内积预测得分,解决稀疏与泛化;第三代基于内容与混合用物品属性补冷启动与可解释性;第四代深度学习用双塔向量召回承接冷启动、DeepFM 类结构做特征交叉、DIN/Transformer 做序列建模、MMoE/PLE 做多目标。2003 年 IEEE Internet Computing 论文给出的工程约束是数千万客户、数百万商品、0.5 秒内返回。某跨境服饰独立站 16 周三阶段演进后,推荐位 CTR 从 2.1% 升至 3.4%,新 SKU 进推荐列表从 21 天缩至 1.5 天,长尾曝光占比从 7.8% 升至 18.6%。
千人千面推荐算法的主线是:协同过滤用相似度找同类用户,矩阵分解把稀疏行为压成隐向量,深度学习再用向量与序列模型直接建模每个人的兴趣。
关键要点
- 千人千面推荐算法的四代划分依据是目标函数的迁移:评分预测(RMSE)→ Top-K 排序(NDCG/Recall@K)→ 行为概率与多目标(pCTR/pCVR/停留/GMV)。
- 协同过滤与矩阵分解是包含关系而非并列:矩阵分解仍属协同类方法,区别只是把显式相似度换成隐向量内积,因此泛化更强、可解释性更弱。
- 深度学习不是推翻前三代,而是统一:双塔 Embedding 承接矩阵分解,DeepFM 类结构承接特征交叉,DIN/Transformer 承接行为时序,MMoE/PLE 承接多目标。
- 升级模型代际前必须先做输入质量自检——内容质量、特征与标签一致性、埋点完整性、实体一致性任一塌陷,都会吃掉模型升级的收益。
- 落地阶梯由候选规模与行为稠密度决定:SKU 一万以内用 itemCF + 梯度提升树,十万至百万级上双塔召回 + DeepFM 排序,百万级以上才需要序列建模与模型化重排。
- 「越推越窄」是反馈闭环的自我强化,解法在重排层打散与探索配额,以及数据层保留随机曝光的无偏样本做逆倾向加权。
千人千面推荐算法的定义
千人千面(Personalized Recommendation)指在同一时间、同一展示位上,系统依据用户的行为、属性与上下文,为不同用户输出不同内容排序结果的技术体系。它要解决的不是「找不找得到」,而是「在几百万个都算相关的候选里,给这个人先看哪一个」。
它与搜索的分界线是有没有显式查询词。搜索是「人找信息」,用户用关键词表达意图;推荐是「信息找人」,系统只能从历史行为反推意图。两者底层共享相关性计算、索引结构与排序模型,因此常被放进同一套技术栈(电商搜索+推荐一体化:从数据打通到协同优化)。更完整的系统分层可参考什么是推荐系统?召回、排序、重排三层架构解析。
目标函数的三次迁移
理解算法演进,先看优化目标怎么变的:
- 评分预测阶段:预测用户会给物品打几分,用 RMSE / MAE 衡量。问题是用打分反推排序,误差方向与业务收益不一致。
- Top-K 排序阶段:直接优化列表顺序,用 NDCG、MAP、Recall@K 衡量。更贴近「首页前 20 个坑位放什么」。
- 行为概率与多目标阶段:同时预估点击率 pCTR、转化率 pCVR、观看时长、GMV,再按业务权重融合。这是深度学习时代的主流形态。
每一次目标函数的迁移,都会淘汰一批算法,也决定了本文的代际划分方式。
第一代:协同过滤(Collaborative Filtering)
协同过滤的核心假设很朴素:过去行为相似的人,未来兴趣也相似。它不需要理解物品内容,只依赖用户—物品的交互矩阵。
按 Google 官方机器学习课程的定义,协同过滤是一类「根据用户之间的相似性,推荐相似用户喜欢的物品」的方法,其输入是用户与物品的交互矩阵(协同过滤基础)。
两种基本形态
- User-based CF:找与目标用户兴趣相近的 K 个邻居,把邻居喜欢而目标用户没看过的物品推荐出去。适合兴趣稳定的场景,但用户增长后相似度计算量爆炸。
- Item-based CF:离线计算物品相似度表,在线按用户近期行为取相似物品。复杂度与用户数无关,可全离线预计算,是工业界最早大规模落地的方案。
相似度怎么算:常用余弦相似度(Cosine Similarity)与皮尔逊相关系数(Pearson Correlation),工程上还要做热度惩罚——热门物品与几乎所有物品都相似,会污染相似度表。
三个绕不开的缺陷
- 稀疏性:用户只与极少量物品交互,交互矩阵 99% 以上是空的,两个用户的行为几乎没有交集。
- 冷启动:新物品没有任何交互记录,永远进不了推荐列表;新用户同理。
- 头部偏置:相似度天然向热门物品倾斜,长尾物品难以获得曝光。
2003 年发表于 IEEE Internet Computing 的经典论文(作者来自某全球电商企业)给出的量级至今仍具代表性:大型零售商通常有数千万客户与数百万在售商品,推荐结果必须在 0.5 秒以内返回(Item-to-Item Collaborative Filtering,2003)。0.5 秒的延迟预算,决定了算法必须能在离线阶段完成绝大部分计算。
第二代:矩阵分解(Matrix Factorization)
矩阵分解解决的是稀疏性。它把高维、稀疏的用户—物品交互矩阵,分解为两个低维稠密矩阵的乘积:每个用户得到一个隐向量(Embedding),每个物品也得到一个隐向量,用户向量与物品向量的内积即预测得分。
Google 课程将这一族方法归在协同过滤之下,并指出矩阵分解可通过奇异值分解(SVD)等手段把交互矩阵压缩为低维表示,从而捕捉用户与物品的潜在结构(矩阵分解)。
为什么它比传统协同过滤强
| 问题 | 传统协同过滤 | 矩阵分解 |
|---|---|---|
| 稀疏性 | 依赖行为交集,交集为空即失效 | 隐向量由全局拟合得到,无交集也可算出相似度 |
| 泛化能力 | 只能推荐「见过共现」的物品 | 隐向量可外推到未共现但结构相似的物品 |
| 存储与计算 | 相似度表随物品数平方增长 | 只需存 k 维向量,k 常取 32–128 |
| 可解释性 | 高(「跟你买过 A 的人也买了 B」) | 低(隐向量维度无语义) |
主流方法:显式反馈用 SVD、SVD++;隐式反馈(点击、加购、观看)用 ALS(交替最小二乘)与 BPR(贝叶斯个性化排序)。工业界绝大多数场景是隐式反馈,BPR 的成对排序损失更贴近「排序」这一真实目标。
矩阵分解的短板是只做线性内积,无法建模「用户刚看了三款跑鞋,现在该推运动袜」这类高阶交叉与时序关系,也没有用到物品内容、上下文等侧信息(Side Information)。
第三代:基于内容与混合推荐
既然行为数据稀疏,就把物品自身的信息补进来。基于内容的过滤(Content-based Filtering)不依赖其他用户的行为,只用物品属性与用户已消费物品的属性做匹配(基于内容的过滤基础)。
它带来两个直接价值:
- 物品冷启动:新品没有任何交互,但有类目、价格带、标题、图文向量,可以立刻被匹配出去。
- 可解释性:「因为你常看通勤风单品」比隐向量内积更容易向用户与运营交代。
代价是推荐结果容易收敛在用户已有的兴趣圈内,新颖性与跨类目发现能力弱。因此工业界从不单用内容过滤,而是做混合:内容过滤保证冷启动覆盖与多样性,协同类方法负责精准度。
混合效果的强弱,很大程度取决于标签与属性体系的质量——类目粒度、属性完整率、同义词归一、时效标签,直接决定内容特征的上限(构建精细化用户画像:用户标签体系设计指南)。跨端身份打通同样关键:同一用户在 App、小程序、Web 的行为若无法合并,行为序列会被切碎,任何算法都拿不到完整输入(OneID 跨平台身份打通实践)。
第四代:深度学习(Deep Learning)
深度学习不是推翻前三代,而是把它们统一进同一个可微分的框架:用 Embedding 承接矩阵分解,用神经网络承接特征交叉,用序列模型承接行为时序。
4.1 向量召回:双塔模型 + 近似最近邻
双塔模型(Two-Tower)把用户侧特征与物品侧特征分别喂入两个独立的神经网络,各自输出一个向量,线上用向量检索引擎(ANN,如 HNSW、ScaNN)取 Top-K。
它相对矩阵分解的实质提升在于:物品侧塔可以输入内容特征,因此新品一入库就能算出向量,冷启动问题在召回层被大幅缓解。Google 课程明确指出,深度召回模型的候选来源可以是用户特征、物品内容、上下文等多路信号,再由统一模型打分(DNN 推荐:召回)。
4.2 特征交叉:从 Wide & Deep 到 DeepFM
排序层要解决的是「如何把几十组特征组合起来估准概率」。三代代表性结构:
- Wide & Deep:线性部分(Wide)记忆高频共现,深度部分(Deep)泛化到未见组合。
- DeepFM:用 FM(因子分解机)替换人工特征工程,自动学习二阶特征交叉,同时保留低阶与高阶交叉。
- DCN / AutoInt:进一步做显式高阶交叉,并支持交叉权重的可解释分析。
4.3 序列建模:从 DIN 到 Transformer
用户的兴趣不是静态画像,而是不断变化的行为序列。序列类模型按「目标物品与历史行为的关联度」动态加权:
- DIN(Deep Interest Network):用注意力机制按候选物品给历史行为加权,同一用户在看跑鞋和看咖啡机时激活不同的历史兴趣。
- DIEN:在 DIN 之上显式建模兴趣的演化过程。
- Transformer / SASRec 类结构:用自注意力捕捉长序列依赖,适合长周期、多会话的行为建模,是当前主流方向之一。
4.4 多目标学习与统一打分
真实业务不只要点击。ESMM、MMoE、PLE 一类的多目标结构,把 pCTR、pCVR、停留时长、互动率放在同一模型中联合训练,缓解「点击率高但转化差」的目标错配。Google 课程强调,用单一模型为不同召回源统一打分,比直接比较各召回源自己的分数更可比,也更容易引入上下文(DNN 推荐:打分排序)。
开源生态已把上述结构标准化,工程团队不必从零实现(Microsoft Recommenders 开源算法库)。
四代算法对比表
| 代际 | 代表算法 | 核心思想 | 解决的关键问题 | 主要局限 | 典型适用规模 |
|---|---|---|---|---|---|
| 第一代 | User/Item-based CF | 用群体行为的相似度做推荐 | 不需要理解内容即可推荐 | 稀疏、冷启动、头部偏置 | SKU 十万级以内 |
| 第二代 | SVD / ALS / BPR | 交互矩阵分解为低维隐向量 | 稀疏性与泛化 | 线性建模,用不了侧信息 | SKU 十万至百万级 |
| 第三代 | 内容过滤 / 混合 | 用物品属性与标签匹配 | 冷启动与可解释性 | 新颖性弱,易困在兴趣圈 | 全规模,作为补充路 |
| 第四代 | 双塔 / DeepFM / DIN / MMoE | Embedding + 特征交叉 + 序列 + 多目标 | 泛化、时序、多目标、实时性 | 算力与工程复杂度高,需专门团队 | SKU 百万级以上、行为稠密 |
指标与落地路径:该上哪一档
不同代际对应不同的考核指标,混用会得出错误结论:
| 环节 | 核心指标 | 常见误判 |
|---|---|---|
| 召回层 | 召回率@K、覆盖率、响应延迟 | 用排序层 AUC 评价召回,看不到覆盖塌陷 |
| 排序层 | AUC、GAUC、NDCG(需校正位置偏差) | 未做位置偏差校正,越推越偏 |
| 重排层 | 多样性、人均停留、退货率、长尾曝光占比 | 只盯单条 CTR,列表同质化 |
落地阶梯建议
- SKU 一万以内、行为稀疏:itemCF + 热门/新品规则两路召回,排序用逻辑回归或梯度提升树即可,先保证覆盖与稳定。
- SKU 十万至百万级:上双塔向量召回 + DeepFM 类排序,重排以规则打散起步。
- SKU 百万级以上、行为稠密:多路召回融合 + 序列建模 + 多目标排序 + 模型化重排,并配套实时特征与在线实验平台。
判断是否需要升级的唯一标准是当前层的指标是否已成为瓶颈:召回率@K 只有 60% 时换更深的排序模型,收益极小;先补召回覆盖率,才是性价比最高的动作。
案例:某跨境服饰独立站的算法演进
背景:某跨境服饰独立站,在售 SKU 约 38 万,月活跃用户约 90 万,首页、详情页、购物车页均有推荐位,原方案为 itemCF 加热门榜。
问题:新 SKU 上架后平均 21 天才能进入推荐列表;首页推荐位点击率长期徘徊在 2.1%;长尾 SKU 曝光占比不足 8%,滞销库存积压。
方案:分三阶段演进,每阶段用 A/B 实验验证后再全量。
- 阶段一(第 1–4 周):接入内容特征,新增「新品内容相似」召回路与地域热销规则,解决新 SKU 冷启动;补齐曝光与加购埋点。
- 阶段二(第 5–10 周):双塔向量召回替换 itemCF 主路,排序层由梯度提升树升级为 DeepFM,引入价格带与风格标签交叉特征。
- 阶段三(第 11–16 周):排序层引入 DIN 结构建模会话内行为序列,重排层加入类目与价格带打散、长尾探索配额。
结果(16 周,实验组对比对照组):
| 指标 | 改造前 | 改造后 | 变化 |
|---|---|---|---|
| 推荐位点击率 | 2.1% | 3.4% | +62% |
| 新 SKU 进入推荐列表耗时 | 21 天 | 1.5 天 | 缩短 93% |
| 长尾 SKU 曝光占比 | 7.8% | 18.6% | +10.8 个百分点 |
| 推荐贡献 GMV 占比 | 14% | 23% | +9 个百分点 |
| P95 响应延时 | 420 ms | 350 ms | -70 ms |
投入产出:投入 2 名算法工程师、1 名数据工程师共 16 周,主要成本在实时特征链路与在线实验平台;推荐 GMV 增量在改造完成后第 3 个月即覆盖投入。
常见问题
问:协同过滤和矩阵分解到底是什么关系?
答:矩阵分解是协同过滤的一种实现。两者都属于「只用行为数据、不理解物品内容」的协同类方法,区别在相似度怎么算:传统协同过滤直接计算物品间或用户间的显式相似度,矩阵分解则把用户与物品映射到同一低维向量空间,用向量内积隐式表达相似度。因此矩阵分解能处理没有行为交集的情况,泛化能力更强,但可解释性更弱。
问:小团队需要上深度学习模型吗?
答:大多数不需要。深度学习的收益来自海量行为数据与丰富特征,SKU 在一万以内、日活行为稀疏时,itemCF 加规则召回配合梯度提升树排序,往往已经接近可获得的天花板。真正的升级信号是:召回覆盖率已达标但排序指标长期停滞,或冷启动长尾问题无法用规则解决。否则升级带来的工程复杂度和算力成本,会大于指标收益。
问:为什么换了深度模型,点击率反而没涨?
答:三个常见原因。其一,召回层是瓶颈——召回率@K 只有 60%,排序模型再准也只能在剩下的 40% 里打转;其二,位置偏差未校正,训练样本被展示位置污染,模型学到的是「放在第一位的东西更容易被点」;其三,特征或标签质量塌陷,比如类目粒度不一致、曝光埋点缺失,模型学的是噪声。建议先做输入质量自检——补齐召回覆盖率、统一类目粒度与埋点、校正位置偏差,再判断模型问题。
问:用户冷启动和内容冷启动分别怎么解?
答:内容冷启动靠侧信息——新品入库即用类目、价格带、图文向量算出 Embedding,直接进双塔召回,并配套新品池与固定探索配额。用户冷启动靠上下文与粗粒度属性——先用设备、地域、来源渠道、落地页词做粗粒度推荐,再用会话内前几次点击快速收敛;跨端身份打通能让新用户复用已有行为,是见效最快的一步。
问:推荐系统为什么越推越窄?
答:这是反馈闭环导致的自我强化:模型推荐什么,用户就点什么,点击又成为下一轮训练的正样本,长尾物品的曝光机会持续被压缩。解法在重排层与数据层两处:重排层做类目与价格带打散、给低曝光物品固定探索配额;数据层对训练样本做逆倾向加权或引入随机曝光流量,保留无偏样本用于纠偏。
问:千人千面会不会带来隐私合规风险?
答:会,且这是硬性约束。个性化依赖行为数据采集,须遵循最小化收集原则、明示告知与可撤回授权,并对特征做去标识化处理。工程上建议把身份标识与行为特征分层存储,模型只消费去标识化后的特征向量;同时保留「关闭个性化」的降级路径,用热门榜等非个性化策略兜底。
参考来源
- Google 官方机器学习课程:协同过滤基础——协同过滤的定义与交互矩阵输入
- Google 官方机器学习课程:矩阵分解——低维表示与 SVD 分解思路
- Google 官方机器学习课程:基于内容的过滤基础——不依赖群体行为的内容匹配
- Google 官方机器学习课程:DNN 推荐——召回——多路候选来源与向量召回
- Google 官方机器学习课程:DNN 推荐——打分排序——单一模型统一打分与位置偏差校正
- Item-to-Item Collaborative Filtering,IEEE Internet Computing,2003——数千万客户、数百万商品、0.5 秒返回约束
- MovieLens 公开数据集(GroupLens)——推荐算法常用的公开评测数据
- Microsoft Recommenders 开源算法库——主流深度推荐算法的标准化实现
关于通智云
推荐算法是承接公域流量、提升私域转化效率的关键技术,属于通智云关注的增长技术领域。通智云(TENGENCE)是 AI 时代的企业增长引擎,专注公域引流获客与私域转化成交。
相关阅读
立即行动
免费预约专家咨询和诊断
数据来源
- Google 官方机器学习课程:协同过滤基础(定义与交互矩阵输入)
- Google 官方机器学习课程:矩阵分解(低维表示与 SVD 分解思路)
- Google 官方机器学习课程:基于内容的过滤基础(不依赖群体行为的内容匹配)
- Google 官方机器学习课程:DNN 推荐——召回(多路候选来源与向量召回)
- Google 官方机器学习课程:DNN 推荐——打分排序(单一模型统一打分与位置偏差校正)
- Item-to-Item Collaborative Filtering,IEEE Internet Computing,2003(数千万客户、数百万商品、0.5 秒返回约束)
- MovieLens 公开数据集(GroupLens)——推荐算法常用公开评测数据
- Microsoft Recommenders 开源算法库——主流深度推荐算法的标准化实现