深度学习利用篇 - 举荐零碎[12]:经典模型 -DeepFM 模型、DSSM 模型召回排序策略以及和其余模型比照
1.DeepFM 模型
1.1. 模型简介
CTR 预估是目前举荐零碎的核心技术,其指标是预估用户点击举荐内容的概率。DeepFM 模型蕴含 FM 和 DNN 两局部,FM 模型能够抽取 low-order(低阶)特色,DNN 能够抽取 high-order(高阶)特色。低阶特色能够了解为线性的特色组合,高阶特色,能够了解为通过屡次线性 - 非线性组合操作之后造成的特色,为高度形象特色。无需 Wide&Deep 模型人工特色工程。因为输出仅为原始特色,而且 FM 和 DNN 共享输出向量特色,DeepFM 模型训练速度很快。
注解:Wide&Deep 是一种交融浅层(wide)模型和深层(deep)模型进行联结训练的框架,综合利用浅层模型的记忆能力和深层模型的泛化能力,实现单模型对举荐零碎准确性和扩展性的兼顾。
该模型的 Paddle 实现请参考链接:PaddleRec 版本
1.2.DeepFM 模型构造
为了同时利用 low-order 和 high-order 特色,DeepFM 蕴含 FM 和 DNN 两局部,两局部共享输出特色。对于特色 i,标量 wi 是其 1 阶特色的权重,该特色和其余特色的交互影响用隐向量 Vi 来示意。Vi 输出到 FM 模型取得特色的 2 阶示意,输出到 DNN 模型失去 high-order 高阶特色。
$$
\hat{y} = sigmoid(y_{FM} + y_{DNN})
$$
DeepFM 模型构造如下图所示,实现对稠密特色的嵌入后,由 FM 层和 DNN 层共享输出向量,经前向反馈后输入。
为什么应用 FM 和 DNN 进行联合?
- 在排序模型刚起步的年代,FM 很好地解决了 LR 须要大规模人工特色穿插的痛点,引入任意特色的二阶特色组合,并通过向量内积求特色组合权重的办法大大提高了模型的泛化能力。
- 规范 FM 的缺点也恰好是只能做二阶特色穿插。
所以,将 FM 与 DNN 联合能够帮忙咱们捕获特色之间更简单的非线性关系。
为什么不应用 FM 和 RNN 进行联合?
- 如果一个工作须要解决 序列 信息,即本次输出失去的输入后果,不仅和本次输出相干,还和之前的输出相干,那么应用 RNN 循环神经网络能够很好地利用到这样的 序列 信息
- 在预估点击率时,咱们会假如用户每次是否点击的事件是独立的,不须要思考 序列 信息,因而 RNN 于 FM 联合来预估点击率并不适合。还是应用 DNN 来模拟出特色之间的更简单的非线性关系更能帮忙到 FM。
1.3.FM
FM(Factorization Machines,因子合成机)最早由 Steffen Rendle 于 2010 年在 ICDM 上提出,它是一种通用的预测办法,在即便数据十分稠密的状况下,仍然能预计出牢靠的参数进行预测。与传统的简略线性模型不同的是,因子合成机思考了特色间的穿插,对所有嵌套变量交互进行建模(相似于 SVM 中的核函数),因而在举荐零碎和计算广告畛域关注的点击率 CTR(click-through rate)和转化率 CVR(conversion rate)两项指标上有着良好的体现。
为什么应用 FM?
- 特色组合是许多机器学习建模过程中遇到的问题,如果对特色间接建模,很有可能疏忽掉特色与特色之间的关联信息,一次能够通过构建新的穿插特色这一特色组合形式进步模型的成果。FM 能够失去特色之间的关联信息。
- 高维的稠密矩阵是理论工程中常见的问题,并且间接导致计算量过大,特色权值更新迟缓。试想一个 10000100 的表,每一列都有 8 中元素,通过 one-hot 编码之后,会产生一个 10000800 的表。
而 FM 的劣势就在于对这两方面问题的解决。首先是特色组合,通过两两特色组合,引入穿插项特色(二阶特色),进步模型得分;其次是高维劫难,通过引入隐向量(对参数矩阵进行合成),实现特征参数的预计。
FM 模型不单能够建模 1 阶特色,还能够通过隐向量点积的办法高效的取得 2 阶特色示意,即便穿插特色在数据集中十分稠密甚至是素来没呈现过。这也是 FM 的劣势所在。
$$
y_{FM}= <w,x> + \sum_{j_1=1}^{d}\sum_{j_2=j_1+1}^{d}<V_i,V_j>x_{j_1}\cdot x_{j_2}
$$
独自的 FM 层构造如下图所示:
1.4.DNN
该局部和 Wide&Deep 模型相似,是简略的前馈网络。在输出特色局部,因为原始特征向量多是高纬度, 高度稠密,间断和类别混合的分域特色,因而将原始的稠密示意特色映射为浓密的特征向量。
假如子网络的输入层为:
$$
a^{(0)}=[e1,e2,e3,…en]
$$
DNN 网络第 l 层示意为:
$$
a^{(l+1)}=\sigma{(W^{(l)}a^{(l)}+b^{(l)})}
$$
再假如有 H 个暗藏层,DNN 局部的预测输入可示意为:
$$
y_{DNN}= \sigma{(W^{|H|+1}\cdot a^H + b^{|H|+1})}
$$
DNN 深度神经网络层构造如下图所示:
1.5.Loss 及 Auc 计算
DeepFM 模型的损失函数抉择 Binary_Cross_Entropy(二值穿插熵)函数
$$
H_p(q)=-\frac{1}{N}\sum_{i=1}^Ny_i\cdot log(p(y_i))+(1-y_i) \cdot log(1-p(y_i))
$$
对于公式的了解,y 是样本点,p(y)是该样本为正样本的概率,log(p(y))可了解为对数概率。
Auc 是 Area Under Curve 的首字母缩写,这里的 Curve 指的就是 ROC 曲线,AUC 就是 ROC 曲线上面的面积, 作为模型评估指标,他能够用来评估二分类模型。其中,ROC 曲线全称为受试者工作特色曲线(receiver operating characteristic curve),它是依据一系列不同的二分类形式(分界值或决定阈),以真阳性率(敏感性)为纵坐标,假阳性率(1- 特异性)为横坐标绘制的曲线。
可应用 paddle.metric.Auc()进行调用。
可参考已有的材料:机器学习罕用评估指标
1.6. 与其余模型的比照
如表 1 所示,对于是否须要预训练,高阶特色,低阶特色和是否须要特色工程的比拟上,列出了 DeepFM 和其余几种模型的比照。DeepFM 体现更优。
如表 2 所示,不同模型在 Company* 数据集和 Criteo 数据集上对点击率 CTR 进行预估的性能体现。DeepFM 在各个指标上体现均强于其余模型。
- 参考文献
[[IJCAI 2017]Guo, Huifeng,Tang, Ruiming,Ye, Yunming,Li, Zhenguo,He, Xiuqiang. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction](https://arxiv.org/pdf/1703.04247.pdf)
2.DSSM
以搜索引擎和搜寻广告为例,最重要的也最难解决的问题是语义类似度,这里次要体现在两个方面:召回和排序。
在召回时,传统的文本相似性如 BM25,无奈无效发现语义类 query-Doc 后果对,如 ” 从北京到上海的机票 ” 与 ” 携程网 ” 的相似性、” 快递软件 ” 与 ” 菜鸟裹裹 ” 的相似性。
在排序时,一些轻微的语言变动往往带来微小的语义变动,如 ” 小宝宝生病怎么办 ” 和 ” 狗宝宝生病怎么办 ”、” 深度学习 ” 和 ” 学习深度 ”。
DSSM(Deep Structured Semantic Models)为计算语义类似度提供了一种思路。
该模型的 Paddle 实现请参考链接:PaddleRec 版本
2.1DSSM 模型构造
DSSM(Deep Structured Semantic Models)的原理很简略,通过搜索引擎里 Query 和 Title 的海量的点击曝光日志,用 DNN 把 Query 和 Title 表白为低纬语义向量,并通过 cosine 间隔来计算两个语义向量的间隔,最终训练出语义类似度模型。该模型既能够用来预测两个句子的语义类似度,又能够取得某句子的低纬语义向量表白。
DSSM 从下往上能够分为三层构造:输出层、表示层、匹配层
2.1.1 输出层
输出层做的事件是把句子映射到一个向量空间里并输出到 DNN 中,这里英文和中文的解决形式有很大的不同。
英文
英文的输出层解决形式是通过 word hashing。举个例子,假如用 letter-trigams 来切分单词(3 个字母为一组,# 示意开始和结束符),boy 这个单词会被切为 #-b-o, b-o-y, o-y-#
![word hashing](https://raw.githubusercontent.com/w5688414/paddleImage/main/dssm_img/word_hashing.png)
这样做的益处有两个:首先是压缩空间,50 万个词的 one-hot 向量空间能够通过 letter-trigram 压缩为一个 3 万维的向量空间。其次是加强范化能力,三个字母的表白往往能代表英文中的前缀和后缀,而前缀后缀往往具备通用的语义。
这里之所以用 3 个字母的切分粒度,是综合思考了向量空间和单词抵触:
Letter-Bigram | Letter-Trigram | |||
---|---|---|---|---|
word Size | Token Size | Collision | Token Size | Collision |
40k | 1107 | 18 | 10306 | 2 |
500k | 1607 | 1192 | 30621 | 22 |
如上表,以 50 万个单词的词库为例,2 个字母的切分粒度的单词抵触为 1192(抵触的定义:至多有两个单词的 letter-bigram 向量完全相同),而 3 个字母的单词抵触降为 22 成果很好,且转化后的向量空间 3 万维不是很大,综合思考抉择 3 个字母的切分粒度。
中文
中文的输出层解决形式与英文有很大不同,首先中文分词是个让所有 NLP 从业者头疼的事件,即使业界号称能做到 95% 左右的分词准确性,但分词后果极为不可控,往往会在分词阶段引入误差。所以这里咱们不分词,而是仿照英文的解决形式,对应到中文的最小粒度就是单字了。
因为罕用的单字为 1.5 万左右,而罕用的双字大概到百万级别了,所以这里出于向量空间的思考,采纳字向量(one-hot)作为输出,向量空间约为 1.5 万维。
2.1.2 表示层
DSSM 的表示层采纳 BOW(Bag of words)的形式,相当于把字向量的地位信息摈弃了,整个句子里的词都放在一个袋子里了,不分先后顺序。
紧接着是一个含有多个隐层的 DNN,如下图所示:
用 $W_{i}$ 示意第 i 层的权值矩阵,$b_{i}$ 示意第 i 层的偏置项。则第一隐层向量 l2(300 维),第 二个隐层向量 l3(300 维),输入向量 y(128 维), 用数学公式能够别离示意为:
$$l_{1}=W_{1}x$$
$$l_{i}=f(W_{i}l_{i-1}+b_{i}) ,i=2,…,N-1$$
$$y=f(W_{N}l_{N-1}+b_{N})$$
用 tanh 作为隐层和输入层的激活函数:
$$f(x)=\frac{1-e^{-2x}}{1+e^{-2x}}$$
最终输入一个 128 维的低纬语义向量。
2.1.3 匹配层
Query 和 Doc 的语义相似性能够用这两个语义向量(128 维) 的 cosine 间隔来示意:
$$R(Q,D)=cosine(y_{Q},y_{D})=\frac{y_{Q}^Ty_{D}}{||y_{Q}|| ||y_{D}||}$$
通过 softmax 函数能够把 Query 与正样本 Doc 的语义相似性转化为一个后验概率:
$$P(D^{+}|Q)=\frac{exp(\gamma R(Q,D^{+}))}{\sum_{D^{‘}\in D}exp(\gamma R(Q,D^{‘}))}$$
其中 r 为 softmax 的平滑因子,D 为 Query 下的正样本,D- 为 Query 下的负样本(采取随机负采样),D 为 Query 下的整个样本空间。
在训练阶段,通过极大似然预计,咱们最小化损失函数:
$$L(\Lambda)=-log \prod_{(Q,D^{+})}P(D^{+}|Q)$$
残差会在表示层的 DNN 中反向流传,最终通过随机梯度降落(SGD)使模型收敛,失去各网络层的参数 $\{W_{i},b_{i}\}$。
负样本呈现在计算 softmax 中,loss 反向流传只用正样本。
2.1.4 优缺点
- 长处:DSSM 用字向量作为输出既能够缩小切词的依赖,又能够进步模型的泛化能力,因为每个汉字所能表白的语义是能够复用的。另一方面,传统的输出层是用 Embedding 的形式(如 Word2Vec 的词向量)或者主题模型的形式(如 LDA 的主题向量)来间接做词的映射,再把各个词的向量累加或者拼接起来,因为 Word2Vec 和 LDA 都是无监督的训练,这样会给整个模型引入误差,DSSM 采纳对立的有监督训练,不须要在两头过程做无监督模型的映射,因而精准度会比拟高。
- 毛病:上文提到 DSSM 采纳词袋模型(BOW),因而丢失了语序信息和上下文信息。另一方面,DSSM 采纳弱监督、端到端的模型,预测后果不可控。
更多优质内容请关注公重号:汀丶人工智能
- 参考文献
[1]. Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338.