其他博客:笔记1、博客2
神经网络的参数初始化通常采用不包含任何先验信息的随机初始化,而Embedding层的输入极端稀疏化,导致Embedding层收敛缓慢,且Embedding层参数量占绝大部分,进而导致模型收敛受限于Embedding层。
FNN模型解决上述问题的思路:使用FM模型训练好的各特征隐向量初始化Embedding层的参数(引入先验信息)书p79:图3-8及下面第一段话
FNN模型也为Embedding预训练提供了借鉴思路。
FNN把FM的训练结果作为初始化权重,并未对神经网络的结构进行更改。
DeepFM对Wide&Deep的改进在于:用FM替换了Wide部分,加强了浅层网络部分特征组合的能力。书p80:图3-9及下面第一段话
针对Wide&Deep的改进动机,DeepFM和Deep&Cross完全一样,只不过进行特征组合的方法不一样,前者使用FM,后者使用多层Cross网络。
在数学形式上,NFM模型的主要思路是用一个表达能力更强的函数代替FM中的二阶隐向量内积的部分
y ^ F M ( x ) = w 0 + ∑ i = 1 N w i x i + ∑ i = 1 N ∑ j = i + 1 N v i t v j ⋅ x i x j \hat{y}_{FM}(x) = w_0+\sum_{i=1}^N{w_ix_i}+\sum_{i=1}^N\sum_{j=i+1}^N{v_i^tv_j\cdot x_ix_j} y^FM(x)=w0+i=1∑Nwixi+i=1∑Nj=i+1∑Nvitvj⋅xixj
y ^ N F M ( x ) = w 0 + ∑ i = 1 N w i x i + f ( x ) \hat{y}_{NFM}(x)=w_0+\sum_{i=1}^{N}w_ix_i+f(x) y^NFM(x)=w0+i=1∑Nwixi+f(x)
f ( x ) f(x) f(x)的构造工作可以交由某个深度学习网络来完成,并且通过BP来学习。
NFM的这个神经网络架构特点:在Embedding层和多层神经网络之间加入特征交叉池化层。
若把NFM的一阶部分看作一个线性模型,则NFM架构也可以视为Wide&Deep模型的进化。NFM模型对Wide&Deep模型的Deep部分加入了特征交叉池化层,加强了特征交叉。
FNN、DeepFM、NFM都是在经典的多层神经网络的基础上加入有针对性的特征交叉操作,使模型具有更强的非线性表达能力。
特征工程的思路已经穷尽了可能的尝试,提升空间很小。
注意力机制,基于假设——“不同的交叉特征”对于结果的影响程度不同。AFM模型引入注意力机制是通过在特征交叉层和最终的输出层之间加入注意力网络实现的。注意力网络的作用是为每一个交叉特征提供权重(注意力得分)
为了防止交叉特征数据稀疏带来权重参数难以收敛的问题,AFM使用了一个粥两两特征交叉层和池化层之间的注意力网络来生成注意力得分。
应用场景:阿里巴巴电商广告推荐。
计算一个用户u是否点击广告a时,模型的输入特征分为两类:
利用候选商品和历史性为商品之间的相关性计算出一个权重,该权重就代表了“注意力”的强弱。注意力权重+深度学习网络=DIN模型,注意力形式化表达如下:
V u = f ( V a ) = ∑ i = 1 N w i ⋅ V i = ∑ i = 1 N g ( V i , V a ) ⋅ V i V_u = f(V_a)=\sum_{i=1}^{N}{w_i \cdot V_i}=\sum_{i=1}^{N}{g(V_i, V_a)} \cdot V_i Vu=f(Va)=i=1∑Nwi⋅Vi=i=1∑Ng(Vi,Va)⋅Vi
V i V_i Vi是用户的Embedding向量。 V a V_a Va是候选广告商品的Embedding向量。 V i V_i Vi是用户u的第i次行为的Embedding向量。
用户的行为就是浏览商品和店铺,因此行为的Embedding向量就是那次浏览商品或者店铺的Embedding向量。
g ( V i , V a ) g(V_i,V_a) g(Vi,Va)使用一个激活单元activation unit来生成注意力得分,输入层是两个Embedding向量,经过元素减操作后,与原Embedding向量一同连接后形成全链接层的输入,最后通过单神经元输出层生成注意力得分。
注意力机制在数学形式上,只是将过去的平均操作或加和操作 换成了 加权求和或加权平均操作。
序列信息的重要性在于:
”兴趣进化网络“被认为是一种用户兴趣的Embedding方法,最终删除是 h ′ ( T ) h'(T) h′(T)这个用户兴趣向量,DIEN模型创新点在于如何构建”兴趣进化网络“。
兴趣进化网络分为三层,从下至上依次是:
兴趣抽取层的基本结构是GRU网络。相比于传统的序列模型RNN和LSTM,GRU解决了RNN的梯度消失问题。GRU参数更少,收敛速度更快,所以被DIEN序列模型的选择。
经过由GRU组成的兴趣抽取层后,用户的行为向量 b ( t ) b(t) b(t)被进一步抽象化,形成了兴趣状态向量 h ( t ) h(t) h(t)。
u t = σ ( W u i t + U u h t − 1 + b u ) r t = σ ( W r i t + U r h t − 1 + b r ) h ~ t = t a n h ( W h i t + r t ∘ U h h t − 1 + b h ) h t = ( 1 − u t ) ∘ h t − 1 + u t ∘ h ~ t u_t = \sigma(W^u i_t + U^uh_{t-1} + b^u) \\ r_t = \sigma(W^r i_t + U^rh_{t-1} + b^r) \\ \widetilde h_t = tanh(W^hi_t + r_t \circ U^h h_{t-1} + b^h) \\ h_t = (1-u_t) \circ h_{t-1} + u_t \circ \widetilde h_t ut=σ(Wuit+Uuht−1+bu)rt=σ(Writ+Urht−1+br)h t=tanh(Whit+rt∘Uhht−1+bh)ht=(1−ut)∘ht−1+ut∘h t
DIEN兴趣进化层相比兴趣抽取层最大的特点是加入了注意力机制(与DIN一样)。兴趣进化层注意力得分的生成过程与DIN完全一致,都是当前状态向量与目标广告向量进行相互作用的结果。即,DIEN在模拟兴趣进化的过程中,需要考虑与目标广告的相关性。
在兴趣抽取层智商加上了兴趣净化层就是为了更有针对性地模拟与目标广告相关的兴趣进化路径。
兴趣进化层完成注意力机制的引入是通过AUGRU(GRU with Attentional Update gate,基于注意力更新门的GRU)结构,AUGRU在原GRU的更新门的结构上加入了注意力得分 a t a_t at。
u ~ t ′ = a t ⋅ u t ′ h t ′ = ( 1 − u ~ t ′ ) ∘ h t − 1 ′ + u ~ t ′ ∘ h ~ t ′ \widetilde u_t' = a_t \cdot u_t'\\ h_t'= (1- \widetilde u_t') \circ h_{t-1}' + \widetilde u_t' \circ \widetilde h_t' u t′=at⋅ut′ht′=(1−u t′)∘ht−1′+u t′∘h t′
序列模型具备强大的时间序列表达能力,非常适合预估用户经过一系列行为后的下一动作。
工程上,序列模型有比较高的 训练复杂度,以及在线上推断过程中的串行推断,使其在模型服务过程中延迟较大 ,增大了上线难度,需要在工程上着重优化。
强化学习(Reinforcement Learning)起源于机器人领域,针对智能体(Agent)在不断变化的环境(Environment)中,决策和学习的过程进行建模。在智能体学习过程中,会完成收集外部反馈(Reward),改变自身状态(State),再根据自身状态对下一步的行动(Action)进行决策,在行动之后持续收集反馈的循环。简称“行动-反馈-状态更新”的循环。
迭代过程如下:
DRN中,智能体是Deep Q-Network(深度Q网络,DQN),Q是Quality,指的是通过对行动进行质量评估,得到行动的效用得分,以此进行行动决策。
DQN在特征工程中,套用强化学习状态向量和行动向量的概念,将用户特征user features和环境特征context features归为状态向量,将用户-新闻特征归为行动特征。
DRN可以在线更新,和其他“静态”深度学习模型相比,有实时性优势。
按照时间顺序,DRN学习过程的重要步骤:
第四步可以理解为使用历史数据重新训练。第三步的模型微调联系到了DRN的在线训练算法——竞争梯度下降算法
步骤:
第一步,由当前网络生成探索网络,产生随机扰动的公式如下:
Δ W = α ⋅ r a n d ( − 1 , 1 ) ⋅ W \Delta W = \alpha \cdot rand(-1,1) \cdot W ΔW=α⋅rand(−1,1)⋅W
α \alpha α是探索因子,决定探索力度的大小。 r a n d ( − 1 , 1 ) rand(-1,1) rand(−1,1)是[-1,1]之间的一个随机数。
变静态为动态,把模型学习的实时性变得很重要。
Question:重量级&完美&延迟大 v.s. 轻巧&简单&实时训练
Embedding中文直译:嵌入,向量化,向量映射。
Embedding的主要作用:将稀疏向量转换成稠密向量,便于上层深度神经网络处理。
形式上,Embeding是用一个低位稠密的向量“表示”一个对象object,即Embedding向量能够表达相应对象的某些特征,同时向量之间的距离反映了对象之间的相似性。
Embedding向量之间的运算甚至能够包含词之间的语义关系信息。在有大量语料输入的前提下,Embedding技术甚至可以挖掘出一些通用知识。
与词向量使用大量文本语料进行训练不同,不同领域的训练样本肯定不同,如视频推荐使用用户的观看序列进行电影的Embedding化,而电商平台使用用户的购买历史作为训练样本。
word to vector,是一个生成对“词”的向量表达的模型。
假设由一组句子组成的语料库,其中的一个长度为 T T T的句子为 w 1 , w 2 , ⋯ , w T w_1, w_2,\cdots,w_T w1,w2,⋯,wT,假定每个词都跟其最相邻的词的关系最密切,每个词都是由相邻的词决定的(CBOW),或者每个词都决定了相邻的词(skip-gram)。
CBOW模型的输入是 w T w_T wT周围的词,预测的输出是 w t w_t wt,而Skip-gram则相反。
1 T ∑ t = 1 T ∑ − c ≤ j ≤ c , j ≠ 0 l o g p ( w t + j ∣ w t ) \frac{1}{T} \sum_{t=1}^{T} \sum_{-c\leq j\leq c,j \neq 0} log p(w_{t+j}|w_t) T1t=1∑T−c≤j≤c,j=0∑logp(wt+j∣wt)
p ( W O ∣ W I ) = e x p ( V W O ′ T V W I ) ∑ w = 1 W e x p ( V W ′ T V W I ) p(W_O|W_I)=\frac{exp(V'_{W_O}{\mathsf{T}} V_{W_I})}{\sum_{w=1}^{W}exp(V'_{W}{\mathsf{T}} V_{W_I})} p(WO∣WI)=∑w=1Wexp(VW′TVWI)exp(VWO′TVWI)
w O w_O wO代表 w t + j w_{t+j} wt+j,被称为输出词, w I w_I wI代表 w t w_t wt,被称为输入词。
输入向量表达是输入层到隐层的权重矩阵 W V × N W_{V \times N} WV×N,而输出向量表达是隐层到输出层的权重矩阵 W N × V ′ W'_{N\times V} WN×V′。
在获得输入向量矩阵 W V × N W_{V \times N} WV×N后,每一行对应的权重向量就是“词向量”。
原始的Word2vec计算量过大,往往采用负采样的方法进行训练,只需要对采样出的几个负样本计算预测误差。Word2vec模型的优化目标从一个读哟分类问题退化成了一个近似二分类问题,式子如下:
E = − l o g σ ( v w o ′ T h − ∑ W j ∈ W n e g l o g σ ( − v w j ′ T h ) ) E = -log \sigma (v'_{w_o}{\mathrm{T}} h - \sum_{W_j \in W_{neg}}log \sigma(-v'_{w_j}{\mathrm{T}} h)) E=−logσ(vwo′Th−Wj∈Wneg∑logσ(−vwj′Th))
v w o ′ v'_{w_o} vwo′是输出词向量(正样本),h是隐层向量, W n e g W_{neg} Wneg是负样本集合, v w j ′ v'_{w_j} vwj′是负样本词向量。福特样本集合的大小很有限,通常小于10。
由于Word2vec的流行,越来越多的Embedding方法可以被直接用于物品Embedding向量的生成。
用户Embedding向量这可以通过行为历史中的物品Embedding平均或者聚类得到。
利用用户向量和物品向量的相似性,可以直接在推荐系统的召回层快速得到候选集合,或在排序层直接用于最终推荐列表的排序。
Word2vec利用词序列生成词Embedding。
Item2vec利用的物品序列是由特定用户浏览、购买等行为产生的历史行为记录序列。
Word2vec中一个长度为T的句子为 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T w1,w2,...,wT,则其优化目标如公式7所示
假设Item2vec中一个长度为K的用户历史记录为 w 1 , w 2 , . . . , w K w_1,w_2,...,w_K w1,w2,...,wK,类比前者,优化目标如下所示:
1 K ∑ t = 1 K ∑ j ≠ i l o g p ( w j ∣ w i ) \frac{1}{K} \sum_{t=1}^{K} \sum_{j \neq i} log p(w_{j}|w_i) K1t=1∑Kj=i∑logp(wj∣wi)
通过观察两个公式可以看到不同在于,Item2vec丢弃了时间窗口的概念,认为序列中任意两个物品都相关,所以在公式中,是两两物品的对数概率的和,而不仅仅是时间窗口内物品的对数概率之和。
优化目标定义好后,其余的训练过程和最终物品Embedding的产生过程,Item2vec与Word2vec完全一致。最终物品向量的查找表就是词向量的查找表。
广义上讲,任何可以生成物品向量的方法都可以称作Item2vec,eg双塔模型。
广告侧的模型是对物品进行Embedding,称作“物品塔”,本质是接受物品相关的特征向量。最后输出一个多维的稠密向量
优点:作为Word2vec的推广,理论上可以使用任何序列型数据生成物品的 Embedding向量,大大拓展了Word2vec的使用场景
局限性:只能利用序列型数据,无法处理网络化数据——>Graph Embedding技术出现
Graph Embedding是一种对图结构中的节点进行Embedding编码的方法。最终生成的节点Embedding向量包含图的结构信息及附近节点的局部相似性信息。
主要思想:在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入Word2vec进行训练,得到物品的Embedding。是链接序列Embedding和Graph Embedding的过渡方法。
DeepWalk算法流程:
随机游走的跳转概率(到达节点 v i v_i vi后,下一步遍历 v i v_i vi的邻接点 v j v_j vj的概率):
若物品关系图是有向有权图,从节点 v i v_i vi跳转到 v j v_j vj的概率为:
P ( v j ∣ v i ) = { M i j ∑ j ∈ N + ( v i ) M i j , v j ∈ N + ( v i ) 0 , e i j ∉ ε P(v_j|v_i)= \left\{ \begin{array}{cc} \frac{M_{ij}}{\sum_{j\in N_+(v_i)}M_{ij}}, & v_j \in N_+(v_i) \\ 0, & e_{ij} \notin \varepsilon \end{array} \right. P(vj∣vi)={∑j∈N+(vi)MijMij,0,vj∈N+(vi)eij∈/ε
ε \varepsilon ε是物品关系图中所有边的集合,$ N_+(v_i) 是 节 点 是节点 是节点v_i 所 有 的 出 边 集 合 , 所有的出边集合, 所有的出边集合,M_{ij} 是 节 点 是节点 是节点v_i 到 到 到v_j$边的权重。即,DeepWalk的跳转概率是跳转边的权重站所有相关出边的权重之和的比例
若物品关系图是无向无权图,则 M i j M_{ij} Mij为1,且$ N_+(v_i) 是 节 点 是节点 是节点v_i$的所有边的集合。
在DeepWalk的基础上,调整随机游走权重,使得Graph Embedding的结果更加体现网络的同质性和结构性。
为了让Graph Embedding的结果可以表达网络的结构性,在随机游走过程中,需要让游走更接近于BFS,更多地在当前节点的领域中遍历,相当于对当前节点周边的网络结构进行一次“微观扫描”。
当前节点是 局部中心点、边缘节点或者连接性节点,其序列包含的节点数量和顺序必然是不同的,从而让最终的Embedding抓取到更多结构性信息。
为了让Graph Embedding的结果可以表达网络的同质性,需要让游走更接近于DFS,因为DFS可以游走到远方的节点,DFS的游走在一个大的集团内,使得一个集团或者社区内部的节点Embedding更为相似。
在Node2vec中,是通过节点间的跳转概率来控制DFS和DFS的倾向性。
从节点v跳转到下一个节点x的概率 π v x = α ( t , x ) ⋅ ω v x \pi_{vx} = \alpha (t,x) \cdot \omega _{vx} πvx=α(t,x)⋅ωvx, ω v x \omega _{vx} ωvx是边vx的权重, α ( t , x ) \alpha (t,x) α(t,x)定义如下:
Cannot read property 'type' of undefined
其中 d t x d_{tx} dtx是节点t到节点x的距离,参数p和q共同控制随机游走的倾向性。
参数p为返回参数return parameter,p越小,随即游走回节点t的可能性越大,Node2vec网络就更注重表达网络的结构性;
参数q为进出参数in-out parameter,q越小,随即游走到远方节点的可能性越大,Node2vec更注重表达网络的同质性。
注重同质性,距离相近的节点颜色更接近;注重结构性,结构特点相近的节点颜色更接近。
同质性相同的可能是同品类、同时性或者被一同购买的商品;结构性相同的商品可能是各品类的爆款、各品类的最佳凑单款等拥有类似趋势或结构属性的商品。
在淘宝应用的Embedding方法EGES(Enhanced Graph Embedding with Side Information),基本思想是在DeepWalk生成的Graph Embedding基础上引入补充信息。
仅仅使用用户行为生成的物品相关图,在遇到新加入的物品,或者没有很多互动信息的长尾物品时,推荐系统会产生冷启动问题。为了使冷启动商品获得合理的初始Embedding,通过引入更多的补充信息(side information)来丰富Embedding信息的来源,从而使没有历史行为记录的商品获得合理的初始Embedding。
生成Graph Embedding的第一步是生成物品关系图,除了通过用户行为序列,还可以利用相同属性,相同类别等信息也可以建立物品之间的边,得到基于内容的知识图谱。基于知识图谱生成的物品向量可以被称为补充信息Embedding向量。
如何融合一个物品的多个Embedding向量?
最简单的方法,是在深度神经网络中加入平均池化层,将不同Embedding平均起来。为了防止简单的平均池化导致有效信息丢失,可以对每个Embedding加权重(类似于DIN的注意力机制),对每类特征对应的Embedding向量,赋予不同的权重。详见p117 图4-11。
实际模型中,使用的是 e a j e^{a_j} eaj而不是 a j a_j aj,一是避免权重为0,二是 e a j e^{a_j} eaj在梯度下降过程中有良好的数学性质。
EGES没有复杂的理论创新,但是给出了一个融合多种Embedding的方法,降低了某类信息缺失造成的冷启动问题。
Embedding的主要应用方向:
若使用深度学习模型处理高维稀疏特征向量,都会在输入层到全连接层之间加入Embedding层,完成向低位稠密特征向量的转换。
DeepCrossing、FNN、Wide&Deep的Embedding层接受的都是类别型特征的one-hot向量,转换为低维的Embedding向量。Embedding层是一个高维向量向低维向量的映射。
用矩阵的形式表达Embedding层,本质上是求解一个 m × n m \times n m×n(输入高维稀疏向量 x 输出低维稠密向量)的权重矩阵的过程。
理论上,将Embedding层和整个深度学习网络整合后一同训练是最优选择,但是由于Embedding层参数量巨大,这样做会拖慢整个神经网络的收敛速度。所以工程上要求 快速更新的深度学习推荐系统放弃了Embedding层的端到端训练,用与训练Embedding层的方式来替代。
Embedding的训练往往独立于深度学习网络进行,得到稠密表达之后,再与其他特征一起训练
典型的采用Embedding预训练方法的模型是FNN,将FM模型训练得到各特征隐向量初始化Embedding层的初始化权重。如果想要进一步加快收敛速度,还可以采用”固定Embedding层权重,仅更新上层神经网络权重“的方法。
使用不同的训练频率来更新Embedding模型和神经网络模型,是训练开销和模型效果之间权衡后的最佳方案。
利用Embedding向量的相似性,将Embedding作为推荐系统的召回层。
模型输入层特征全部都是用户相关特征,模型输出层是softmax层,模型本质是一个多分类模型,预测目标是用户观看了哪个视频,所以softmax层的输入是经过三层ReLU全连接层生成的用户Embedding,输出向量是用户观看每一个视频的概率分布。由于输出向量的每一维对应了一个视频,该维对应的softmax层列向量就是该物品的Embedding。
在模型部署过程中,只需要将用户和物品的Embedding存储到线上内存数据库,通过内积运算再排序的方法,就可以得到物品的排序,再通过取序列中TopN的物品即可得到召回的候选集合。
但是这种遍历内积运算的O(n)级别的方法依然还是很慢,工程上需要一种针对相似Embedding的快速索引方法,更快地召回候选集合。
推荐系统召回层的主要功能是快速地将推荐物品的候选集从百万量级的规模减小到几千几百量级的规模,避免将全部候选物品直接输入深度学习模型造成的计算资源浪费和预测延迟的问题。
召回与用户向量最相似的物品Embedding向量的过程其实是在一个向量空间内搜索最近邻的过程。
通过建立kd树索引结构进行最近邻搜索是常用的快速最近邻搜索方法,但kd树结构复杂,搜索过程复杂且时间复杂度不是最优 ⟶ \longrightarrow ⟶ ⟶ \longrightarrow ⟶局部敏感哈希。
基本思想:让相邻的点落入同一个“桶”,这样可以再最近邻搜索时候,仅在一个桶内、或临近的几个桶内进行搜索。
以基于欧氏距离的最近邻搜索为例,解释构建局部敏感哈希“桶”的过程。
在欧式空间中,将高维空间的点映射到低维空间,原本近的点,依然近,远的点,未必远。
利用低维空间可以保留高维空间距离相近关系的性质,就可以构造局部敏感哈希“桶”。
内积操作可以将v映射到一维空间,成为一个数值 h ( v ) = v ⋅ x h(v)=v \cdot x h(v)=v⋅x,v是高维空间中的k维Embedding向量,x是随机生成的k维映射向量。
可以使用如下所示哈希函数 h ( v ) h(v) h(v)进行分桶:
h x , b ( v ) = ⌊ v ⋅ x w ⌋ h^{x,b}(v) = \lfloor \frac{v \cdot x}{w} \rfloor hx,b(v)=⌊wv⋅x⌋
w是分桶宽度,b是0到w间的一个均匀分布随机变量,避免分桶边界固化。
注:
映射操作损失了部分距离信息,所以仅仅采用一个哈希函数进行分桶,必然存在相近点误判的情况。解决办法就是使用m个哈希函数同事进行分桶,同时掉进m个哈希函数的同一个桶的两点,是相似点的概率大大增加。通过分桶找到相邻点的候选集合后,就可以在有限的候选集合中通过遍历找到目标点真正的K近邻。
采用多个哈希函数进行分桶,有一个问题,是通过and还是or来生成最终的候选集。and准确率提高,但候选集的规模减小减小整体的开销。or候选集召回率提高,规模变大开销增大。
使用几个哈希函数,使用or还是and需要在准确率和召回率之间作出权衡。
在构建推荐系统的过程中,推荐模型的作用是重要的,但推荐模型不是推荐系统的全部。推荐系统要解决的问题是综合性的,很多细节都会影响推荐效果。
数据及表达数据的特征本身决定了机器学习模型效果的的上限。
特征的本质其实是对某个行为过程相关信息的抽象表达。
推荐系统特征工程的原则——尽可能地让特征工程抽取出的一组特征能够保留推荐环境及用户行为过程中的所有有用信息,尽量摒弃冗余信息
在RS特征工程原则的基础上,在RS中常用的特征类别有:
用户行为数据是最常用也是最关键的数据,用户行为在RS中一般分为显性反馈行为(explicit feedback)和隐形反馈行为(implicit feedback)。
业务场景 | 显性反馈行为 | 隐形反馈行为 |
---|---|---|
电子商务网站 | 对商品的评分 | 点击、加入购物车、购买 |
视频网站 | 对视频的评分、点赞 | 点击、播放、播放时长 |
新闻类网站 | 赞、踩 | 点击、评论 |
音乐网站 | 对歌曲、歌手、专辑的评分 | 点击、播放、收藏 |
对于用户行为数据的使用涉及对业务的理解,不同行为在抽取特征时的权重不同,一些跟业务特点强相关的用户行为需要通过观察才能发现。
隐式反馈行为越来越重要,显式反馈行为收集难度过大,数据量小。显式数据不足以支持RS训练过程最终收敛。所以可以反映用户行为特点的隐式反馈是特征挖掘的重点。
具体的用户行为类特征处理上,有两种方式:
用户关系数据也分为显性和隐性两种,或者强关系和弱关系。
强关系:关注、好友关系
弱关系:互相点赞、同处一个社区、同看一部电影
用处:
二者本质上都是直接描述用户或者物品的特征。
主体 | 类别 | 来源 |
---|---|---|
用户 | 人口属性数据(性别、年龄、住址) 用户兴趣标签 |
用户注册信息、第三方数据管理平台DMP 用户选择 |
物品 | 物品标签 物品属性(类别,价格,电影分类,年代、演员、导演) |
用户或者系统管理员添加 后台录入、第三方数据库 |
在RS中使用属性、标签类 数据,一般是通过multi-hot编码将其转换成特征向量
大段的、描述用户或者物品的特征的文字、图片、视频。
一般来说,无法直接转换为RS需要的特征,需要通过NLP、CV提取关键内容特征,再输入RS。
描述推荐行为产生的 场景的信息。最常用的是时间和地点,包括但不限于时间、地点、季节、月份是否节假日、天气、空气质量、社会大事件。
引入上下文信息目的是尽可能地保存推荐行为发生场景的信息。
通过统计方法计算出的特征。如历史CTR、历史CVR、物品热门程度、物品流行程度。
一般是连续型特征,只需要通过标准归一化就可以直接输入RS进行训练。
统计类特征本质上是一些粗粒度的预测指标,与最后的预测目标有较强的相关性,不该被忽略。
将不同的特征组合后生成新的特征。年龄+性别=人口属性分段特征segment。
对于RS,模型输入是由数字组成的特征向量。那么如何把各种特征转换为数值型特征向量?
典型例子:用户年龄、统计类特征、物品的发布时间、影片播放时长等数值型特征。
常用处理手段:归一化、离散化、加非线性函数
归一化:统一各特征量纲,将连续特征归一到[0,1]区间
离散化:通过确定分位数的形式将原来的连续值进行分桶,最终形成离散值的过程。防止连续值带来过拟合及特征值分布不均。离散化处理后的连续型特征,与经过one-hot处理的类别型特征一样,以特征向量的形式输入推荐模型中。
加非线性函数:直接把原来的特征通过非线性函数做变化,然后把原来的特征及变换后的特征一起加入模型进行训练的过程。常用的非线性函数包括 x a , l o g a ( x ) , l o g ( x 1 − x ) x^a,log_a(x),log(\frac{x}{1-x}) xa,loga(x),log(1−xx)。目的是更好地捕获特征和优化目标之间的非线性关系,增强模型非线性表达能力。
典型例子:用户的历史行为数据、属性标签类数据。原始表现形是一个类别或者id。
常用处理方法:使用one-hot编码转换成一个数值向量。对于同一个特征域非唯一的类别选择,还可采用multi-hot编码。
对于类别特征进行one-hot\multi-hot编码的主要问题是维度过大,特征稀疏,容易造成欠拟合,权重参数过多,导致收敛过慢。
Embedding之后,先将类别型特征编码为稠密Embedding向量,再与其他特征组合,形成最终的输入特征向量
将特征工程与模型结构统一思考,整体建模的深度学习模式,只有深入了解业务运行模式,了解用户在业务场景下的思考方式和行为动机,才可以精确抽取出有价值特征。
推荐模型两个主要阶段:召回阶段、排序阶段
召回阶段:负责将海量候选集快速缩小为几百几千规模。第二章、第三章。
排序阶段:负责对缩小后的候选集进行精准排序。本节
RS的模型部分,将t推荐分为两个部分的原因是工程的考虑。
排序阶段:模型复杂,利用多特征进行精准排序,计算量大。需处理的物品数量少,可利用较多特征,模型复杂。
召回阶段:利用少量的特征和简单的模型或者规则进行候选集的快速筛选。候选集合大,速度快,模型简单,特征较少,保证物品召回率。
需要权衡计算速度和召回率,工业界主流的召回方法是采用多个简单策略叠加的 多路召回策略。
采用不同的策略、特征或简单模型,分别召回一部分候选集,然后混合在一起。
常用的多路召回策略:热门新闻&最近流行(预处理好的召回策略)、兴趣标签(基于单一特征)、协同过滤(计算效率高的简单模型)、朋友喜欢。
召回策略的选择与业务强相关。
每一路召回策略会拉回K个候选物品,对于不同的召回策略,可以选择不同大小的K。K是超参数,需要通过离线评估加线上A/B测试来确定合理范围。
需要一个综合性强且计算书读满足要求的召回方法
⇓ \Downarrow ⇓
4.5节详细介绍了。
多路召回使用的多种信息都可以作为Embedding召回方法中的附加信息side information融合进最终的Embedding向量中,就相当于在利用Embedding召回的过程中考虑了多路召回的多种策略。
Embedding召回的另一个优势——评分的连续性。Embedding召回可以把Embedding间的相似度作为惟一的判断标准,可以随意限定候选集大小。
生成Embedding的方法:第四章Item2vec,Graph Embedding,矩阵分解,因子分解机
模型更新越频繁,实时性越好,损失越小,效果越好。
从ML角度讲,实时性的重要性体现在:
实施的收集和更新推荐模型的输入特征,使推荐系统总能使用最新的特征进行预测和推荐。
利用客户端收集时间、地点、推荐场景等上下文特征,让这些特征随http请求一起到达服务器端。客户端还可以实时收集session(会话)内用户行为。
如果客户端可以缓存session内部的行为,将其作为与上下文特征同样的实时特征传给服务器,那么推荐模型就可以实时地得到session内部的行为特征,进行实时推荐。
流计算平台,是将日志以流的形式,进行微批处理mini batch。并非完全实时平台,优势是可以进行一些简单的统计类特征的计算。
流计算平台计算出的特征可以被立刻存入特征数据库被推荐模型使用。
这个阶段进行的有全量特征的计算和抽取、多个数据源的数据联结join及延迟信号的合并等
主要用途:
特征实时性:用更准确的特征描述用户、物品和相关场景,从而让RS给出更符合场景的推荐结果
模型实时性:更快地抓住全局层面的新数据模式,发现新趋势和新关注。
模型的实时性是与模型的训练方式紧密联系的,模型的实时性由弱到强的训练方式分别是全量更新、增量更新和在线学习。
模型利用某时间段内的所有训练样本进行训练。是最常用的训练方式,训练时间较长,实时性最差。
仅将新加入的样本喂给模型进行增量训练。模型往往采用随机梯度下降SGD进行学习,模型对增量样本的学习相当于在原有样本的基础上继续输入增量样本进行梯度下降。但,无法找到全局最优点。
常采用全量更新和增量更新结合的方式,几轮增量更新后,进行全局更新,纠正累积的误差。
模型实时更新的主要方法,在获得一个新的样本的同时更新模型。
在线学习的另一个方向是将强化学习与推荐系统结合,eg:DRN通过随机探索新的深度学习模型参数,根据实时效果反馈进行参数调整的方法在线学习。
降低训练效率低的部分的更新频率,提高效率高的部分的更新频率,eg:Facebook的GBDT+LR模型,利用GBDT进行自动化的特征工程,利用LR拟合优化目标。为了避免GBDT拖慢LR的更新速度,Facebook采用的部署方法,是一天训练一次GBDT,固定GBDT模型后,实时训练LR模型以快速捕捉数据整体的变化。
在离用户最近的部分,实时性最强,能否在客户端就根据当前用户的历史行为更新模型呢?处于探索阶段。
物品Embedding更新需要全局数据,只能在服务器端进行更新。
用户Embedding更多依赖用户自身数据,可以移植到客户端,实时改变用户Embedding,完成推荐结果的实时更新。
根据用户最新点击的物品来更新用户Embedding,在下次推荐时,将更新后的用户Embedding传给服务器,服务器可根据新的用户Embedding来返回实时推荐内容。
推荐系统的模型部分和工程部分总是迭代进行、交替优化的。