| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 推荐系统-推荐模型总结 -> 正文阅读 |
|
[人工智能]推荐系统-推荐模型总结 |
推荐模型总结基础推荐系统一般包含哪几个环节工业推荐系统一般包含四个环节,分别是召回、粗排、精排和重排。
参考文章 CTR预估模型的数据特点CTR预估模型数据特点:
CTR预估重点在于学习组合特征。注意,组合特征包括二阶、三阶甚至更高阶的,阶数越高越复杂,越不容易学习。Google的论文研究得出结论:高阶和低阶的组合特征都非常重要,同时学习到这两种组合特征的性能要比只考虑其中一种的性能要好。 那么关键问题转化成:如何高效的提取这些组合特征。一种办法就是引入领域知识人工进行特征工程。这样做的弊端是高阶组合特征非常难提取,会耗费极大的人力。而且,有些组合特征是隐藏在数据中的,即使是专家也不一定能提取出来,比如著名的“尿布与啤酒”问题。 在DeepFM提出之前,已有LR,FM,FFM,FNN,PNN(以及三种变体:IPNN,OPNN,PNN*),Wide&Deep模型,这些模型在CTR或者是推荐系统中被广泛使用。 参考文章 召回介绍下双塔模型1. 双塔模型有着广泛的应用场景 双塔结构在推荐领域里已经是个常规方法了,在召回和粗排环节的模型选型中,被广泛采用。其实,不仅仅是在推荐领域,在其它领域,双塔结构也已经被越来越多得用起来了。比如,在当代搜索引擎的召回环节,除了常见的经典倒排索引来对Query和Document进行文本字面匹配外,经常也会增加一路基于Bert模型的双塔结构,将用户查询Query和搜索文档,各自通过一个塔形结构来打Embedding,以此增加Query和Document的深层语义匹配能力;再比如,在自然语言处理的QA领域,一般也会在第一步召回环节,上一个基于Bert模型的双塔结构,分别将问题Question和可能包含正确答案的Passage,通过双塔结构映射到同一个语义空间,并分别把Question和Passage打出各自的Embedding。 2. 双塔模型结构和离线训练过程 双塔模型结构非常简单,可对海量候选item进行召回: 1)user和item特征分别单独输入DNN,得到user embedding与item embedding; 虽说上图两个塔的DNN模块介绍说的是MLP结构,但是理论上这里可以替换成任意你想用的模型结构,比如Transformer或者其它模型,最简单的应该是FM模型,如果这里用FM模型做召回或者粗排,等于把上图的DNN模块替换成了对特征Embedding进行“Sum”求和操作,貌似应该是极简的双塔模型了。所以说,双塔结构不是一种具体的模型结构,而是一种抽象的模型框架。 3. 双塔模型在线应用 一般在推荐的模型召回环节应用双塔结构的时候,分为离线训练和在线应用两个环节。上面基本已描述了离线训练过程,至于在线应用,一般是这么用的:
以上回答来自知乎。关于双塔模型的更多思考,可参考SENet双塔模型:在推荐领域召回粗排的应用及其它这篇文章。 4. 双塔模型的优势 双塔模型的优势,总结如下:
说来说去,主要就是实时性好,cos的表达是有限的,很难提取交叉特征,所以双塔还是比较适用于召回场景。 参考文章
双塔输出用内积还是余弦相似度1. 内积和余弦相似度的区别 余弦相似度计算公式: 可以看出,余弦相似度实际上就是归一化的内积。那么,归一化的意思在哪里?如果不归一化的话,这个内积的意义又是什么呢? 其实,两者表达的意思不一样,不能一概而论。余弦举例只考虑了角度差(衡量两个向量在方向上的相似性,对绝对的数值不敏感),而内积综合考虑了角度差和长度差。比如,有两个向量 A(1,1,0) 和 B(0,1,1),他们的余弦相似度是 1 2 2 = 1 2 \frac{1}{\sqrt{2}\sqrt{2}} = \frac{1}{2} 2?2?1?=21?。余弦相似度不考虑向量的长度,所以 A(1,1,0) 和 C(0,3,3) 的相似程度与A和B的相同。 但是,如果向量的长度本身对相似有真实的影响时,推荐使用内积。比如,对商品的几个属性打分,1表示不确定,依次到,5表示很确定,那么 A(1,1,1)、B(4,4,4)、C(5,5,5) 三个商品,根据内积,B 与 C 更相似。但是,余弦相似度在这里就无法区分 A、B、C的相似性。 2. 用内积还是余弦相似度 在得到query和item各自的embedding之后,到底是采用内积,还是采用余弦相似度?实验表明,采用余弦相似度效果更好且易于训练。还加了温度参数,如下所示。加上温度参数可以锐化结果。文中实验
τ
\tau
τ 的范围在[0.05,0.1],那么
1
τ
\frac{1}{\tau}
τ1? 的范围在[10,20]。 双塔模型一般怎么做特征用户塔输入包括user相关特征(用户id、用户基本信息、群体统计属性以及行为过的Item序列等)和Context上下文(如地理位置)特征。物品塔输入为Item相关特征(物品id、Item基本信息、属性信息等)。对id类特征要生成Embedding。 参考文章 双塔模型为什么不直接把两个塔合起来输入一个DNN1)首先,采用双塔可以减少计算量 对 Item 和 User 两个tower直接计算内积即可拿到最终的目标。Item和User各自的embedding可以通过多层NN得到,这部分可以离线计算好,线上只需要计算最终一次向量内积,计算量就很低,在召回阶段还能使用hnsw、ivf-pq等ANN算法。比如,如果离线把user和item的向量提前计算好放在内存中(占用 O ( 2 n ) O(2n) O(2n) 的空间,实际上一般只存储item的向量,user的向量会实时进行计算),线上直接把对应的向量拿出来进行内积操作即可,极大地减少了计算量。 为什么不采用单塔呢?如果是一个单塔的网络,在训练时,原始的item和user的特征在网络中必然要进行交叉,最后得到输出,从而导致网络的中间层表示的是user和item交叉过后的向量,如果要存储这个向量,空间就变成了 O ( n 2 ) O(n^2) O(n2) ,或者说就只能线上再进行实时计算了。 2)双塔是指对bias信息用单独的tower建模,好处是更灵活更好的对bias建模 以上解答参考知乎~ 参考文章 排序介绍下Wide&Deep1. W&D概述 一句话概括W&D:由浅层(或单层)的Wide部分神经网络和深层的Deep部分多层神经网络组成,输出层采用softmax或logistics regression综合Wide和Deep部分的输出。
加入wide层学习浅层特征的动机: 1.1 Wide层 对于wide部分训练时候使用的优化器是带L1正则的FTRL算法(Follow-the-regularized-leader),FTRL可以理解为稀疏性很好,精度又不错的随机梯度下降方法。W&D模型采用L1-FTRL是想让Wide部分变得更加的稀疏,即Wide部分的大部分参数都为0,这就大大压缩了模型权重及特征向量的维度。通过这样Wide部分模型训练完之后留下来的特征都是非常重要的,那么模型的“记忆能力”就可以理解为发现"直接的",“暴力的”,“显然的”关联规则的能力。 1.2 Deep层 Deep部分是一个DNN模型,输入的特征主要分为两大类,一类是数值特征(可直接输入DNN),一类是类别特征(需要经过Embedding之后才能输入到DNN中)。Deep部分可以减少人工的特征参与,对历史上没出现过的情况有更好的泛化能力。对于Deep部分的DNN模型作者使用了深度学习常用的优化器AdaGrad,这也是为了使得模型可以得到更精确的解。 联合训练的公示如下,wide_n_deep模型的组合依赖于其输出的对数几率的加权作为预测。随后这一值被输入到一个一般的逻辑损失函数中联合训练。联合训练和拼装不同,其是在训练过程中同时优化wide和deep模型及总和的权重,而拼装是将模型分别训练,结果是在最后进行组合。 Wide部分输入的是两个id类特征的乘积,id特征为User Installed App 和 Impression App,不难猜测Google的工程师使用这个组合特征的意图,是想发现当前曝光app和用户安装app的关联关系,以此来直接影响最终的得分。两个id类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的multihot特征向量,变得更加稀疏。正因如此,wide部分的权重数量其实是海量的。为了不把数量如此之巨的权重都搬到线上进行model serving,采用FTRL过滤掉那些稀疏特征无疑是非常好的工程经验。 而Deep部分的输入,要么是Age,订单次数,评分这些数值类特征,要么是已经降维并稠密化的Embedding向量。所以Deep部分不存在严重的特征稀疏问题。因此wide部分记住的是历史数据中那些常见、高频的模式,是推荐系统中的“红海”。 实际上,Wide侧没有发现新的模式,只是学习到这些模式之间的权重,做一些模式的筛选。正因为Wide侧不能发现新模式,因此我们需要根据人工经验、业务背景,将我们认为有价值的、显而易见的特征及特征组合,喂入Wide侧。而deep侧通过embedding的方式将categorical/id特征映射成稠密向量,让DNN学习到这些特征之间的深层交叉,以增强扩展能力。 参考文章
介绍下DeepFM1 模型演进历史 DeepFM借鉴了Google的wide & deep的做法,其本质是
1.1 线性模型 最开始CTR或者是推荐系统领域,一些线性模型取得了不错的效果。比如:LR,FTRL。线性模型有个致命的缺点:无法提取高阶的组合特征。所以常用的做法是人为的加入pairwise feature interactions。即使是这样:对于那些出现很少或者没有出现的组合特征以及高阶组合特征依旧无法提取。 LR最大的缺点就是无法组合特征,依赖于人工的特征组合,这也直接使得它表达能力受限,基本上只能处理线性可分或近似线性可分的问题。 1.2 FM模型 线性模型差强人意,直接导致了FM模型应运而生(在Kaggle上打比赛提出来的,取得了第一名的成绩)。FM通过隐向量latent vector做内积来表示组合特征,从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度,一般也就只考虑到2阶交叉特征。 后面又进行了改进,提出了FFM,增加了Field的概念。关于FM和FFM模型的原理剖析可参考FM、FFM、DeepFM学习笔记这篇文章。 1.3 遇上DL 随着DNN在图像、语音、NLP等领域取得突破,人们见见意识到DNN在特征表示上的天然优势。相继提出了使用CNN或RNN来做CTR预估的模型。但是,CNN模型的缺点是:偏向于学习相邻特征的组合特征。RNN模型的缺点是:比较适用于有序列(时序)关系的数据。 FNN (Factorization-machine supported Neural Network) 的提出,应该算是一次非常不错的尝试:先使用预先训练好的FM,得到隐向量,然后作为DNN的输入来训练模型。缺点在于:受限于FM预训练的效果。 随后提出了PNN (Product-based Neural Network),PNN为了捕获高阶组合特征,在embedding layer和first hidden layer之间增加了一个product layer。根据product layer使用内积、外积、混合分别衍生出IPNN, OPNN, PNN三种类型。 无论是FNN还是PNN,他们都有一个绕不过去的缺点:对于低阶的组合特征,学习到的比较少。而前面我们说过,低阶特征对于CTR也是非常重要的。 Google意识到了这个问题,为了同时学习低阶和高阶组合特征,提出了Wide&Deep模型。它混合了一个线性模型(Wide part)和Deep模型(Deep part)。这两部分模型需要不同的输入,而Wide part部分的输入,依旧依赖人工特征工程。 但是,这些模型普遍都存在两个问题: DeepFM在Wide&Deep的基础上进行改进,成功解决了这两个问题,并做了一些改进,其优势/优点如下: 2 DeepFM DeepFM架构图: 2.1 FM Component FM部分的输出由两部分组成:一个 Addition Unit,多个 内积单元。 FM架构图: FM Component总结:
需要训练的有两部分:
2.2 Deep Component Deep Component架构图: 由于CTR或推荐系统的数据one-hot之后特别稀疏,如果直接放入到DNN中,参数非常多,我们没有这么多的数据去训练这样一个网络。所以增加了一个Embedding层,用于降低纬度。 这里继续补充下Embedding层,两个特点:
Embedding层的架构图: 其中
e
i
e_i
ei? 是第
i
i
i 个 filed 的 embedding,m 是 filed 数量; 然后
a
(
0
)
a^{(0)}
a(0) 传递给deep part,前馈过程如下: 其中 l l l 是层深度, σ \sigma σ 是激活函数, a ( l ) a^{(l)} a(l), W ( l ) W^{(l)} W(l) , b ( l ) b^{(l)} b(l) 分别是第 l l l 层的输出,权重和偏置。 然后得到dense real-value 特征矢量,最后被送到sigmoid函数做CTR预测: 好处:
3. 对比其他模型 模型图: FNN使用预训练的FM来初始化DNN,然后只有Deep部分,不能学习低阶组合特征。 FNN缺点:
3.2 PNN Model PNN:为了捕获高阶特征。PNN在第一个隐藏层和embedding层之间,增加了一个product layer。 根据product的不同,衍生出三种PNN:IPNN,OPNN,PNN 分别对应内积、外积、两者混合。 作者为了加快计算,采用近似计算的方法来计算内积和外积。内积:忽略一些神经元。外积:把m*k维的vector转换成k维度的vector。由于外积丢失了较多信息,所以一般没有内积稳定。 但是内积的计算复杂度依旧非常高,原因是:product layer的输出是要和第一个隐藏层进行全连接的。 PNN缺点:
3.3 Wide&Deep Wide & Deep设计的初衷是想同时学习低阶和高阶组合特征,但是wide部分需要领域知识进行特征工程。 Wide部分可以用LR来替换,这样的话就和DeepFM差不多了。 但是DeepFM共享feature embedding 这个特性使得在反向传播的时候,模型学习feature embedding,而后又会在前向传播的时候影响低阶和高阶特征的学习,这使得学习更加的准确。 Wide&Deep缺点:
事实上,论文已经明确指出了DeepFM相对于 Wide & Deep 的创新点: 3.4 DeepFM 优点:
总结就是:
以上模型对比图如下:
介绍下DIN1. 背景介绍 深度兴趣网络(Deep Interest Network)的应用场景是阿里巴巴的电商广告推荐。用户场景很简单,就是在一个电商网站或APP中给用户推荐广告,当然对于阿里妈妈来说,广告也是商品,所以这篇文章的广告场景其实也是一个经典的推荐场景。 既然要推荐,我们当然需要利用用户的历史数据了,对于一个电商来说,历史数据当然就是点击,添加购物车,下单这些行为了。论文中给了一位用户的行为序列。 如果按照之前的做法,我们会一碗水端平的考虑所有行为记录的影响,对应到模型中就是我们会用一个average pooling层把用户交互过的所有商品的embedding vector平均一下形成这个用户的user vector,机灵一点的工程师最多加一个time decay,让最近的行为产生的影响大一些,那就是在做average pooling的时候按时间调整一下权重。 但是我们仔细想一想我们自己的购买过程,其实每个用户的兴趣都是多样的,女生喜欢买衣服包包,也喜欢化妆品,甚至还为自己男朋友挑选过球衣球鞋,那么你在买大衣的时候,真的要把给男朋友买球鞋的偏好考虑进来么?具体到本文的例子中,在预测大衣的CTR这件事情上,用户浏览过杯子,跟用户浏览过另一件大衣这两个行为的重要程度是一样的吗?显然,肯定是浏览过另一件大衣这件事的参考价值高啊。 2.1 Base Model 介绍 DIN 之前,先了解一下 Base Model,模型结构如下: Base 模型的做法是将用户点击的商品序列,简单的进行 SUM Pooling,然后将聚合得到的 embedding 向量,作为用户的兴趣表示。 这种做法的缺陷也很明显,简单的累加无法突出某些商品的重要性。对于与候选商品具有强关联性的 item,应该给予更大的权重,让其在提取用户兴趣时发挥更大的作用。 2. DIN Model 2.1 DIN注意力机制体现在哪里 注意力机制顾名思义,就是模型在预测的时候,对用户不同行为的注意力是不一样的,“相关”的行为历史看重一些,“不相关”的历史甚至可以忽略。那么这样的思想反应到模型中也是直观的。 因为加入了注意力机制, V u V_u Vu? 从过去 V i V_i Vi? 的加和变成了 V i V_i Vi? 的加权和, V i V_i Vi? 的权重 w i w_i wi? 就由 V i V_i Vi? 与 V a V_a Va? 的关系决定,也就是上式中的 g ( V i , V a ) g(V_i,V_a) g(Vi?,Va?) ,不负责任的说,这个 g ( V i , V a ) g(V_i,V_a) g(Vi?,Va?) 的加入就是本文70%的价值所在。 那么
g
(
V
i
,
V
a
)
g(V_i,V_a)
g(Vi?,Va?) 这个函数到底采用什么比较好呢?看完下面的架构图自然就清楚了。 传统的Attention机制中,给定两个item embedding,比如u和v,通常是直接做点积uv或者uWv,其中W是一个|u|x|v|的权重矩阵,但这篇paper中阿里显然做了更进一步的改进,着重看上图右上角的activation unit,首先是把u和v以及u v的element wise差值向量合并起来作为输入,然后喂给全连接层,最后得出权重,这样的方法显然损失的信息更少。但如果你自己想方便的引入attention机制的话,不妨先从点积的方法做起尝试一下,因为这样连训练都不用训练。 再稍微留意一下这个架构图中的红线,你会发现每个ad会有 good_id, shop_id 两层属性,shop_id只跟用户历史中的shop_id序列发生作用,good_id只跟用户的good_id序列发生作用,这样做的原因也是显而易见的。 DIN注意力机制小结 DIN详细的模型结构如下: 计算方式小结:
用户点击的多个商品,分别按照以上方式与候选商品计算权重,然后加权再取 SUM Pooling 即可。这样就突出了重要商品发挥的作用,可提取到更精确的用户兴趣表示。 DIN 最大的创新点就是引入了 Activation Unit,这也是与 Base Model 唯一不同的地方。 好了,到这里为止我们基本讲完了这篇文章的重点部分,如果说上面的部分是文70%的价值所在,那么余下30%应该还有这么几点:
2.2 Data Adaptive Activation Function f(s) 的计算是利用 p(s) 的值对 s 进行平滑,第二部分需要乘上一个权重 a,该权重随模型学习得到。 2.3 mini-batch aware regularization
所以引入该方法,只对每一个 mini-batch 中不为 0 的参数进行梯度更新,以此降低训练开销。 2.4 GAUC 优点:
缺点:
参考文章
介绍下DIEN1. DIEN提出的动机 DIN重点是针对某个候选广告,用attention对用户行为序列进行权重计算,得到用户针对这个候选广告的兴趣向量,然后去做点击率预估。 DIN能够捕捉到用户多样的兴趣,但是缺点就是用户行为序列中的条目是被等价对待的,并没有考虑到用户兴趣的漂移。 比如,随着风潮的变化,用户喜欢的衣服风格可能发生变化;类似的,用户在某个时间段会关注一类书籍,但是过了这个时间段,可能会关注其他类型的书籍,或者其他商品比如衣服。 综上,用户的兴趣有如下特点:
所以,针对上述问题,DIEN对用户的行为序列进行了建模,从而能捕捉到用户兴趣的漂移。 2.1 BaseModel 在介绍模型的改进之前,再来回顾一下基础模型。经典的CTR预估模型是Embedding + MLP。 对于阿里的广告点击率预估问题来说,有四大类特征:
大部分是离散特征,可以用one-hot进行编码表达。而对于商品来说,因为商品数目太多,使用one-hot不现实,所以使用密集编码(即稠密向量),即给每个商品一个向量编码,然后对于用户行为序列中的每一个商品,取得对应的编码,将所有的商品向量编码拼接起来,得到行为序列的编码。 得到的Embedding之后,就可以将数据输入给MLP多层神经网络进行处理了。使用的损失函数为: DIEN,全称是Deep Interest Evolution Network,即用户兴趣进化网络。这个算法中用两层架构来抽取和使用用户兴趣特征:
2.2.1 兴趣抽取层 使用LSTM的变种GRU对用户行为序列进行建模。GRU可以达到和LSTM类似的结果但速度更快。 但是如果只用上面BaseModel的损失函数的话,是无法将GRU训练好的。因为最后的target只是针对一种兴趣的,所以GRU建模的序列上得不到足够的监督信息。为了解决这个问题,提出了一种辅助损失函数用来帮助训练GRU。 方法就是使用行为序列中的下一个行为来作为当前步隐含状态的监督信息,这是正例;另外还采样了一个其他的行为来作为负例。而行为都是embedding好的,所以和普通的GRU训练不同,在这里我们将行为embedding和隐含状态做内积然后再计算损失函数,计算公式如下: 有了这个辅助损失后,就可以较好的用GRU建模行为序列。 最后的损失函数则是 L = L t a r g e t + α ? L a u x L = L_{target} + \alpha * L_{aux} L=Ltarget?+α?Laux?。 2.2.2 兴趣进化层 上面使用的GRU的隐含信息可以组成一个兴趣序列,而根据预测目标的不同,我们需要从兴趣序列中拿到不同的信息,这时候,attention机制就粉墨登场了。 Attention是在目标和GRU的每一个隐含状态间进行计算。计算公式如下,即在目标和隐含状态间用矩阵去做乘法,然后再做归一化。
3 算法架构 有了上面的两层,就得到了整个架构: DIEN对用户行为序列进行建模,捕捉了用户兴趣进化信息,从而能提高CTR。技术上,使用GRU对序列建模,使用辅助损失来对GRU更好的训练,类似DIN,使用attention来对序列进行筛选,只对目标相关的兴趣进行序列建模,总体上,提升CTR达到20.7%,相当大的impact了。 参考文章 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 15:48:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |