MLPS
MPLS(Multiprotocol Label Switch)是使用标签为了做出数据转发决策的数据包转发技术。利用 MPLS 技术,只需一次(当数据包进入 MPLS 域时)即可完成第 3 层报头分析。标签检查可推动后续的数据包转发。MPLS 可为以下应用带来益处:虚拟专用网络 (VPN)
流量工程 (TE)
服务质量 (QoS)
任何基于 MPLS 的传输 (AToM)
另外,它还可减少核心路由器上的转发开销。MPLS 技术适用于任何网络层协议。
embedding
简单来说,embedding就是用一个低维的向量表示一个物体,可以是一个词,或是一个商品,或是一个电影等等。这个embedding向量的性质是能使距离相近的向量对应的物体有相近的含义,比如 Embedding(复仇者联盟)和Embedding(钢铁侠)之间的距离就会很接近,但 Embedding(复仇者联盟)和Embedding(乱世佳人)的距离就会远一些。
除此之外Embedding甚至还具有数学运算的关系,比如Embedding(马德里)-Embedding(西班牙)+Embedding(法国)≈Embedding(巴黎)
从另外一个空间表达物体,甚至揭示了物体间的潜在关系,上次体会这样神奇的操作还是在学习傅里叶变换的时候,从某种意义上来说,Embedding方法甚至具备了一些本体论的哲学意义。
言归正传,Embedding能够用低维向量对物体进行编码还能保留其含义的特点非常适合深度学习。在传统机器学习模型构建过程中,我们经常使用one hot encoding对离散特征,特别是id类特征进行编码,但由于one hot encoding的维度等于物体的总数,比如阿里的商品one hot encoding的维度就至少是千万量级的。这样的编码方式对于商品来说是极端稀疏的,甚至用multi hot encoding对用户浏览历史的编码也会是一个非常稀疏的向量。而深度学习的特点以及工程方面的原因使其不利于稀疏特征向量的处理(这里希望大家讨论一下为什么?)。因此如果能把物体编码为一个低维稠密向量再喂给DNN,自然是一个高效的基本操作。
pooling
池化过程在一般卷积过程后。池化(pooling) 的本质,其实就是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行降维压缩,以加快运算速度。
激活函数
激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。
sigmoid和softmax
sigmoid:
softmax:
sigmoid将一个real value映射到(0,1)的区间(当然也可以是(-1,1)),这样可以用来做二分类。而softmax把一个k维的real value向量(a1,a2,a3,a4…)映射成一个(b1,b2,b3,b4…)其中bi是一个0-1的常数,然后可以根据bi的大小来进行多分类的任务,如取权重最大的一维。
神经网络的Attention机制
注意力机制也称为:“神经网络的注意力”,或者更简单的:“注意力”。
人脑在工作时,其实是由一定的注意力的,比如我们在浏览器上搜索时,大部分的注意力都集中在搜索结果的左上角,这说明大脑在处理信号的时候是有一定权重划分的,而注意力机制的提出正是模仿了大脑的这种特性。神经网络的注意力就是说,神经网络具有将注意力集中到一部分输入(或特征)的能力。
(1)为什么引入注意力机制呢?
计算能力的限制:目前计算能力依然是限制神经网络发展的瓶颈,当输入的信息过多时,模型也会变得更复杂,通过引入注意力,可以减少处理的信息量,从而减小需要的计算资源。
优化算法的限制:虽然局部连接、权重共享以及 pooling 等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长序列输入,信息“记忆”能力并不高。
(2)注意力机制的分类
注意力机制一般分为两种:
聚焦式(Focus)注意力:是一种自上而下的有意识的注意力,“主动注意” 是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
显著性(Saliency-Based)注意力:是一种自下而上的无意识的注意力,“被动注意” 是基于显著性的注意力,是由外界刺激驱动的注意,不需要主动干预,也和任务无关;池化(Max Pooling) 和 门控(Gating) 可以近似地看作是自下而上的基于显著性的注意力机制。
在神经网络结构中加入注意力模型主要是基于三点考虑:首先是这些模型在众多的任务中取得了非常好的性能,比方说机器翻译、问答系统、情感分析、词性标注选民分析和问答系统。然后,在提升模型性能的同时,注意力机制增加了神经网络结构的可解释性。由于传统的神经网络是一个黑盒模型,因此提高其可解释性对机器学习模型的公平性、可靠性和透明性的提高至关重要。第三,其能够帮助缓解递归神经网络中的一些缺陷,比方说随着输入序列长度的增加导致的性能下降和对输入的顺序处理所导致的计算效率低下。
DIN模型
基准模型:基准模型就是比较常见的多层神经网络,即:(1)先对每个特征进行Embedding操作,得到一系列Embedding向量;(2)将不同Group的特征拼接组合起来之后得到一个固定长度的用户Embedding向量,和候选商品Embedding向量;(3)然后将(2)中的向量输入后续的全连接网络,最后输出pCTR值。具体网络结构见下图:
base模型缺点:(1)用户的历史行为特征和当前的候选广告特征在全都拼起来给神经网络之前,是一点交互的过程都没有。
(2)拼起来之后给神经网络,虽然有了交互,但也丢失了部分信息,并引入了噪声。
DIN模型:DIN模型在基准模型的基础上,增加了注意力机制,就是模型在对候选商品预测的时候,对用户不同行为的注意力是不一样的。“相关”的行为历史看重一些,“不相关”的历史甚至可以忽略。下图展示了DIN模型的网络结构图。DIN的模型结构中增加了 Activation Unit模块,该模块主要提取当前候选商品与历史行为中的商品的权重值。
单层注意力模型与多层注意力模型
在最一般的情形下,注意力权重是仅仅是由注意力模型的原始的输入序列算出来的,这一注意力模型可被称为单层注意力模型。另一方面,我们可对输入序列进行多次抽象,这样可以使得底层抽象的上下文向量成为下一次抽象的查询状态。这种对输入数据叠加若干层注意力模块实现对序列数据多层抽象的方法可被称为多层注意力模型。更具体地来说,多层注意力模型又可按照模型的权重是自顶向下学习还是自底向上学习的方式进行划分。
多层注意力机制的一个典型应用是通过对文本进行两层抽象实现对文本的分类。这一模型称为“层次和注意力模型(Hierarchical Attention Model,HAM)”。文本是由不同的句子组合而成的,而每个句子又包含不同的单词,HAM能够对文章这种自然的层次化结构进行抽取。具体来说,其首先对每个句子建立一个注意力模型,该注意力模型的输入是每个句子中的基本单词,从而得到这个句子的特征表示;然后将句子的特征的表示输入到后续的注意力模型中来构建整段文本的特征表示。这一最后得到的整段文本的特征表示可以用于后面分类任务分类器的输入。
特征表示的数量
在大多数的应用场景下,我们只会对输入数据进行一种特征表示。然而在有些场景下,对输入数据进行单一的特征表示可能不能够为后续的过程提供足够的信息。在这种情形下,我们可以对同样的输入数据进行多种特征表示。利用注意力机制可以为这些不同的特征表示指定相关的权重,从而丢弃掉输入数据中的噪声信息和重复冗余信息。我们称这种模型为多表示注意力模型\。这种多表示注意力模型能够决定不同特征表示的权重从而有助于后面对这一表示的应用。最后得到的输入的特征表示是多个特征表示的加权组合,这一模型的一个优势在于针对不同的后处理任务能够决定哪些特征表示更适合当前的任务场景。
基于类似的想法,还有一种称为多维度注意力模型\的方法。其核心观点是对特征表示向量的各个维度之间的依赖关系进行建模,这样我们便能够选择特征中更为有用的属性来帮助我们处理后续的任务。这一思想在自然语言处理领域至关重要因为相同的单词往往会出现多义性。
AUC
本质是一个概率值,简单来说就是随机抽出一对样本(一个正样本一个负样本),然后用训练得到的分类器对这两个样本进行预测,预测得到正样本的概率大于负样本的概率的概率。
GAUC
优点:实现了用户级别的AUC计算
缺点:用户行为没有那么多的时候,GAUC会抖动,所以大部分公司还是会采用AUC
multi-hot编码
在做用户画像或为用户做兴趣标签的时候,往往会遇到这样的问题,就是multi-hot特征的处理。 multi-hot编码之后每个id对应的是多个的1,而且不同样本中1的个数还不一样。 对multi-hot特征的处理无非也是一种稀疏矩阵的降维压缩,因此可以使用embedding的方法。对于某个属性对应的分类特征,可能该特征下有多个取值,比如一个特征表示对哪些物品感兴趣,那么这个特征不是单个值,而是有多个取值。 例如我们现在有3个样本: - 样本1 在该属性下取值有1,2两种特征 - 样本2 在该属性下有2一种特征 - 样本3 在该属性下有3,4 两种特征。我们以multi-hot编码的形式来定义特征应为 - 样本1 [1,1,0,0] - 样本2 [0,1,0,0] - 样本3 [0,0,1,1] 但是这种变量不能够直接用 embedding_lookup 去做, embedding_lookup 只接受只有一个1的onehot编码,那么为了完成这种情况的embedding需要两个步骤:
- 将输入属性转化为类型one-hot编码的形式, 在tensorflow中这个过程是通过 tf.SparseTensor 来完成的,实际上就是构建了一个字典矩阵,key为坐标,value为1或者0表示是否有值,对于一个样本 如样本1来说就是构建了一个矩阵[[1,1,0,0]]表示有物品1和2,这个矩阵的规模为 [batch_size,num_items] ,这个过程即为 multi-hot 编码
- 将构建好的类似于one-hot编码的矩阵与embedding矩阵相乘, embedding矩阵的规模为 [num_items, embedding_size] ,相乘之后得到的输出规模为 [batchi_size, embedding_size] , 即对多维多属性的特征构建了embedding vector
CTR模型整理
说明
参考部分所列出的为遵循原论文所整理,若原论文中有源码则均以附出,实现基本均为tf实现。
pytorch统一接口部分所给出的链接,是一个pytorch实现的ctr库。
参考
1 | https://github.com/shenweichen/DeepCTR |
Convolutional Click Prediction Model(卷积点击预测模型CCPM)
1 | [CIKM 2015]A Convolutional Click Prediction Model |
论文链接
1 | http://wnzhang.net/share/rtb-papers/cnn-ctr.pdf |
算法细节
数据集
1 | Avazu:包括数天的广告点击数据,按时间顺序排列。在每一份点击数据中,有17个数据字段 |
结果分析
1 | CCPM和其他竞争性方法在单一广告印象和连续广告印象上的点击预测性能相比较优。(FM,LR.RNN) |
超参数
1 | the parameter impacts of the filter width w and the number of feature map m in corresponding layer are studied |
Factorization-supported Neural Network(因子分解支持的神经网络FNN)
1 | [ECIR 2016]Deep Learning over Multi-field Categorical Data: A Case Study on User Response Prediction |
论文链接
1 | https://arxiv.org/pdf/1601.02376.pdf |
带有演示数据的源代码
1 | https://github.com/wnzhang/deep-ctr |
算法细节
数据集
1 | iPinYou:iPinYou数据集是一个公开的真实世界的显示广告数据集,其中有每个广告显示信息和相应的 |
各种细节
1 | 1.使用随机梯度下降法来学习所有模型的大部分参数。 |
Product-based Neural Network(PNN)
1 | [ICDM 2016]Product-based neural networks for user response prediction |
论文链接
1 | https://arxiv.org/pdf/1611.00144.pdf |
可重复的实验代码
1 | https://github.com/Atomu2014/product-nets |
数据集
1 | Criteo:一个著名的广告技术行业的基准数据集。 |
各种细节
1 | 1.在这个数据集上应用了负向下采样。定义下采样率为w,预测的CTR为p,重新校准的CTR q |
使用方法
Follow the instructions and update the soft link data
:
1 | XXX/product-nets$ ln -sfn XXX/make-ipinyou-data/2997 data |
run main.py
:
1 | cd python |
Wide & Deep
1 | [DLRS 2016]Wide & Deep Learning for Recommender Systems |
论文链接
1 | https://arxiv.org/pdf/1606.07792.pdf |
各种细节
1 | 1.模型训练时为每个分类特征学习一个 32 维嵌入向量 |
DeepFM
1 | [IJCAI 2017]DeepFM: A Factorization-Machine based Neural Network for CTR Prediction |
论文链接
1 | https://www.ijcai.org/proceedings/2017/0239.pdf |
数据集
1 | Criteo:包括4500万用户的点击记录。 |
各种细节
1 | 1.for FNN and PNN: (1)dropout: 0.5; (2) network structure: 400-400-400; (3) optimizer: Adam; (4) activation function: tanh for IPNN, relu forother deep models. |
注:这篇文章对于超参数进行了大量实验
Piece-wise Linear Model
1 | [arxiv 2017]Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction |
论文链接
1 | https://arxiv.org/abs/1704.05194 |
各种细节
1 | 1.LS-PLM是一个分片线性模型,割数m控制模型的容量。尝试m=6、12、24、36。m=12的测试AUC明显好于m=6,而m=24,36的改善相对较小。 |
Deep & Cross Network
1 | [ADKDD 2017]Deep & Cross Network for Ad Click Predictions |
论文链接
1 | https://arxiv.org/abs/1708.05123 |
数据集
1 | Criteo Display Ads2 |
各种细节
1 | 1.batch size is set at 512 |
最佳超参数选择
1 | The optimal hyperparameter seings were 2 deep layers of size 1024 and 6 cross layers for |
注:本文对于超参数有详细的实验,具体请参考原文。所列不全。
Attentional Factorization Machine(AFM)
1 | [IJCAI 2017]Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks |
论文链接
1 | https://www.ijcai.org/proceedings/2017/0435.pdf |
一个对该论文的实现
1 | https://github.com/hexiangnan/attentional_factorization_machine |
数据集
1 | Frappe :被用于情境感知推荐,它包含了96,203个不同情境下的用户应用日志。该数据集包含96,203个用户在不同情境下的使用日志。 |
各种细节
1 | 1.对于AFM,Frappe和MovieLens上的最佳滤波率是0.2和0.5 |
to use
代码
1 | AFM.py |
数据
1 | ml-tag |
训练
1 | # step into the code folder |
注:该复现非原作者
参考文章
1 | https://zhuanlan.zhihu.com/p/110375283 |
Neural Factorization Machine
1 | [SIGIR 2017]Neural Factorization Machines for Sparse Predictive Analytics |
论文链接
1 | https://arxiv.org/pdf/1708.05027.pdf |
论文开源代码
1 | https://github.com/hexiangnan/neural_factorization_machine |
数据集
1 | Frappe:包含96,203个应用程序在不同背景下的用户使用日志。 |
各种细节
1 | 1.学习率都在[0.005, 0.01, 0.02, 0.05],在[0, 0.1, 0.2, ..., 0.9]的辍学率 |
to use
1 | python NeuralFM.py --dataset frappe --hidden_factor 64 --layers [64] --keep_prob [0.8,0.5] --loss_type square_loss --activation relu --pretrain 0 --optimizer AdagradOptimizer --lr 0.05 --batch_norm 1 --verbose 1 --early_stop 1 --epoch 200 |
数据集
1 | We use the same input format as the LibFM toolkit (http://www.libfm.org/). |
xDeepFM
1 | [KDD 2018]xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems |
论文链接
1 | https://arxiv.org/pdf/1803.05170.pdf |
源代码
1 | https://github.com/Leavingseason/xDeepFM |
数据集
1 | Criteo:一个著名的行业基准数据集用于开发预测广告点击率的模型,并且可以公开访问 |
各种细节
1 | 1.学习率被设置为0.001 |
Deep Interest Network
1 | [KDD 2018]Deep Interest Network for Click-Through Rate Prediction |
论文链接
1 | https://arxiv.org/pdf/1706.06978.pdf |
源代码
1 | https://github.com/zhougr1993/DeepInterestNetwork |
数据集
1 | Amazon |
各种细节
1 | 1.学习率从1开始,衰减率设置为0.1。 |
注:DIN这篇论文中,代码质量较差,不建议使用该版本,在后期DIEN论文中会进行调整。
Deep Interest Evolution Network
1 | [AAAI 2019]Deep Interest Evolution Network for Click-Through Rate Prediction |
论文链接
1 | https://arxiv.org/pdf/1809.03672.pdf |
源代码
1 | https://github.com/mouna99/dien |
数据集
1 | public and industrial datasets |
to use
准备数据
法一
从亚马逊网站获取数据,并使用脚本进行处理
1 | sh prepare_data.sh |
法二,推荐
解压后直接使用
1 | tar -jxvf data.tar.gz |
训练模型
1 | python train.py train [model name] |
AutoInt
1 | [CIKM 2019]AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks |
论文链接
1 | https://arxiv.org/abs/1810.11921 |
数据集
1 | Criteo:一个CTR预测的基准数据集,它有4500万用户的点击广告的记录。 |
各种细节
1 | 1.在{0.1 - 0.9}范围内为MovieLens-1M数据集选择辍学率 |
ONN
1 | [arxiv 2019]Operation-aware Neural Networks for User Response Prediction |
论文链接
1 | https://arxiv.org/pdf/1904.12579.pdf |
数据集
1 | Criteo |
各种细节
1 | 1.非线性隐藏层的数量对于Criteo数据集,隐藏的大小被设置为[400, 400, 400],而非线性隐藏层的数量被设置为3。 |
FiBiNET
1 | [RecSys 2019]FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction |
论文链接
1 | https://arxiv.org/pdf/1905.09433.pdf |
数据集
1 | Criteo |
细节
1 | 对于嵌入层,Criteo数据集的嵌入层维度被设置为10,Avazu数据集的嵌入层维度被设置为50。 |
IFM
1 | [IJCAI 2019]An Input-aware Factorization Machine for Sparse Prediction |
论文链接
1 | https://www.ijcai.org/Proceedings/2019/0203.pdf |
源代码链接
1 | https://github.com/gulyfish/Input-aware-Factorization-Machine |
数据集
1 | Frappe |
各种细节
1 | 1.学习率:0.01 |
注:本文进行了详细的超参数实验
DCN V2
1 | [arxiv 2020]DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems |
论文链接
1 | https://arxiv.org/abs/2008.13535 |
数据集
1 | Criteo |
各种细节
1 | 1. learning rate was tuned from 10−4 to 10−1 ,再到10-4到5×10-4 |
DIFM
1 | [IJCAI 2020]A Dual Input-aware Factorization Machine for CTR Prediction |
论文链接
1 | https://www.ijcai.org/Proceedings/2020/0434.pdf |
数据集
1 | Avazu |
各种细节
1 | 1.所有模型的学习都是通过使用Adam(学习率:0.001) |
AFN
1 | [AAAI 2020]Adaptive Factorization Network: Learning Adaptive-Order Feature Interactions |
论文链接
1 | https://arxiv.org/pdf/1909.03276.pdf |
源代码
1 | https://github.com/WeiyuCheng/AFN-AAAI-20 |
数据集
1 | Criteo |
各种细节
1 | 1.超参数Number of logarithmic neurons,Depth of hidden layers,Number of neurons in hidden layers |
to use
1 | 数据集 |
pytorch统一接口
链接
1 | https://github.com/shenweichen/DeepCTR-Torch |
统一视角
DeepCTR通过对现有的基于深度学习的点击率预测模型的结构进行抽象总结,在设计过程中采用模块化的思路,各个模块自身具有高复用性,各个模块之间互相独立。 基于深度学习的点击率预测模型按模型内部组件的功能可以划分成以下4个模块:输入模块,嵌入模块,特征提取模块,预测输出模块。