> 文章列表 > 美团DAT:A Dual Augmented Two-tower Model for Online Large-scale Recommendation

美团DAT:A Dual Augmented Two-tower Model for Online Large-scale Recommendation

美团DAT:A Dual Augmented Two-tower Model for Online Large-scale Recommendation

A Dual Augmented Two-tower Model for Online Large-scale Recommendation

美团的对偶增强双塔为了user塔和item塔操碎了心,众所周知,双塔的一个大毛病就是item和user的交叉太晚,重要的信息经过层层神经网络的抽象提取,有些重要的信息活不到交叉的那一刻就在中途丢失了。怎么尽早实现user塔和item塔的交叉是个让大家都想破脑袋的事,腾讯的MVKE通过全局向量作为桥梁,一桥架起双塔,实现早期的user塔和item的交叉,在实际业务中落地效果不错,美团的DAT通过在user塔和item塔分别构造一个增强向量,user塔的增强向量作为user塔输入的一部分,去学item塔的输出,item塔的增强向量作为item塔输入的一部分,去学user塔的输出,从而实现user塔和item塔的交叉。这个做法也是非常巧妙。

做法

结构如图
美团DAT:A Dual Augmented Two-tower Model for Online Large-scale Recommendation
可以看到,一个重要的改动就是user塔的Embedding层多了一个增强向量 a u \\mathbf a_u au,item塔的Embedding多了一个增量向量 a v \\mathbf a_v av,user塔的增强向量 a u \\mathbf a_u au学习item塔的最终输出向量 p v \\mathbf p_v pv,item塔的增强向量学习user塔最终输出向量 p u \\mathbf p_u pu

同时user塔的增强向量 a u \\mathbf a_u au也作为user塔的Embedding输入,作为user塔炼丹原材料,最终产出用户塔的输出 p u \\mathbf p_u pu,也就是item塔的信息实际上成为了user塔输入的一部分,item塔也是同样的操作。这样就实现了item塔和user的尽可能早的交叉。

详细做法

输入侧,以用户塔为例,第 i i i个特征域的Embedding记为 e i \\mathbf e_i ei,用户侧的各个特征域(年龄、性别、地域、…)拼接起来就是如下
[ e 1 , e 2 , . . . e n ] [\\mathbf e_1, \\mathbf e_2, ... \\mathbf e_n] [e1,e2,...en]
再拼接上构造的用户侧增强向量 a u \\mathbf a_u au,用户侧Embedding可以表示为
z = [ e 1 , e 2 , . . . e n , a u ] \\mathbf z = [\\mathbf e_1, \\mathbf e_2, ... \\mathbf e_n, \\mathbf a_u] z=[e1,e2,...en,au]
经过炼丹炉炼制,炼制过程表示为
h 1 = R e L U ( W 1 z + b 1 ) \\mathbf h_1 = ReLU(\\mathbf W_1 \\mathbf z + \\mathbf b_1) h1=ReLU(W1z+b1)
h L = R e L U ( W l h L − 1 + b l ) \\mathbf h_L = ReLU(\\mathbf W_l \\mathbf h_{L-1} + \\mathbf b_l) hL=ReLU(WlhL1+bl)
p u = L 2 N o r m ( h L ) \\mathbf p_u = L2 Norm(\\mathbf h_L) pu=L2Norm(hL)
同理可以炼制item塔,得到item塔输出 p v \\mathbf p_v pv

那么增强的向量怎么学习塔对面的输出呢,每个增强向量通过一个辅助loss的方式,这个辅助loss在论文中称为AMM(Adaptive-Mimic Mechanism),对label为1(y=1)的样本计算辅助loss,其实就是要求这2个向量是一致的,形式如下
l o s s u = 1 T ∑ y ( a u − p v ) 2 loss_u = \\frac 1 T \\sum y(\\mathbf a_u - \\mathbf p_v)^2 lossu=T1y(aupv)2
l o s s v = 1 T ∑ y ( a v − p u ) 2 loss_v= \\frac 1 T \\sum y(\\mathbf a_v - \\mathbf p_u)^2 lossv=T1y(avpu)2

*因为这个loss是为了更新增强向量用的,所以需要固定 p v \\mathbf p_v pv p u \\mathbf p_u pu,反向传播的时候,需要阻塞loss对 p v \\mathbf p_v pv p u \\mathbf p_u pu的梯度更新。

类目信息迁移

业务生产中,各个item所属的类目通常是极度不均衡的,有的类目包含的item少,有的类目包含的item多,通常包含较少类目的item学习可能会不充分,这里设置了一个loss来让占主导的类目信息往长尾类目信息上面迁移。通过占主导的类目协方差和其他类目协方差的模来约束。
l o s s C A = ∑ i = 2 m ∣ ∣ C ( S m a j o r ) − C ( S i ) ∣ ∣ F 2 loss_{CA} = \\sum_{i=2}^m \\vert \\vert C(S^{major}) - C(S^i) \\vert \\vert^2_F lossCA=i=2m∣∣C(Smajor)C(Si)F2

loss计算

主loss,item塔的输出和user塔的输出 s ( u , v ) = < p u , p v > s(u, v) = <\\mathbf p_u, \\mathbf p_v> s(u,v)=<pu,pv>

l o s s p = − 1 T ∑ ( y log ⁡ σ ( < p u , p v > ) + ( 1 − y ) log ⁡ ( 1 − σ ( < p u , p v > ) ) ) loss_p = - \\frac 1 T \\sum (y \\log \\sigma (<\\mathbf p_u, \\mathbf p_v>) +(1-y) \\log (1 - \\sigma (<\\mathbf p_u, \\mathbf p_v>)) ) lossp=T1(ylogσ(<pu,pv>)+(1y)log(1σ(<pu,pv>)))

最后的loss为

l o s s = l o s s p + λ 1 l o s s u + λ 2 l o s s v + λ 3 l o s s C A loss = loss_p + \\lambda_1 loss_u + \\lambda_2 loss_v + \\lambda_3 loss_{CA} loss=lossp+λ1lossu+λ2lossv+λ3lossCA

实验效果

可以看到加了增强向量的双塔效果还是不错的。
美团DAT:A Dual Augmented Two-tower Model for Online Large-scale Recommendation
论文地址:https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_4.pdf

安陆市