推荐系统
推荐系统是经典的机器学习系统设计题目,注意把各个环节串联起来,形成框架性思考。 例如大规模推荐,为什么需要召回加排序的漏斗结构?是因为召回能快速把大规模candidate显著减小,常见的双塔模型为什么能够快速召回呢?因为用户塔和物品塔无交叉,物品塔可离线计算,用户塔为了体现兴趣可以实时计算,但一次请求只需计算一个用户向量,通过ANN快速计算索引。 因此也决定了召回模型是late fusion, 而排序模型是early fusion(较早进行特征融合能够提升预测精度).
配合推荐系统理论,针对不同领域,如电商、O2O,针对领域提出针对性的优化
电商推荐业务:曝光->点击->购买
地点约束,例如yelp的饭馆推荐涉及geolocation information
user的 graph network,例如facebook newsfeed推荐
音乐、视频的embedding,例如spotify音乐推荐
Ins Story推荐,每条Story是独一无二的并且是有时间性的
O2O场景广告特点 1、移动化 2、本地化 3、场景化 4、多样性
1. requirements
推荐系统的核心功能还是推荐的personalization accuracy,diversity
Functional/use cases
what is the product for which we have to build a recommendation system, How are we different from XX? Who is the producer/consumer
Homepage recommendation, session based next item recommendation (short term interest), or related item recommendations
Explicit feedback or Implicit feedback (即使有explicit, 一般也会选择implicit)
it's a new product, or we have some current product built already
the biggest goal of recommendation system is user engagement. Can I assume that to be the goal?
Is there any demography or country we are targeting
Text, image, video
Ranking / Localization
是否有friend, follow. 有的话可以作为一个召回通道
Non-Functional
一定要clarify: scalability, low latency. 因为这两个non-functional requirement决定了后面怎么设计
MVP and Non-MVP
users should have a real time/ near real time / small latency experience Idempotency/ exact-once/ at-least-once/ at-most-once
reliability: data not get lost/ job not executed in parallel retention policy
security: store encoded personal data
consistency: read/ write heavy
dau/ qps / peak qps
2. ML task & MVP
名词解释
曝光(impression): 文档被用户看到
点击率(click-through-rate,CTR): 文档d曝光的前提下,用户点击d的概率
交互行为(engagement): 在点击的前提下, 文档的点赞、收藏、转发、关注作者、评论;电商的加购物车、下单、付款
推荐系统的重要性源自信息过载与人们行为的长尾分布. 目的是Link user with items in a reasonable way.
长尾/热门
头部用户精细刻画,准确记忆;占比更大的稀疏长尾,需要很好地泛化
记忆/探索
稀疏/embedding
3. data & labels
关键:分布
通过客户端以及服务端的实时数据,经过流处理的平台,把用户、商品、场景的信息以及端侧的信息全部都收集全
再通过特征工程的很多方法,如归一化、离散化、非线性离散等很多的变换,把特征处理成下游模型处理的方式。
处理完后一般会放在特征存储中,如 KV 存储: Redis、阿里的 iGraph 等
样本
不均衡
置信度: skip-above(点击的item位置以上的展现可以当做负样本, 最深位置以后的样本过滤掉); 完全无正样本session(可能是碰巧唤醒)
labels
explicit vs. implicit labels
延迟转化 Delayed Feedback
4. feature
dense feature
log变换
分箱,可以根据业务分箱,分箱思路:等频,等宽,卡方
分桶交叉特征提升泛化能力
sparse feature
onehot
embedding
cross feature
sequence feature
处理
缺失
标准化
平滑与消偏
5. model
召回
Generates a much smaller subset of candidates from huge corpus with low latency and computational cost
ensemble retrieval from different models (rule, filtering, nn). A given model may provide multiple candidate generators, each nominating a different subset of candidates
Neighborhood models (itemCF, userCF) are most effective at detecting very localized relationships, but unable to capture the totality of weak signals encompassed in all of a user’s ratings.
Latent factor models (MF) are generally effective at estimating overall structure that relates simultaneously to most or all items. However, these models are poor at detecting strong associations among a small set of closely related items.
召回系统的要求是,“低延时”与“高精度(precision)
多路召回 (ensemble retrieval)
负样本选择
recommendation as extreme multiclass classification: 每一个正样本,意味着其他所有class都是负样本 -> negative sampling -> generation, accuracy
全局负采样,采样方式: uniform subsampling, negative down sampling
Batch内负采样的问题: batch内都是热门物品,导致采样后的负样本中也大都为热门物品,造成对热门物品的过度打压,校正:
负采样带来的问题:CTR预估值漂移, 校正: p / (p + (1-p)/w)
model
规则:热度高,同一作者、tag
content based
The model doesn't need any data about other users
itemCF
ItemCF基于item之间的共现关系计算相似度,item行为越多,就会与更多的item发生共现,进而获得更多的曝光,即推荐系统中的马太效应或长尾效应
pro: 无需训练,长于记忆;效果好
con: 泛化能力弱;容易产生马太效应,推荐的都是头部和中部产品; Cannot handle fresh items; Hard to include side features for query/item
two power
arbitrary continuous and categorical features can be easily added to the model
matrix factorization
con: worse performance on tail users
inability to add content-based features
embedding: graph, picture, text
局部敏感哈希,KD树
similarity metrics
排序
粗排、精排、重排
multi-task deep learning
粗排一致性
记忆和泛化
feature/embedding
model
rule based model, matrix factorization, factorization machine
转化为classification/regression模型
深度学习 (wide and deep learning)
pro:泛化能力,增量训练,推理速度
con: performance ramp-up, preprocessing
GBDT
pro: without preprocess, good performance
con: large scale, unsuitable for continual learning
rerank
take into account additional constraints for the final ranking
DPP多样性算法
multi-task
稀疏task可以借助其他task学习
consistency among tasks
richer feature
不好的地方是: 优化,尤其是想优化某个task变得更难
shared-bottom,MMoE,PLE
6. evaluation
7. deploy & service
parameter server
本质是一个: 分布式键值存储系统
pagination + sort_key / video start timestamp / offset, page_size
user context/ client info(ios, network condition) diagram
list high level diagram first, then each component
different choices/ tradeoffs and give your recommendation
MQ or no mq
cache: consistency/ failure/ cold start
data model/database: 1 master, 2 replica, primary key, user_id, timestamp, status
8. Monitoring & maintenance
注意区分statistical metric和business metric。后者意义更大,但经常无法直接optimize,只能通过ab-testing测试
电商:根据业务需要,在 GMV (商品交易总额) 主目标之外,通常还要兼顾 IPV、转化率、人均订单数等多个次目标
ctr(点击率)和 CVR (Conversion Rate) 转化率
impression per second
candidate count (from recall)
budget burn rate
通用metrics:cpu, qps, latency
淘宝主搜将 “全域成交 Hit rate” 作为粗排最重要的评价标准,提出两类评价指标,分别描述“粗排->精排损失”和“召回->粗排损失”
9. 优化与问答
数据采集和处理
如何建立index
召回
faiss: faiss使用了PCA和PQ(Product quantization乘积量化)两种技术进行向量压缩和编码
向量召回、排序没用实时行为序列特征
怎么做counterfactual evaluation
怎么deploy?
embedding retrieval
real time or batch, Batch Prediction Versus Online Prediction
怎么上线?
A/B testing, metric
setup A/B testing
control group (current system), treatment (system w/ our new model)
use a canary release, start with 99% control and 1% treatment
compare the key business metrics between the two groups (conversion rate etc.)
slowly ramp up the traffic in the treatment group
热启动与冷启动
老汤模型的本质,是样本空间不一致导致的公平性问题
方案一:回滚历史数据,对齐样本空间
方案二:模型热启动warm-up
实时化
特征实时化难点:实时数据处理能力(Flink等),并将处理结果实时写入Redis
模型实时化
样本数据流:实时样本落地、实时样本拼接(反馈延时问题)
模型训练:在线学习(资源和稳定性问题)、实时模型纠偏
连续特征离散化方法以及为什么需要对连续特征离散化
FM、FFM的参数量以及时间复杂度
多目标模型
参数共享及不共享参数各自的优缺点
用户长期兴趣和多兴趣怎么建模
如何冷启动
思路一: 尽可能应用side information/多模态进行推荐
思路二: 尽可能用小流量探索出新物料的真实质量
embedding 冷启动, embedding初始化采用default, 而不是random
bias
如何解决 position bias
数据入手:点击前的展示作为负例
模型入手:bias特征须通过线性层接入模型;训练时将位置作为特征喂入模型,预测时置0
popularity bias
对热门的打压 (long tail)
召回:多路召回增加多样性
itemCF/swing相似度计算中,把共同点击商品A和B的用户pair对的交集放在分母,对热门用户行为的打击
召回时,对负样本进行下采样,采样概率大致为点击数的0.75次方,对热门进行打压。注意in-batch-negative中,打压过度了
log q correction
精排
item count取对数
热门特征加入到偏差的网络中,预测时去掉
流量调控
模型更新策略, retrain plan
按天增量训练,实时训练(在线学习),或者 在线学习+天级增量结合
embedding的更新
全量更新:可以每天更新一次,shuffle, 更新ID embedding 和全连接层,1 epoch。每次更新的还是上一天的全量的模型更新,而不是增量
增量更新:不停做,可以几十分钟更新一次,online learning只更新ID embedding参数, 尽量实时追踪用户兴趣。但其实是有偏的
怎么加user and item metadata
线上评价,线上线性不一致
model debugging, offline online inconsistency, light ranking, ab test, heavy ranking, two tower
统计特征用等宽分桶导致特征值聚集
多语言搜索召回率低
有些国家节日多,模型T+1更新导致节日后消费数据下降
有一些情况下同一用户对不同item的 pctr 是同一个值
模型目标和业务目标不一致
Itemid hash 碰撞率太高
E&E
embedding: 特征转化为可以学习的向量,模糊查找
embedding in sequence: 共现
多任务
多场景
不同用户群体(如新老用户)、APP不同频道模块、不同客户端等
Reference
精读
扩展
代码
Last updated