2.recommend
下载本文pdf:https://github.com/daiwk/collections/blob/master/pdfs/recommend.pdf
推荐系统整体梳理
https://daiwk.github.io/posts/links-navigation-recommender-system.html
https://github.com/Doragd/Algorithm-Practice-in-Industry
王喆的机器学习笔记系列:
https://github.com/wzhe06/Reco-papers
https://github.com/wzhe06/Ad-papers
深度学习传送门系列:
https://github.com/imsheridan/DeepRec
推荐系统遇上深度学习系列:
链接: https://pan.baidu.com/s/1jZkJ2d9WckbZL48aGFudOA 密码:kme3
推荐工业界实战角度详解TensorFlow中Wide & Deep源码(三)
常用机器学习基础
mse vs cross-entropy
不一定回归就用mse,分类才用交叉熵
https://zhuanlan.zhihu.com/p/362496849
https://www.zhihu.com/question/415245797/answer/1791746717
https://zhuanlan.zhihu.com/p/304462034
https://blog.csdn.net/u011508640/article/details/72815981
各种分布:
https://github.com/graykode/distribution-is-all-you-need
cross-entroy vs nllloss
贝叶斯公式:
先验(prior):,没有观测到任数据时对的预先判断,例如假设硬币很大概率是均匀的,很小概率不均匀;随着数据量的增加,先验的影响力越来越小。
后验(posterior):,最终的参数分布
似然(likelihood):,假设已知后,我们观察到的数据应该是什么样的
结论:
最大似然估计(MLE, max likelihood estimation):等价于NLL(negative log likelihood),即交叉熵
最大后验估计(MAP, max a posteriori):假设参数服从高斯分布,等价于MLE+L2正则
https://blog.csdn.net/geter_CS/article/details/84857220
https://blog.csdn.net/qq_22210253/article/details/85229988
CrossEntropyLoss就是把Softmax–Log–NLLLoss合并成一步
softplus
https://stackoverflow.com/questions/44230635/avoid-overflow-with-softplus-function-in-python
因为
同理,如果要求log(1+exp(-x))
的稳定版本,可以
一些tricks
特征、样本、数据流
tf开源库
社区分享 | TensorFlow Recommenders-Addons 现已开源,让推荐系统效果更好!
https://github.com/tensorflow/recommenders-addons
预估架构
HugeCTR
点击率预估的训练传统上存在着几个困扰着广大开发者的问题:巨大的哈希表(Embedding Table),较少的矩阵计算,大量的数据吞吐。
HugeCTR 是首个全部解决以上问题的开源 GPU 训练框架,与现有 CPU 和混合 CPU / GPU 解决方案相比,它的速度提高了 12 倍至 44 倍。HugeCTR 是一种端到端训练解决方案,其所有计算都在 GPU 上执行,而 CPU 仅用于 I / O。GPU 哈希表支持动态缩放。它利用 MPI 进行多节点训练,以支持任意大的嵌入尺寸。它还还支持混合精度训练,在 Volta GPU 及其后续版本上可以利用 Tensor cores 进一步加速。
如何解决点击率预估?英伟达专家详解HugeCTR训练框架(二)
BOX
大规模深度学习广告系统的分布式分层GPU参数服务器
Distributed Hierarchical GPU Parameter Server for Massive Scale Deep Learning Ads Systems
索引架构
ANN索引
annoy hnsw faiss pq
暴力召回ANN加速
https://kexue.fm/archives/9336
大致思想,CUR分解:query和item的MxN打分矩阵,分解成F(Mxk1), G(k1xk2), H(k2xN)三个矩阵
Mxk1矩阵:原矩阵里搞k1列出来,即选出k1个种子item,得到F
k2xN矩阵:原矩阵里搞k2列出来,即选出k2个种子query,得到H
k1xk2矩阵:即矩阵1和矩阵2求交集,比如矩阵1是抽的第1,23,54列出来,矩阵2是抽的第4,80行出来,那交集元素就是(1,4),(1,80),(23,4),(23,80),(54,4),(54,80)这6个点,构成k1xk2矩阵,然后算一下伪逆得到G
建索引:
挑出种子query,和所有item两两计算相似度,得到H矩阵
挑出种子item,和种子query两两计算相似度,再算伪逆,得到G矩阵
计算G*H,存起来
检索:
输入的query和k1个种子item算一下相似度,得到1xk1的矩阵q
q和G*H相乘,就能得到q和每个item的相似度了
【这步可以ann化】:GH就是k1*N,按列来看,就是N个k1维向量,相当于N个item向量,扔到annlib里去就行了,而输入的q也是一个k1维向量,就可以ann了
BLISS
BLISS: A Billion scale Index using Iterative Re-partitioning
召回
https://github.com/imsheridan/DeepRec/tree/master/Match
精准推荐的秘术:阿里解耦域适应无偏召回模型详解对应Co-training Disentangled Domain Adaptation Network for Leveraging Popularity Bias in Recommenders
协同
Swing
Large Scale Product Graph Construction for Recommendation in E-commerce
score(i,j) = 0
找到同时点过i和j的用户集合A,对集合A里的用户两两组合
s=1/(这两个用户的共同点击数+1)(如果两个用户的交集很大,说明这个item并不独特,要惩罚,类似idf)
score(i,j) += s (累加每个pair对的得分得到最终得分)
内积、余弦和L2
给定a,找到和它最像的b
如果用内积,会找最大的b出来,可能是夹角小,也可能是模大的b,所以可能偏热门
DSSM
参考Modeling Interestingness with Deep Neural Networks
对应的ppt
2013年CIKM的dssm
Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
相当于一个q,和每个d分别算cos。
所以given Q点击D的概率就是:
其中的是平滑因子。这里的是需要rank的Documents的集合,理想情况肯定是全集了。实际上定义为一个query和点击文档的pair对,通过一个和N个随机选的未点击的文档近似。
所以训练时,在训练集上,给定query,有点击doc的概率最大化就是我们的目标(其中的是网络参数):
Word Hashing:例如,一个英文单词是”good”,那么会先在头尾各补上一个”#”,处理成”#good#”,然后拆成n-gram(假设n=3,也就是tri-gram,那就是”#go”,“goo”,”ood”,”od#”这么多个”新”词)。这样,可以把原来500k的词典缩到300k,可以有效缓解词典太大的问题,而且因为英文就26个字母,这样做也解决了新单词的OOV问题。
https://blog.csdn.net/zjrn1027/article/details/80170966
相似度衡量可以使用cos,而最终的loss可以用hinge loss:
设置一个margin ,query ,正样本,负样本,如果正负样本的相似度之差小于边界值,那就还需要优化,如果已经大于等于边界值了,说明模型已经能区分了,所以用hinge loss:
tf算cos
tf算hinge
使用
multiview dssm
A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems
https://blog.csdn.net/shine19930820/article/details/78810984
现在很多公司都不仅仅只有一个产品,而是有多个产品线。比如微软可能就有搜索、新闻、appstore、xbox等产品,如果将用户在这些产品上的行为(反馈)统一在一起训练一个深度学习网络,就能很好的解决单个产品上(用户)冷启动、稀疏等问题。
概述
一个产品线就是一个view,一条训练样本只有user+1个view,其他view置0。
总体的优化目标是保证在所有视图上user和正向反馈的item的相似度大于随机选取的无反馈或者负向反馈的相似度,并且越大越好。
其中的是到的变换。有一个用户view,加上个辅助(auxiliary)的item view。,即每个view有自己的特征空间。对于第条样本,它只有第个auxiliary view是有值的,其他view都是0。
tf代码:https://github.com/InsaneLife/dssm/blob/master/multi_view_dssm_v3.py
降维
top features
对于user features,选取top-k最频繁的features。并通过TF-IDF过滤掉最常用的特征。
k means
kmeans的公式如下:
通过K-means对相似的特征群分组为同一个cluster并生成新的特征,共生成k个新特征。生成的特征向量是一个维的向量,第维是第个cluster中features的出现数。
具体地,使用一个长度为的vector ,是训练集中的用户数,表示用户有feature 的次数。将每个进行归一化。这样,对于每一个用户向量,可以产生它的降维了的用户向量(假设feature 分配给了cluster ,):
想要抽出reasonable的feature数目,需要比较大的cluster数。因为如果cluster数比较少,那一个cluster里就会有非常多的用户feature,很难学到有用的pattern。在本文中,设置,平均每个cluster里大概有350个feature。因为cluster数比较大,所以用mr版的kmeans。
Local sensitive Hashing
通过一个随机的矩阵将数据映射到低维向量空间上,并且保持原始空间上的pairwis cos距离在新的空间上仍然获得保留。
原始矩阵维,降到维,所以对应的矩阵是。所以中有个映射,每个映射都将映射到,输出的。计算方式如下:
计算,的cos相似度是,其中,。是LSH输出向量的汉明距离。为了保持cos相似度的高准确率,需要把设得比较大,这里和k-means一样,。
因为对每个向量算LSH是相互独立的,所以这一步是可以高度并行化的。但是,在我们的case里,有10000的,有3.5M的,所以相当于要把包括了个服从浮点数的存到每个节点的内存里,也就是300G的内存消耗,这是肯定不行的。有很多解决方法,大部分方法是生成一个sparse的矩阵【kdd06的Very sparse random projections】。
而本文用了Online Generation of Locality Sensitive Hash Signatures里提到的pooling trick。
保存一个size是的pool ,每个元素是从中随机出来的浮点数,m远小于transition matrix 的size。要获取的一条记录,就是使用关于的一致性hash的方法在中找到一个index,然后查出它的值。在本文中,设置,将单节点的内存损耗从100G缩减到10M,可以直接用mr搞啦。
减少训练样本数
每个用户在每个域都有大量的日志数据,将每个用户在每个域只选取一个user-item对,具体为用户特征-用户在此域喜欢的所有item的平均分数。
YoutubeDNN
https://daiwk.github.io/posts/dl-youtube-video-recommendation.html
参考http://www.sohu.com/a/155797861_465975
参考https://zhuanlan.zhihu.com/p/25343518
Deep neural networks for youtube recommendations
YouTube是世界上最大的视频上传、分享和发现网站,YouTube推荐系统为超过10亿用户从不断增长的视频库中推荐个性化的内容。整个系统由两个神经网络组成:候选生成网络和排序网络。候选生成网络从百万量级的视频库中生成上百个候选,排序网络对候选进行打分排序,输出排名最高的数十个结果。
候选生成网络(Candidate Generation Network)
候选生成网络将推荐问题建模为一个类别数极大的多分类问题:对于一个Youtube用户,使用其观看历史(视频ID)、搜索词记录(search tokens)、人口学信息(如地理位置、用户登录设备)、二值特征(如性别,是否登录)和连续特征(如用户年龄)等,对视频库中所有视频进行多分类,得到每一类别的分类结果(即每一个视频的推荐概率),最终输出概率较高的几百个视频。===>即,【使用用户特征,对所有视频进行分类,得到和这个用户最相关的几百个候选结果。】
将推荐看成分类问题,用户在上下文中,选择视频的概率是:
其中,是第i个视频的emb,是用户的emb,两个emb都是N维的,这里看起来是用内积把它们变成一个数。
由于视频有百万量级,所以做这么一个超大规模的分类,需要,并且使用的是到的样本通过importance sampling进行负采样(参考On using very large target vocabulary for neural machine translation)。对每一个example而言,他的cross-entropy是在true label和采样的负类中求min。在实践中,采样了数千个负类,比传统的softmax有将近100倍的速度提升。
另一种做法是hierarchical softmax(参考Hierarchical probabilistic neural network language model),但实践中效果没那么好。因为在hsoftmax中,遍历树里的每一个节点时,会引入对经常是毫无联系的类别的分辨,使得分类问题变得更困难以至于效果变差。
在线serving时,由于低延迟的要求,需要有对类别数是sublinear的时间复杂度的近邻检索方法,之前youtube的系统使用的是hashing的方法,即Label partitioning for sublinear ranking。因为在线的时候,softmax的输出没啥用,所以打分问题就变成了一个在点积的空间上进行最近邻检索的问题,有很多通用库可以用,例如基于LSH的ann算法: An Investigation of Practical Approximate Nearest Neighbor Algorithms。
注:
item-embedding也可以参考https://zhuanlan.zhihu.com/p/24339183?refer=deeplearning-surfing里说的Item2vec: Neural Item Embedding for Collaborative Filtering的想法,把item视为word,用户的行为序列视为一个集合,item间的共现为正样本,并按照item的频率分布进行负样本采样,相似度的计算还只是利用到了item共现信息,缺点是:忽略了user行为序列信息; 没有建模用户对不同item的喜欢程度高低。
Modeling Expected Watch Time
训练用的是logistic regression加上cross-entropy,
logit和sigmoid的关系,odds表示一个事件的几率,即该事件发生与不发生的概率比值,x表示logit:
假设第i个正样本的播放时长是,使用weighted logistic regression,将正样本的权重设为播放时长,而负样本的权重设为1,这样,假设总共有N个样本,有k个被点击了,就相当于有了个正样本,N-k个负样本。所以odds就是正样本数/负样本数=。
而实际中,点击率P很低,也就是k很小,而播放时长的期望是,所以约等于,约等于odds,即
最后在inference的serving中,直接使用来产出odds,从而近似expected watch time。
参考https://en.wikipedia.org/wiki/Logistic_regression
odds是平均时长,训练时输入给sigmoid的是logit,
所以,infer的时候:
参考tf的weighted sigmoid:weighted_cross_entropy_with_logits
: https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits
正常的sigmoid:
weighted sigmoid只对正样本加权:
代码实现
https://github.com/ogerhsou/Youtube-Recommendation-Tensorflow/blob/master/youtube_recommendation.py
关于数据集:
使用的是https://github.com/facebookresearch/fastText/blob/master/classification-example.sh
在init_data函数中,给每个__label__xx编了个号,如:
然后read_data的时候,y就用这个编号来表示(假装是时长):
而使用的是nce_loss(参考https://daiwk.github.io/posts/knowledge-tf-usage.html#tfnnnceloss):
采样
batch内shuffle采样(有放回)
On Sampling Strategies for Neural Network-based Collaborative Filtering
Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations
NCE/负采样/sampled-softmax等
http://demo.clab.cs.cmu.edu/cdyer/nce_notes.pdf
自然语言处理-word2vec-负采样/Negative Sampling
https://www.tensorflow.org/extras/candidate_sampling.pdf
下载了一份:https://github.com/daiwk/collections/blob/master/assets/candidate_sampling.pdf
召回常用Loss
Contrastive Loss
A Comprehensive Survey on Self-Supervised Learning for Recommendation
最新综述 | SSL4Rec: 全面探索自监督学习时代的推荐算法 (含开源代码和资料)
https://github.com/HKUDS/SSLRec
Triplet Loss
InfoNce Loss
Self-supervised Learning for Large-scale Item Recommendations
v3有两个图:https://arxiv.org/pdf/2007.12865v3.pdf
Focal Loss
Circle Loss
qalign
Spherical Graph Embedding for Item Retrieval in Recommendation System
代码:https://github.com/WNQzhu/Q-align
自己的注释:https://github.com/daiwk/llms_new/blob/main/demos/qalign.py
假设是节点的跳邻居,那么目标函数是最大化这些邻居的概率,即
BYOL
Bootstrap your own latent: A new approach to self-supervised learning
loss是最小化两者的距离:
其中,正常通过梯度下降更新,而是stop-gradient的,通过对进行moving average得到,在线只使用对应的网络:
label smoothing
https://spaces.ac.cn/archives/7359
Label smooth通过soft one-hot来加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,而把剩余的权重均匀分配到其他类别上,使得模型不会盲目自信,最终在fine-grained任务上能有效抑制过拟合。
突破双塔
TDM->JTM
二向箔
xx
DR
字节最新复杂召回模型,提出深度检索DR框架解决超大规模推荐系统中的匹配问题
Deep Retrieval: An End-to-End Learnable Structure Model for Large-Scale Recommendations
多兴趣召回
sdim:https://zhuanlan.zhihu.com/p/560657191
多场景
M5: Multi-Modal Multi-Interest Multi-Scenario Matching for Over-the-Top Recommendation
transformer+召回
ICLR2020 cmu+google:
Pre-training Tasks for Embedding-based Large-scale Retrieval
C-Star
Customer Shopping TrAjectory Representation Learning framework (C-STAR) PR-Graph(product relational graph):
:所有节点,15k,可能是类目之类的,应该不是商品id
:所有边,417k,强关联的product才有边,例如共同购买
:每个节点对应的d维向量,。
用户的长度为的历史序列就可以看成 ,并构成了子图
基于最优运输理论(Optimal Transport theory):将一个分布的质量(mass)搬到另一个分布的最小成本
对于,假设有一个函数,即能把从分布变成另一个分布,称是的一个推前(push forward)。两个分布P和Q间的Wasserstein Distance定义为:
1维分布能直接算出最优距离,但对于高维分布来讲,没法直接算出来最优距离,SW距离(sliced-WD)通过将高维分布投影到一维,计算一维上的Wasserstein距离,然后对多个投影方向的距离取平均,从而降低计算复杂度。具体公式如下,其中,而是一个d维的单位向量(unit vector,模长为1),是d维向量的超球面,是用的推前。这个距离同时满足正定、对称、三角不等式。
为了建模如下两种相似度:
inter-trajectory distribution similarity: 不同用户的行为序列间的分布相似度
intra-trajectory semantic correlation: 一个序列内部的语义相关性
小结:参考最优传输理论(Optimal Transport),即把每个购物路径视为一个概率分布,然后通过计算这些分布之间的距离来衡量路径之间的相似性。Wasserstein距离可以视为将一个分布“移动”到另一个分布所需的“工作量”,其中“工作量”由移动每个元素所需的“成本”(通常是欧几里得距离)决定。 高维空间中直接计算Wasserstein距离很难,采用了Sliced-Wasserstein距离,将高维分布投影到多个一维分布上,然后将这些一维分布之间的Wasserstein距离进行pooling,来近似原始高维Wasserstein距离。
Inter-SE和Intra-CE简单总结如下:
Inter-trajectory similarity encoding(inter-SE):把原分布的n维特征向量映射成1维,参考分布(可以是原来特征的向量的avg之类的)也映射成1维,计算映射后的向量与参考向量的距离(可以证明这个距离就约等于sliced-WD),作为inter-SE
Intra-trajectory correlation encoder(intra-CE):取每个item在graph里的邻居,用GCN得到其表示,然后和inter-SE一样也映射成1维,算映射后的向量与inter-SE里的参考向量的距离,作为intra-SE
序列间
对于个序列,定义probability measures ,每个序列相对应的特征序列是,假设这些特征的底层分布是,而对应的经验(离散)分布对应的经验CDF是
其中如果输入是0就返回1,否则返回0。认为,所以后面直接用来表示。
为了衡量两个序列分布的相似性,希望比较输入的序列分布和一个可训练的参考分布(当成序列特征空间的『原点』)。引入参考分布,对应的特征list ,每个元素是可训练的emb
目标就是找到的距离,然后指导对应的序列表示的学习
先进行一维WD的分布slice的计算,假设是一个线性映射,定义为关于的一个slice
Proposition 1
从reference slice 到输入分布slice 的可以表示为:
对应的CDF是是单调递增的。
Proposition 2
如果我们知道按升序排序的(因为这原始embedding的slice,是一维的,所以可以排序)对应的每个输入的排名,而且,那么最优的transport plan 可以表示为:
inter-trajectory similarity encoding
对于每个分布slice的pair对,最优的transport plan产生了最短的一组距离。表示从中采样的第个映射的参数,那么对原始序列分布的累积SW距离如下:
用表示采样的映射参数集合,首先将的embedding参考里的向量进行如下编码,其中表示innermost维度的concat操作:
给定输入特征list ,定义inter-se(inter-trajectory similarity encoder)如下:
其中是编码后的表示
定理1:对于任意两个输入序列及其对应分布和,他们对应的编码后表示和,有:
序列内
对于序列里的每个节点而言,它的邻居节点特征集合,其中是的元素在PR-Graph里的所有邻居。对于里的每个节点,先将它在第次迭代的邻居特征向量summarize起来:
其中,通过中的初始化,定义如下的layer-wise邻居特征list:
最终定义Intra-Trajectory Correlation Encoder(Intra-CE)如下:
其中是第个系数,简单地定义为。节点的emb一般通过邻居信息迭代更新,例如,AGG就是GNN的聚合函数。
Inter-SE的输出是,Intra-CE的输出是,最终整个序列的表示是二者的融合
C-Star预训练策略
两个loss:
序列间的element overlaps:两个序列的overlap越多,越相似。用表示与相关的ranking list,检索出一个序列pair ,使得,即与的交集比与的大,loss如下:
序列内的contextual relalations:同一个序列里的是正样本,不同序列的是负样本,loss如下:
整体loss,其中是正常的L2正则:
粗排
COLD
CAN
poly-encoder
https://zhuanlan.zhihu.com/p/119444637
VIRT
虚拟交互:让双塔模型向单塔模型模仿如何分配注意力权重
VIRT: Improving Representation-based Text Matching via Virtual Interaction
精排
传统ctr
https://daiwk.github.io/posts/dl-traditional-ctr-models.html
lr for ctr
Simple and scalable response prediction for display advertising
Online Models for Content Optimization
gbdt for ctr
gbdt基础知识:
https://zhuanlan.zhihu.com/p/86263786
bagging全称叫bootstrap aggregating,每个基学习器都会对训练集进行有放回抽样得到子训练集,比较著名的采样法为0.632自助法。每个基学习器基于不同子训练集进行训练,并综合所有基学习器的预测值得到最终的预测结果。bagging常用的综合方法是投票法,票数最多的类别为预测类别。
boosting训练过程为阶梯状,基模型的训练是有顺序的,每个基模型都会在前一个基模型学习的基础上进行学习,最终综合所有基模型的预测值产生最终的预测结果,用的比较多的综合方式为加权法。
stacking是先用全部数据训练好基模型,然后每个基模型都对每个训练样本进行的预测,其预测值将作为训练样本的特征值,最终会得到新的训练样本,然后基于新的训练样本进行训练得到模型,然后得到最终预测结果。
bagging和stacking中的基模型为强模型(偏差低,方差高),而boosting中的基模型为弱模型(偏差高,方差低)。
bagging的特点:
整体模型的期望等于基模型的期望,这也就意味着整体模型的偏差和基模型的偏差近似。
整体模型的方差小于等于基模型的方差,当且仅当相关性为1时取等号,随着基模型数量增多,整体模型的方差减少,从而防止过拟合的能力增强,模型的准确度得到提高。
所以,bagging中的基模型一定要为强模型,如果bagging使用弱模型则会导致整体模型的偏差提高,而准确度降低。
boosting的特点:
整体模型的方差等于基模型的方差,如果基模型不是弱模型,其方差相对较大,这将导致整体模型的方差很大,即无法达到防止过拟合的效果。因此,boosting框架中的基模型必须为弱模型。
boosting框架中采用基于贪心策略的前向加法,整体模型的期望由基模型的期望累加而成,所以随着基模型数的增多,整体模型的期望值增加,整体模型的准确度提高。
gbdt与Adaboost对比
相同:
都是boosting,使用弱分类器;
都使用前向分布算法;
不同:
迭代思路不同:adaboost是通过提升错分数据点的权重来弥补模型的不足(利用错分样本),而GBDT是通过算梯度来弥补模型的不足(利用残差);
损失函数不同:adaBoost采用的是指数损失,GBDT使用的是绝对损失或者Huber损失函数;
Learning the click-through rate for rare/new ads from similar ads
Using boosted trees for click-through rate prediction for sponsored search
Improving Ad Relevance in Sponsored Search
Stochastic Gradient Boosted Distributed Decision Trees
https://zhuanlan.zhihu.com/p/148050748
深度学习ctr
https://daiwk.github.io/posts/dl-dl-ctr-models.html
序列建模
从MLP到Self-Attention,一文总览用户行为序列推荐模型
DCN V2:Google提出改进版DCN,用于大规模排序系统中的特征交叉学习(附代码)
保序回归
参考https://zhuanlan.zhihu.com/p/88623159的代码,能画出下面的图
对于二分类问题,参考https://zhuanlan.zhihu.com/p/101766505
对lr+gbdt的负采样校准的方法
Practical Lessons from Predicting Clicks on Ads at Facebook
cvr预估
ecpc:用户给定一个粗粒度出价,模型可以在一定的范围内调价 ocpc:完全以模型出价为准
delay feedback https://zhuanlan.zhihu.com/p/555950153
时长预估
快手kdd 2022
Deconfounding Duration Bias in Watch-time Prediction for Video Recommendation
拿物理时长(duration)分桶
D2Q 算法的具体做法如下:
统计训练样本的 duration 分布,得到等频分桶分位点;
将样本按照等频分桶分位点分成 k 个相互独立的分桶 ;
对不同 duration 分桶的样本,在组内统计时长分位数作为 label,得到 Duration-Aware Watchtime-Distribution label;
分别在上述的分桶上训练时长预估模型 ;
图a:M个网络完全独立,分别学习各自的label,不共享特征 embedding,特征 embedding 空间随着分桶维度扩大线性增加,存储、训练的资源开销随之增加,实现成本较高,不符合工业界场景的要求;
图b:M个网络共享底层特征,如果采用多输出的训练方式,则 batch 内样本分布不均的问题会导致子塔训练不稳定,收敛到局部最优。单塔单输出的训练方式在实际训练时效果稳定,收敛速度较快,是 D2Q 实现的基线版本。
图c:单塔单输出模型中引入 Duration bias 模块,用于建模不同分桶下的样本差异(Res-D2Q),离线训练指标得到进一步的提升。
论文使用 XAUC、XGAUC 以及 MAE 等指标对时长回归效果进行评估。MAE 表示短视频预估时长与观看时长 label 的误差绝对值,表示模型回归精度,是回归任务的常用评估指标。
XAUC:将测试集中的样本两两组合,若组合的标签和预估值的序一致则为正序,否则为逆序,XAUC 是正序对数与总组合数的比值;
XGAUC:用户维度计算的 XAUC。
由于推荐系统主要优化候选集的排序,评估指标 XAUC 能够更加直观的反映预估时长序的好坏,与论文的优化目标更加适配。
SUM
2024 META新作:SUM技术进行大规模在线用户表示,提升广告个性化效果
Scaling User Modeling: Large-scale Online User Representations for Ads Personalization in Meta
LTV——slateQ
SlateQ: A Tractable Decomposition for Reinforcement Learning with Recommendation Set
在ranking阶段,引入长期目标
ranking loss引入
Wukong
Wukong: Towards a Scaling Law for Large-Scale Recommendation
多目标
多目标+推荐综述
阿里多目标
Youtube多目标——MMoE
https://daiwk.github.io/posts/dl-youtube-multitask.html
CGC
cgc参考paddle代码:cgc_demo.py
多场景
APG
APG: 面向CTR预估的自适应参数生成网络
摘要:目前基于深度学习的CTR预估模型(即 Deep CTR Models)被广泛的应用于各个应用中。传统的 Deep CTR Models 的学习模式是相对静态的,即所有的样本共享相同的网络参数。然而,由于不同样本的特征分布不尽相同,这样一种静态方式很难刻画出不同样本的特性,从而限制了模型的表达能力,导致次优解。在本文中,我们提出了一个高效率、高效果的通用模块,称为自适应参数生成网络(APG)。其可以基于不同的样本,动态的为CTR模型生成不同的模型参数。大量的实验表明,APG 能够被应用于各种 CTR 模型,并且显著的提升模型效果,同时能节省38.7%的时间开销和96.6%的存储。APG 已在阿里巴巴搜索广告系统部署上线,并获得3%的点击率增长和1%的广告收入增长。
APG: Adaptive Parameter Generation Network for Click-Through Rate Prediction
重排
LRF
Learned Ranking Function: From Short-term Behavior Predictions to Long-term User Satisfaction,rank阶段得到多目标的输出,需要把它们融合成一个目标,拿这个去排序,例如加法融合,LRF就是对其中搜参方法的优化
NAR4Rec
Non-autoregressive Generative Models for Reranking Recommendation
item冷启
poso
Personalized Cold Start Modules for Large-scale Recommender Systems
https://zhuanlan.zhihu.com/p/534056942
用户冷启
PeterRec
仅需少量视频观看数据,即可精准推断用户习惯:腾讯、谷歌、中科大团队提出迁移学习架构PeterRec
Parameter-Efficient Transfer from Sequential Behaviors for User Modeling and Recommendation
https://github.com/fajieyuan/sigir2020_peterrec
搞一个pretrain-finetune的架构,学好一套用户的表示,可以给各种下游任务用。
采用如下方式:
无监督地学习用户表示:使用序列模型,预测用户的下一次点击。为了能建模超长的u-i交互序列,使用类似NextItNet(A Simple Convolutional Generative Network for Next Item Recommendation)的模型
使用预训练好的模型去有监督地finetune下游任务
在各个下游任务间,想要尽可能共享更多的网络参数:参考learning to learn,即一个网络的大部分参数可以其他参数来预测(一层里95%的参数可以通过剩下的5%的参数来预测)。文章提出了model patch(模型补丁),每个模型补丁的参数量不到原始预训练模型里的卷积层参数的10%。通过加入模型补丁,不仅可以保留原来的预训练参数,还可以更好地适应下游任务。模型补丁有串行和并行两种加入方式。
序列推荐模型:
RNN:强序列依赖
CNN:可并行,能比RNN叠更多层,所以准确率更高。难以建模长序列是因为卷积核一般都比较小(如3x3),但可以通过空洞(dilated)卷积来解决,可以使用不变的卷积核,指数级地扩充表示域。
纯attention:可并行,例如SASRec(Self-attentive sequential recommendation)。但因为时间和存储消耗是序列长度的平方的复杂度。
考虑到用户的点击序列往往成百上千,所以使用类似NextItNet的casual卷积,以及类似GRec(Future Data Helps Training: Modeling Future Contexts for Session-based Recommendation)的双向encoder的这种non-casual卷积。
与推荐系统现有的transfer learning对比:
DUPN:
训练的时候就有多个loss。如果没有相应的loss和data,学好的用户表示效果就会很差。而本文只有一个loss,却能用在多个task上,所以算是一种multi-domain learning(Efficient parametrization of multi-domain deep neural networks)
DUPN在用户和item特征上需要很多特征工程,并没有显式地对用户的行为序列建模
DUPN要么finetune所有参数,要么只finetune最后一个分类层。PeterRec则是对网络的一小部分进行finetune,效果并不比全finetune差,比只finetune最后一个分类层要好很多
CoNet:杨强提出的Conet: Collaborative cross networks for cross-domain recommendation
cross-domain用于推荐的一个网络。同时训练2个目标函数,一个表示source网络,一个表示target网络。
pretrain+finetune效果不一定好,取决于预训练的方式、用户表示的表达能力、预训练的数据质量等
预训练时没有[TCL],fintune时加上。
原domain:有大量用户交互行为的图文或视频推荐。一条样本包括,其中,表示用户的点击历史
目标domain:可以是用户label很少的一些预测任务。例如用户可能喜欢的item、用户性别、用户年龄分桶等。一条样本包括,其中是一个有监督的标签。
GNN+推荐
https://zhuanlan.zhihu.com/p/323302898
Graph Neural Networks in Recommender Systems: A Survey
Graph Neural Networks for Recommender Systems: Challenges, Methods, and Directions
https://daiwk.github.io/posts/dl-graph-representations.html
SIGIR2022 | SimGCL: 面向推荐系统的极简图对比学习方法
Are Graph Augmentations Necessary? Simple Graph Contrastive Learning for Recommendation
https://github.com/Coder-Yu/QRec
selfGNN
图神经网络加持,突破传统推荐系统局限!北大港大联合提出SelfGNN:有效降低信息过载与数据噪声影响
SelfGNN: Self-Supervised Graph Neural Networks for Sequential Recommendation
https://github.com/HKUDS/SelfGNN
RL
bias v.s. debias
推荐系统炼丹笔记:推荐系统Bias大全 | Debias方法综述
position bias
搜索、推荐业务中 - position bias的工业界、学术界 发展历程 - 系列1(共计2)
推荐系统遇上深度学习(七十一)-[华为]一种消除CTR预估中位置偏置的框架
PAL
PAL: A Position-bias Aware Learning Framework for CTR Prediction in Live Recommender Systems
参考2007年的Predicting Clicks: Estimating the Click-Through Rate for New Ads一文中的推导,
给定位置和对应的item ,用户点击的概率可以分解为:
给定和,用户看到的概率
给定和,用户看到后,点击的概率
所以
假设:
用户没看到item,那么点击概率为0
用户是否点击item和位置无关,只取决于用户是否看到item,即
item被看到的概率只和位置有关,和item本身无关,即
PAL就是搞两个塔:
仅bias塔::输入pos等bias特征,预估用户会不会看到仅训练时使用
无bias塔::输入item特征,预估无bias的点击率,线上infer用
带bias预估值:两个塔输出乘起来,预估有bias的点击率,仅训练时使用
数据集的一些处理
KDD2024最佳学生论文解读,中科大、华为诺亚:序列推荐新范式DR4SR
Dataset Regeneration for Sequential Recommendation
https://github.com/USTC-StarTeam/DR4S
工业界的一些推荐应用
dlrm
Facebook深度个性化推荐系统经验总结(阿里内部分享PPT))
instagram推荐系统
Facebook首次揭秘:超过10亿用户使用的Instagram推荐算法是怎样炼成的?
https://venturebeat.com/2019/11/25/facebook-details-the-ai-technology-behind-instagram-explore/
微信读书推荐系统
youtube推荐梳理
小红书
中心化分发问题的本质在于曝光越多、活跃度越高的内容,往往能获得更多的分发,致使普通创作者的内容分发效果相对较差。此外,用户可能也会频繁看到热门兴趣,导致自身中长尾兴趣的内容所见相对较少。若要构建生态良好的社区,去中心化分发问题是需要解决的核心问题。
对于内容侧而言,应设法通过多种方式识别和引入笔记本身的更多信号,而非仅依赖用户对笔记的行为进行分发。
对于用户侧来说,应设法对用户的兴趣进行更优的挖掘,并在挖掘后予以一定的保护,鼓励用户中长尾和小众兴趣的内容分发,使用户的兴趣得到更全面的满足。
参考蚂蚁的Bootstrap Latent Representations for Multi-Modal Recommendation的BM3:
:uid没mask和itemid mask的搞,uid mask的和itemid没mask的搞
:itemid mask的和多模态没mask的搞
:多模态没mask的和多模态mask的搞
其他
混合推荐架构
认知推荐
最后更新于
这有帮助吗?