数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二、DNN For YouTube [2016]
YouTube
是全球最大的创建creating
、分享sharing
和发现discovering
视频内容平台。YouTube
的推荐可以帮助超过十亿用户从不断增长的视频库video corpus
中发现个性化内容,是现有规模最大、最复杂的工业推荐系统之一。推荐
YouTube
视频在三个方面具有极大挑战:规模
scale
:实践证明,现有的很多推荐算法在小规模问题上都能很好地发挥作用,但是在YouTube
规模的问题上无法应用。高度专业化的分布式学习算法
highly specialized distributed learning algorithms
和高效的服务系统efficient serving system
对于处理YouTube
庞大的用户基数和视频库至关重要。新鲜性
freshness
:YouTube
视频库非常活跃dynamic
,每秒钟都会上传大量的视频。推荐系统应该具有足够的响应能力responsive
,从而建模新上传的内容、以及建模用户的最新行为action
。新内容和学习成熟的
well-established
视频之间的平衡从某种角度可以视为探索和利用exploration/exploitation
。噪音
noise
:由于稀疏性sparsity
和各种不可观察的外部因素,YouTube
上的用户历史行为固有地inherently
难以预测。我们几乎无法获取用户满意度的
ground truth
,事实上我们是对带噪音的隐式反馈信号noisy implicit feedback signal
进行建模。此外,内容关联的元数据metadata
结构化较差,没有定义良好的本体ontology
。因此,我们的算法需要对训练数据的这些特点具有鲁棒性
robust
。
与谷歌的其它产品领域
product areas
相结合,YouTube
经历了根本性的范式paradigm
转变,转向使用深度学习作为几乎所有学习问题的通用解决方案。YouTube
的推荐系统建立在Google Bran
(其开源版本即著名的TensorFlow
)上。YouTube
推荐的深度学习模型大约包含10
亿级参数,并且使用千亿级的训练样本。与被大量研究的矩阵分解方法相比,使用深度神经网络进行推荐系统的工作相对较少。
- 神经网络在
《Personalized news recommendation using classi ed keywords to capture user preference》
中用于推荐新闻、在《A neural probabilistic model for context based citation recommendation》
中用于推荐ciatations
、在《User modeling with neural network for review rating prediction》
中用于推荐评论的评分。 - 协同过滤在
《Collaborative deep learning for recommender systems》
中被表述为深度神经网络,在《Autoencoders meet collaborative fi ltering》
中被表述为自编码器。 《A multi-view deep learning approach for cross domain user modeling in recommendation systems》
使用深度学习进行跨域的用户建模。- 在
content-based
推荐中,《Deep content-based music recommendation》
使用深度神经网络进行音乐推荐。
在论文
《Deep Neural Networks for YouTube Recommendations》
中,作者从从较高的视角high level
描述了该系统,并聚焦于深度学习带来的显著性能提升。论文根据经典的两阶段信息检索二分法retrieval dichotomy
分为两部分:首先论文详细介绍了一个深度候选生成Candidate Generation
模型(即召回模型),然后论文详细介绍了一个独立的深度排序Ranking
模型。论文还提供了有关设计、迭代、维护一个庞大推荐系统的实践经验教训和洞察。
2.1 Overview
我们的推荐系统由两个神经网络组成:一个用于候选生成
candidate generation
、一个用于排序ranking
。总体架构如下图所示。候选生成网络:从用户的
YouTube
历史行为记录中获取事件event
作为输入,并从大型视频库中检索一小部分(数百个)视频。这些候选视频倾向于和用户高度相关。候选生成网络仅通过协同过滤提供广泛
broad
的个性化。用户之间的相似性是通过粗粒度coarse-level
的特征来表示的,如观看视频video watch
的ID
、搜索query
的token
、人口统计学特征demographic
。排序网络:根据一个细粒度
fine-level
的representation
来区分召回的候选视频之间的相对重要性,从而提供一些 “最佳” 推荐最终构成推荐列表。排序网络通过使用描述视频和用户的一组丰富的特征,并根据期望的目标函数
desired objective function
,从而为每个视频分配一个score
来完成该任务。候选视频根据它们的score
进行排序,得分最高的候选视频被呈现给用户。
这种两阶段方法允许我们从非常大的视频库(数百万)中进行推荐,同时仍然可以确保呈现给用户的少量视频对于用户来说是个性化的
personalized
和吸引人的engaging
。此外,这种设计能够融合其它来源生成的候选(
other candidate sources
,即其它召回通路)。在开发过程中,我们广泛使用离线指标(精度
precision
、召回率recall
、ranking loss
等)来指导系统的迭代改进。然后,为了最终确定算法或模型的有效性,我们依靠在线实验live experiment
进行A/B test
。在在线实验中,我们可以衡量
click-through rate: CTR
、观看时长watch time
、以及其它衡量用户互动user engagement
指标的细微变化。这一点很重要,因为在线A/B test
结果并不总是和离线实验正相关。
2.2 Candidate Generation
在候选生成
candidate generation
过程中,我们从庞大的YouTube
视频库中筛选可能与用户有关的数百个视频。这里描述的推荐器
recommender
的前身predecessor
是在rank loss
下训练的矩阵分解matrix factorization
方法。我们神经网络模型的早期迭代通过浅层网络模仿了这种分解行为,该浅层网络仅嵌入了用户历史观看的视频。从这个角度来看,我们的方法可以视为矩阵分解技术的非线性推广。作为分类任务的推荐
$ P(w_t=i\mid U,C) = \frac{ \exp\left(\mathbf{\vec v}_i\cdot \mathbf{\vec u}\right)}{\sum_{j\in \mathbb V} \exp\left(\mathbf{\vec v}_j\cdot \mathbf{\vec u}\right)} $Recommendation as Classification
:我们提出将推荐视作极端的多分类任务,其中预测问题变为:基于用户 $ U $ 和上下文 $ C $ 在时刻 $ t $ 从视频库 $ \mathbb V $ 的数百万个视频(类别)中准确地分类特定的视频观看video watch
$ w_t $ 为类别 $ i $ (即视频库 $ \mathbb V $ 中的第 $ i $ 个视频)的概率。 即:其中: $ \mathbf{\vec u}\in \mathbb R^d $ 为
(user,context) pair
对的embedding
向量; $ \mathbf{\vec v}_j\in \mathbb R^d $ 为每个候选视频的embedding
向量; $ d $ 为embedding
维度。在这种
setting
下,embedding
只是将稀疏实体(单个视频、用户等)映射到 $ \mathbb R^d $ 中的稠密向量。深度神经网络的任务是学习用户embedding
$ \mathbf{\vec u} $ 作为用户历史行为和上下文的函数,这对于使用softmax
分类器在视频之间进行区分discriminating
是很有用的。尽管
YouTube
存在明确的反馈机制(加赞thumbs up
、减赞thumbs down
、产品内调查等),但是我们使用视频观看video watch
的隐式反馈implicit feedback
来训练模型,其中用户完成视频观看就是一个正样本。这种选择是基于大规模可用的隐式用户行为历史记录,从而允许我们可以在显式反馈explicit feedback
极其稀疏的长尾提供推荐。为了有效地训练具有数百万个类别的模型,我们依靠负采样技术从背景分布
background distribution
中采样负样本(候选采样candidate sampling
),然后通过重要性加权对这些负样本进行校正。对于每个正样本,我们最小化true label
和采样的负类之间的交叉熵。- 在实践中,我们对每个正样本随机采样几千个负样本,这相当于传统
softmax
的100
多倍的加速。 - 一种流行的替代方法是分层
softmax
(hierarchical softmax
),但是它无法达到相当的准确性。在分层softmax
中涉及把原本可能不相关的样本归结到同一个中间节点,这使得分类问题更加困难并降低了性能。
在
serving
阶段,我们需要计算最有可能的N
个类别(视频),以便选择要呈现给用户的top-N
个类别。在数十毫秒的严格serving
延迟时间下对数百万个item
进行打分,需要一种近似的、与类别数量亚线性的评分方案。YouTube
以前的系统依赖于哈希,而这里的分类器使用类似的方法。由于在serving
时不需要来自softmax
输出层的、经过校准的likelihood
,因此评分问题简化为内积空间中的最近邻检索nearest neighbor search
问题,而这可以通过通用的library
来解决。我们发现A/B test
结果对于最近邻检索算法的选择不是特别敏感。- 在实践中,我们对每个正样本随机采样几千个负样本,这相当于传统
模型架构:受连续的
bag-of-word
语言模型的启发,我们在固定的词典vocabulary
中学习每个视频的embedding
,并将这些embedding
馈入前馈神经网络。用户的观看历史由可变长度的视频
ID
序列来表示,该序列通过embedding
映射为稠密的向量representation
。由于前馈神经网络需要固定尺寸的稠密输入,因此我们对embedding
序列进行均值池化从而聚合为固定尺寸的向量。在所有聚合策略中(sum
池化、最大池化、均值池化),均值池化效果最好。重要的是,
embedding
与所有其它模型参数是通过常规的梯度下降来联合学习的。下图给出了
candidate generation
网络的架构:特征被拼接称宽wide
的第一层,接着是几层带ReLU
激活函数的全连接层FC layer
。其中:- 嵌入的稀疏特征和稠密特征进行拼接。 特征拼接之前先对
embedding
序列进行均值池化,从而将可变大小的稀疏ID
序列转换为适合输入到隐层hidden layer
的固定尺寸的向量。 - 所有隐层都使用全连接。
- 训练过程中,通过对
softmax
输出进行负采样来进行梯度下降,从而最小化交叉熵损失。 serving
过程中,执行近似的最近邻检索从而生成数百个候选视频。
- 嵌入的稀疏特征和稠密特征进行拼接。 特征拼接之前先对
特征体系:深度神经网络作为矩阵分解的推广的一个关键优势是,可以轻松地将任意连续特征和离散特征添加到模型中。
搜索历史记录
search history
和观看历史记录watch history
的处理方式相似:每个query
被tokenize
为unigram
和bigram
,并且每个token
都被嵌入。然后我们将所有的token
的embedding
均值池化。池化后的稠密向量就代表了用户的搜索历史记录。人口统计特征
demographic feature
对于提供先验知识prior
很重要,这样对新用户的推荐就能合理地进行。用户的地理区域
geographic region
和设备分别被嵌入,然后进行拼接。简单的二元特征和连续特征(如用户性别、登录状态、用户年龄)将被直接输入到网络,其中实数值将被标准化为
[0.0, 1.0]
之间。example age
特征:每秒都有大量的视频上传到YouTube
。因此对于YouTube
产品而言,推荐最新上传(fresh
) 的内容非常重要。我们始终观察到:在不牺牲相关性的前提下,用户更喜欢新鲜的内容
fresh content
。除了简单地推荐用户想看的新视频这个一阶效应first-order effect
之外,还有一个关键的次级现象:自举和传播病毒内容bootstrapping and propagating viral content
。机器学习系统经常表现出对过去
past
的隐性bias
,因为它们被训练为通过历史样本来预测未来的行为。视频热度popularity
的分布非常不稳定,但是我们推荐器recommender
产生的视频库上的多项式分布将反映几周训练窗口中的平均观看可能性likelihood
。即:我们模型学到的是过去一段时间平均的热度,而不是当前时刻的热度。而平均热度和当前热度差异很大。
为解决这个问题,我们在训练过程中以训练样本的
age
作为特征,它是训练时刻减去创建日志的时刻。在serving
阶段,这个特征被设为零(或者略微为负),从而表示采用最近的热度。一种朴素的方法是,将训练样本根据发生时刻进行加权:距离训练时刻越近则权重越大、距离训练时刻越久则权重越小。这种方式使得近期发生的模式更重要。这种方式的缺点是:难以确定合适的时间衰减加权方式。而
YouTube DNN
中的方法是:将样本age
作为特征,由模型自动根据该特征来学习模式随时间变化的规律。下图给出了这种方法在任意挑选的一个视频上的效果。可以看到:
- 添加了样本
age
特征之后,模型能够准确地表示数据中观察到的上传时间和依赖于时间的热度。 - 如果没有该特征,则模型将预估为:近似于训练窗口内的平均观看可能性
likelihood
。
- 添加了样本
需要强调的是,推荐通常涉及解决一个代理问题
surrogate problem
,然后将结果迁移到特定的上下文context
。一个经典的例子是,我们假设准确地预估收视率会带来有效的电影推荐。我们已经发现,这个代理学习问题的选择对A/B test
的性能有着极其重要的影响,但是很难用离线实现来衡量。例如,离线优化的是点击率,但是在线需要优化的是
GMV
,二者之间存在一定的gap
。训练样本是从所有
YouTube
观看记录(甚至是从其它网站内嵌的观看记录)生成的,而不仅仅是我们产生的推荐结果的观看记录。否则,新内容将很难出现,推荐器将过度倾向于利用exploitation
。如果用户通过我们推荐以外的方式发现视频,我们希望能够通过协同过滤将这一发现快速传播给其他人。提升实时
metric
的另一个关键洞察是:为每个用户生成固定数量的训练样本,这等效于在损失函数中认为所有用户同等重要。这防止了一小批高度活跃的用户来统治了损失函数。这里值得商榷:a. 是否活跃的用户更重要?这个问题不同的场景有不同的答案。 b. 每个用户生成固定数量的训练样本,必然会丢弃活跃用户的大量样本,这降低了训练数据量,降低模型效果。
虽然有点违背直觉,但是针对分类器的保留信息
withhold information
(如hold out
验证集或测试集)必须非常小心,从而防止模型利用网站的结构structure
从而对代理问题过拟合。考虑这样的一个例子,用户刚刚提交了对
taylor swift
的搜索query
。由于我们的问题是预测下一个观看的视频,给定该搜索信息的分类器将预测最可能观看的视频是那些出现在taylor swift
搜索结果页面上的视频。毫不意外的是,将用户上一次搜索页重新作为主页推荐列表,效果很差。通过丢弃序列信息,并用无序的
bag of token
来表示搜索query
,分类器将不再直接感知label
的来源。视频的自然消费模式通常会导致非常不对称的
co-watch
概率。例如:- 情景剧系列
episodic series
通常是按顺序观看的。用户先看第一集、再看第二集的概率,远大于先看第二集、再看第一集。 - 用户通常会发现最流行流派
genre
的艺术家,然后再关注较小的领域,而不是相反。
因此,我们发现预测用户的下一个观看
next watch
要比预测一个随机hold-out
(即,留一法)观看hold-out watch
表现好得多。而很多协同过滤系统通过hold out
一个随机item
,然后从用户剩余的历史行为的其它item
来预测这个item
,从而隐式地选择label
和上下文,如下图(a)
所示。这会泄露未来的信息,并且会忽略任何非对称的消费模式asymmetric consumption pattern
。相比值下,我们通过随机选择一个观看
watch
,并且仅选择用户在这个hold out label
之前的用户行为作为输入,从而rollback
用户的历史行为记录。如下图(b)
所示。如下图所示,选择模型的
label
和input context
对于离线评估具有挑战性,并且对于在线性能有很大影响。这里,实心事件event
$ \bullet $ 是网络的输入特征,而空心事件 $ \circ $ 不是网络的输入特征。我们发现:预测未来的观看(b
) 在A/B test
中表现更好。b
中的example age
表示为 $ t_{\max} - t_N $ ,其中 $ t_\max $ 为训练数据中观察到的最大时刻。- 情景剧系列
实验结果:添加更多特征、加深模型深度显著提升了
hold out
预估的精度precision
,如下图所示。所谓
hold out
预估指的是:label
为hold out
数据,特征为label
之前的历史数据(如上图的b
图所示)。实验中,包含
100
万视频和100
万搜索token
的词典vocabulary
被嵌入为256
维的embedding
向量。每个用户样本最多50
个最近的观看,以及最多50
个最近的搜索。softmax
层输出在相同的100
万个视频类别上的多项式分布,output
向量的维度为256
维(这可以被认为是一个独立的output video embedding
)。这些模型在所有
YouTube
用户上训练若干个epoch
,直到收敛。网络结构遵循常见的
tower
模式,其中网络的底部最宽、然后每个连续的隐层将神经元数量减半。我们进行了四组实验,深度不断增加,直到增加的收益减少并且收敛变得困难。depth 0
:一个线性层,它仅仅转换这个concatenation layer
来匹配softmax
的维度256
维。零深度的网络实际上是一种线性分解方案,它和先前
predecessor
的系统非常相似。depth 1
:256 ReLU
。depth 2
:512 ReLU --> 256 ReLU
。depth 3
:1024 ReLU --> 512 ReLU --> 256 ReLU
。depth 4
:2048 ReLU --> 1024 ReLU --> 512 ReLU --> 256 ReLU
。
可以看到:特征越多,
$ \text{AP@k} = \frac{\sum_{i=1}^k \text{precision-k}}{k} $holdout
预估的Mean Average Precision: MAP
越高;层的深度越深,MAP
越高。因为更深的模型提升了表达能力,使得模型能够有效建模特征之间的交互。precision-k
为top-k
列表的推荐精准度,MAP@k
为所有用户AP@k
的平均。由于这里是留一法评估,因此k=1
。
2.3 Ranking
Ranking
的主要作用是使用曝光数据impression data
来专门化specialize
和校准calibrate
特定用户界面particular user interface
的候选预测。例如,用户通常可能以高概率观看给定的视频,但是由于缩略图thumbnail image
的选择 ,因此不太可能点击给定的首页曝光homepage impression
。在
ranking
期间,我们可以访问更多的特征来描述视频、以及用户和视频之间的关系。因为只有数百个视频被评分,而不是对数百万个视频进行评分(在candidate generation
中才需要对数百万个视频进行评分)。此外,
ranking
对于集成ensembling
来自不同候选源(每个候选源代表了一路召回通路)也至关重要,这些候选源之间的score
不能直接比较(跨召回通路之间的召回score
不是直接可比较的,但是召回通路内部的score
是可以直接比较的)。我们使用和
candidate generation
模型类似的深层神经网络,使用逻辑回归为每个视频曝光分配一个独立的score
,如下图所示。然后视频列表根据这个分数排序并返回top-n
视频给到用户。我们最终的
ranking
目标是根据在线A/B test
结果不断调整的, 但是通常是每个曝光的期望观看时长的简单函数。按点击率排名通常会鼓励用户观看一些未完成的欺骗性deceptive
视频(点击诱饵clickbait
),而观看时长可以更好地捕获用户的互动engagement
。下图为
Ranking
的深度网络体系架构,它描述了具有共享embedding
的离散特征(单值univalent
和多值multivalent
),以及幂次power
的归一化连续特征。所有的layer
都是全连接的。实际上,数以百计的特征被馈入到网络中。我们的特征与传统的离散特征、连续/常规特征这种分类体系不同。我们使用的离散特征的基数
cardinality
差异很大:有些离散特征是二元的(如用户是否已登录),而另一些离散特征则具有数百万个可能的值(如用户上一次的搜索query
)。我们将特征根据是仅贡献单个值(单值
univalent
特征)、还是贡献一组值(多值multivalent
特征)来进一步细分。单值离散特征的典型例子是被评分的曝光
impression
的video ID
。而相应的一个多值特征是用户最近观看的N
个视频的video ID
列表。我们还根据特征是描述
item
(曝光impression
)的属性,还是描述用户/上下文(query
)的属性,来对特征进行分类。query
特征针对每次请求request
执行计算(即请求粒度),而曝光impression
特征对每个被评分的item
进行计算(即item
粒度)。
特征工程:我们通常在
ranking
模型中使用数百个特征,其中离散特征和连续特征大体上各占一半。尽管深度学习有望缓解手工特征工程的负担,但是原始数据的特性
nature
不容易直接输入到前馈神经网络。我们仍然花费大量的工程资源将用户和视频数据转换为有用的特征。主要挑战在于如何表达用户行为的时间序列a temporal sequence of user action
,以及这些行为如何与被评分的视频曝光video impression
相关联。我们观察到,最重要的信号是那些描述用户之前与
item
本身、以及其它类似item
之间的交互interaction
。这借鉴了其它工作在广告ranking
上的经验。例如,考虑用户和需要评分的视频的频道
channel
的历史记录:用户在这个频道观看了多少视频?用户最近一次看这个频道的视频是什么时候?这些描述用户过去在相关
item
上的行为的连续特征是特别强大的,因为它们可以很好地在不同的item
之间进行泛化。我们还发现:以特征的形式将
candidate generation
中的信息传播到ranking
过程中,这至关重要。例如,这个候选视频从哪个通路召回?这个候选视频的召回分是多少?
描述过去视频曝光
impression
频率的特征对于在推荐中引入 “变动”churn
也是至关重要的(连续的请求不会返回相同的推荐列表)。如果一个用户最近被推荐了一个视频,但是没有看,那么模型自然会在下一次页面加载
page load
时剔除这个曝光impression
。即剔除已经曝光过的
item
(新鲜度过滤)。serving
最新的曝光impression
和观看历史是一个工程问题,这超出了本文的范围,但是对于产生响应性responsive
推荐至关重要。
离散特征
embedding
:和candidate generation
模型类似,我们使用emebdding
将稀疏离散特征映射到适用于神经网络的稠密representation
。每个
unique
的ID
空间(vocabulary
)都有一个独立的、待学习的embedding
,其维度大约是和unique
值数量的对数成正比。这些词典是简单的look-up table
,通过在训练之前将数据传输一次来建立。非常大
cardinality
的ID
空间(如视频ID
、搜索query
的term
)根据点击频次对top N
进行截断。out-of-vocabulary
取值简单地映射到全零的embedding
。截断的原因是低频
ID
出现次数太少,导致embedding
学不好。实际上有更好的做法:进行hash
映射。一方面hash
映射不会对结果产生太大影响,另一方面它能自适应低频ID
出现增量更新的情况。和
candidate generation
一样,在多值离散特征embedding
馈入网络之前,先对它们均值池化。重要的是,相同
ID
空间中的离散特征共享底层的embedding
。例如,我们有一个全局的视频
ID
的embedding
,所有用到视频ID
的特征都将使用它(如曝光impression
的视频ID
、用户最近观看视频的视频ID
等等)。尽管是共享的
embedding
,但是每个特征都被独立地馈入到网络中,因此后续的layer
可以学到每个特征的专门的representation
。embedding
共享对于提高泛化能力、加快训练速度、降低内存需求非常重要。
绝大多数模型参数都位于这些高基数
high-cardinality
的embedding
空间中。例如,一百万个ID
映射到32
维空间中,这比2048
个神经元的全连接层的参数多7
倍。归一化连续特征:众所周知,神经网络对于输入的缩放
scaling
和分布distribution
非常敏感,而诸如决策树集成ensemble
模型之类的替代方法则对于特征的scaling
是不变的。我们发现连续特征的适当归一化对于模型收敛至关重要。假设连续特征 $ x $ 的分布为 $ f $ ,我们使用累积分布
cumulative distribution
$ \tilde x = \int_{-\infty}^x df $ ,通过缩放取值从而将该特征转换为 $ \tilde x $ ,其中 $ \tilde x $ 在[0~1]
之间均匀分布。在训练开始之前,通过对数据进行单次遍历来对特征取值的分位数进行线性插值,可以近似得到该积分。这种归一化实际上是
ranking
归一化:即某个特征X
的取值 $ x^* $ 在所有样本中X
的所有取值的排名。实际上还有更简单的做法:在input
层之后紧跟着一个BatchNormalization
层。除了原始归一化特征 $ \tilde x $ 之外,我们还输入了幂次特征 $ \tilde x^2,\sqrt{\tilde x} $ ,使得网络能够轻松地构成特征的超线性函数、亚线性函数,从而赋予网络更强的表达能力。实验发现,向模型馈入幂次特征可以提高离线准确率。
建模期望观看时长
Expected Watch Time
:我们的优化目标是在给定的训练样本(要么是点击样本、要么是未被点击)的情况下,预估期望观看时长expected watch time
。其中,正样本带有用户观看视频所花费的时长。为了预估期望观看时长,我们使用了专门为该目标而开发的加权逻辑回归
weighted logistic regression
。该模型以交叉熵损失为目标函数来训练逻辑回归,但是正样本(点击样本)会根据视频上的观看时长来加权,而所有的负样本(未点击样本)都采用单位权重。假设样本 $ i $ 的点击率为 $ p $ ,则逻辑回归学到的几率为:
$ \text{odds}(i) = \frac{p_i}{1-p_i} $由于这里对正样本进行加权,则加权逻辑回归学到的几率为:
$ \text{odds}(i) = \frac{p_i\times T_i}{1-p _i\times T_i} $其中 $ T_i $ 为正样本的观看时长。考虑到 $ p_i $ 通常是一个很小的值,使得 $ p_iT_i\ll 1 $ ,因此有:
$ \text{odds}(i) \simeq T_ip_i = \mathbb E[T_i] $注:样本加权的方式有两种:
- 采样加权:对一条样本重复 $ w $ 次,其中 $ w $ 为加权的权重。
- 梯度加权:对样本的梯度乘以 $ w $ 。
从效率上看,第二种方式的计算量更小、计算效率更高。
从效果上看,如果没有随机混洗则二者效果相同(都是基于当前梯度之上的 $ w $ 个梯度的累加),否则二者效果不同(第一种方式中,每个样本的当前梯度都不同)。
在推断期间,我们有:
$ p = \frac{1}{1+\exp\left(-\mathbf{\vec \theta}^\top\mathbf{\vec x}\right)}\\ \log (\text{odds}) = \log \left(\frac{p}{1-p}\right) = \mathbf{\vec \theta}^\top\mathbf{\vec x}\\ \text{odds} = \exp\left(\mathbf{\vec \theta}^\top\mathbf{\vec x}\right) $因此推断期我们使用指数函数 $ \exp(x) $ 作为最终的激活函数,从而产生接近于预估的期望观看时长的几率。然后我们根据预估期望观看时长来进行排序。
注:由于 $ \exp(\cdot) $ 为单调递增函数,因此根据 $ \exp\left(\mathbf{\vec \theta}^\top\mathbf{\vec x}\right) $ 排序等价于根据 $ \mathbf{\vec \theta}^\top\mathbf{\vec x} $ 排序。
表面上看,推断时没有进行样本加权,但是观看时长更长的视频预估的 $ p $ 更大。
实验结果:下表展示了我们在具有不同隐层配置下的、
next-day holdout
数据上的实验结果。每个配置的取值(weighted, per-user loss
)通过考虑为单个用户在单个页面上同时考虑正样本(点击的)、负样本(未点击的)的曝光impression
来获取的。首先通过我们的模型来为这两种曝光
impression
打分。如果负样本得分高于正样本,则我们认为正样本的观看时长是错误预测的观看时长。weighted per-user loss
是在heldout
数据上,所有错误预测的观看时长占总观看时长上的比例。可以看到:
增加隐层的宽度和深度都可以改善结果,但是代价就是推断期间所需的服务器
CPU
时间。1024ReLU-512ReLU-256ReLU
的配置获得了最佳的效果,同时使得我们能够保持在serving
的CPU
预算之内。- 对于
1024ReLU-512ReLU-256ReLU
模型,我们尝试仅提供归一化的连续特征,而没有幂次特征,这会使得loss
增加0.2%
。 - 对于
1024ReLU-512ReLU-256ReLU
模型,我们也尝试将正样本和负样本都是相等权重(相当于无加权)。毫无意外地,这使得观看时长的weighted loss
显著增加了4.1%
。
- 对于
2.4 总结
我们描述了推荐
YouTube
视频的深度神经网络架构,分为两个不同的问题:candidate generation
、ranking
。candidate generation
:我们的深度协同过滤deep collaborative filtering
模型能够有效地吸收很多信号,并用深度网络对它们的交互进行建模,这优于以前在YouTube
上使用的矩阵分解方法。- 在选择推荐的代理问题
surrogate problem
方面,艺术多于科学。我们发现通过捕获不对称的co-watch
行为和防止未来信息泄露,对未来观看future watch
进行分类可以在在线指标上表现良好。 - 分类器中的
withholding discrimative signal
(即label
)对于获得好的结果也至关重要--否则模型会过拟合代理问题,并且不能很好地迁移到主页上。 - 我们证明了使用训练样本的
age
作为输入特征消除了对过去past
的固有偏见,并允许模型表示流行视频的时间依赖行为。这提高了离线holdout precision
结果,并在A/B test
中显著增加了最近上传的视频的观看时长。
- 在选择推荐的代理问题
ranking
:ranking
是一个更经典的机器学习问题,但是我们的深度学习方法优于以前的、用于观看时长预测的线性模型和基于树的模型。- 推荐系统尤其受益于历史用户行为(用户在
item
上的行为)的专门特征。深度神经网络需要离散和连续特征的特殊表示,其中我们分别用embedding
和分位数归一化来转换它们。深度的layer
被证明能够有效地建模数百个特征之间的非线性相互作用。 - 逻辑回归被修改为通过正样本的观看时长来加权,而负样本的加权系数固定为单位权重。这允许我们学习与期望观看时长接近的几率
odds
模型 。和直接预估点击率CTR
相比,这种方法在观看时长加权的ranking
评估指标上表现更好。
- 推荐系统尤其受益于历史用户行为(用户在
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论