DIN的问题归纳

  • 1. 为什么DIN中采用attention?
  • 2. DIN中的attention是如何处理的呢?与传统词向量方法有什么不同?
  • 3. DIN中的attention中,每次行为的权重 w i w_i wi是如何得到的?
  • 4. DIN为什么更适用于电商场景?是否适用于短视频或者信息流?
  • 5. 用户有上亿人,同时广告有上万个类别,假如按照预测的CTR排序,难道要把这个model跑上亿 * 上万次,才能给出ranking?
  • 6. 为什么Activation Unit 里用了减法就信息损失少了?
  • 7. DIN中的attention score不用softmax归一的原因是什么?
  • 8. 论文是把goods id,shop id和cate id先连接起来,再进入激活单元求注意力得分,这样是不是goods id,shop id和cate id共享同一个注意力得分?有什么好处吗?而且这样是不是需要一个goods id对应一个shop id和cate id?那如果一个goods id对应了多个shop id和cate id(如某人在不同商店浏览了同一个商品),要怎么连接呢?


1. 为什么DIN中采用attention?

注意力机制顾名思义,就是模型在预测的时候,对用户不同行为的注意力是不一样的,“相关”的行为历史看重一些,“不相关”的历史甚至可以忽略。

首先,我们会得到一个用户的行为序列listing,

如果按照之前的做法,我们会一碗水端平的考虑所有行为记录的影响,对应到模型中就是我们会用一个average pooling层把用户交互 过的所有商品的embedding vector平均一下形成这个用户的user vector,机灵一点的工程师最多加一个time decay,让最近的行为产生的影响大一些,那就是在做average pooling的时候按时间调整一下权重。

但是这样真的合适吗?显示是不是的!其实每个用户的兴趣都是多样的,女生喜欢买衣服包包,也喜欢化妆品,甚至还为自己男朋友挑 选过球衣球鞋,那么你在买大衣的时候,真的要把给男朋友买球鞋的偏好考虑进来么?那么,在预测大衣的CTR这件事情上,用户浏览过杯子,跟用户浏览过另一件大衣这两个行为的重要程度是不一样的

2. DIN中的attention是如何处理的呢?与传统词向量方法有什么不同?

公式:din模型 pytorch din模型面试_din模型 pytorch

其中din模型 pytorch din模型面试_机器学习_02表示的是用户din模型 pytorch din模型面试_din模型 pytorch_03din模型 pytorch din模型面试_权重_04向量,din模型 pytorch din模型面试_深度学习_05为候选广告商品的din模型 pytorch din模型面试_权重_04向量,din模型 pytorch din模型面试_点积_07为用户第din模型 pytorch din模型面试_点积_08次行为的din模型 pytorch din模型面试_权重_04向量

因为加入了注意力机制,din模型 pytorch din模型面试_din模型 pytorch_10从过去din模型 pytorch din模型面试_深度学习_11的加和变成了din模型 pytorch din模型面试_深度学习_11的加权和,din模型 pytorch din模型面试_深度学习_11的权重din模型 pytorch din模型面试_机器学习_14就由din模型 pytorch din模型面试_深度学习_11din模型 pytorch din模型面试_权重_16的关系决定,也就是上式中的din模型 pytorch din模型面试_机器学习_17 ,不负责任的说,这个din模型 pytorch din模型面试_机器学习_17的加入就是DIN中70%的价值所在。

3. DIN中的attention中,每次行为的权重din模型 pytorch din模型面试_权重_19是如何得到的?

DIN在生成用户embedding vector的时候加入了一个activation unit层,这一层产生了每个用户行为din模型 pytorch din模型面试_点积_07的权重,也就是din模型 pytorch din模型面试_机器学习_21

传统的Attention机制中,给定两个din模型 pytorch din模型面试_权重_22,比如din模型 pytorch din模型面试_深度学习_23din模型 pytorch din模型面试_深度学习_24,通常是直接做点积din模型 pytorch din模型面试_深度学习_25或者din模型 pytorch din模型面试_点积_26,其中din模型 pytorch din模型面试_点积_27是一个din模型 pytorch din模型面试_din模型 pytorch_28的权重矩阵,但paper中显然做了更进一步的改进,着重看上图右上角的activation unit,首先是把u和v以及u v的element wise差值向量合并起来作为输入,然后喂给全连接层,最后得出权重,这样的方法显然损失的信息更少。但如果自己想方便的引入attention机制的话,不妨先从点积的方法做起尝试一下,因为这样连训练都不用训练。

此外,每个ad会有 good_id, shop_id 两层属性,shop_id只跟用户历史中的shop_id序列发生作用,good_id只跟用户的good_id序列发生作用。

4. DIN为什么更适用于电商场景?是否适用于短视频或者信息流?

人们在电商会买各种物件(包括很多不那么感兴趣但生活必需品),所以会出现这个兴趣“多峰”的分布
视频推荐也确实发现兴趣多峰的现象,但关键问题是视频和信息流大家的兴趣都相对稳定,所以没有电商那么需要attention

5. 用户有上亿人,同时广告有上万个类别,假如按照预测的CTR排序,难道要把这个model跑上亿 * 上万次,才能给出ranking?

一般工程上都有召回层,会用各种召回策略把candidate限制在几百的量级, 最终ctr模型会对这几百个candidates逐个inference和排序

6. 为什么Activation Unit 里用了减法就信息损失少了?

减法表示两者差异,加法相当于pooling,乘法表示相似性。

一个内积一个差,差很容易理解成两向量之间差异,内积表示相似度。不过差和内积确实是依据人工经验来判定的,不然的话完全可以把Unit里面的NN做的非常复杂,但是代价是线上响应时间过长,所以需要一些专家经验。

7. DIN中的attention score不用softmax归一的原因是什么?

结合paper的解释,他这里想把这个数值信息也带进来。假设用户有9个衣服浏览记录,1个电子产品浏览记录,当候选ad是衣服的话,那么就会和衣服的weight比较大,比如是0.8,和电子产品weiht假设是0.1。假设衣服向量是v1,电子产品是v2,那么出来的用户兴趣接近din模型 pytorch din模型面试_深度学习_29,如果softmax归一化的话,用户兴趣接近v1。所以之间还是有一个数值的差异的,而这种差异能够体现出一种喜欢的强度,在这种场景下这种强度应该是有一定意义的。

8. 论文是把goods id,shop id和cate id先连接起来,再进入激活单元求注意力得分,这样是不是goods id,shop id和cate id共享同一个注意力得分?有什么好处吗?而且这样是不是需要一个goods id对应一个shop id和cate id?那如果一个goods id对应了多个shop id和cate id(如某人在不同商店浏览了同一个商品),要怎么连接呢?

不会共享attention score, concat仅仅是拼接。可以理解成训练xgb/lr,也不 这些传统模型也不会一列一列合并输入,但是每一列有自己的权重