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

387 阅读3分钟

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塔的交叉。这个做法也是非常巧妙。

做法

结构如图 在这里插入图片描述转存失败,建议直接上传图片文件 可以看到,一个重要的改动就是user塔的Embedding层多了一个增强向量au\mathbf a_u,item塔的Embedding多了一个增量向量av\mathbf a_v,user塔的增强向量au\mathbf a_u学习item塔的最终输出向量pv\mathbf p_v,item塔的增强向量学习user塔最终输出向量pu\mathbf p_u

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

详细做法

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

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

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

类目信息迁移

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

loss计算

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

lossp=1T(ylogσ(<pu,pv>)+(1y)log(1σ(<pu,pv>)))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>)) )

最后的loss为

loss=lossp+λ1lossu+λ2lossv+λ3lossCAloss = loss_p + \lambda_1 loss_u + \lambda_2 loss_v + \lambda_3 loss_{CA}

实验效果

可以看到加了增强向量的双塔效果还是不错的。 在这里插入图片描述转存失败,建议直接上传图片文件 论文地址:dlp-kdd.github.io/assets/pdf/…