Deep Interest Network(Din)模型是阿里妈妈基础算法团队发表在KDD 18上的一篇论文,用来做CTR预估。
文章的innovation也很简单,在电商场景的广告推荐中,用户的兴趣非常重要,而用户的兴趣从算法测一般通过用户历史浏览点击的一些商品来进行刻画,目前的主流DNN模型都是直接把用户的一些兴趣(可以是一些用户历史浏览点击的商品,keyword等feature)直接做一个embedding,映射成一个fixed-length的Dense vector,然后输入到DNN模型。这样做有一个缺点,就是对于用户将要浏览的不通商品(candidate ad),这样做获得的embedding向量是一样的,事实上这样做不是太好,比如我们很容易想到,假如兴趣是时序的,那一般我们都会认为最近的兴趣一般会对用户的当前行为影响更大,可能会对时间做一个简单的权重衰减之类的,那Din是怎么做的呢?
Din calculates the representation vector of user interests by taking into consideration the relevance of historical behaviors given a candidate ad. It pays attentions to the releated parts of historical behaviors and takes a weighted sum pooling to obtain the representation of user interests with respect to the candidate ad, In this way, the repressentation vector of user interests varies over different ads. Din可以根据不同的candidate ad计算得到不同的特征向量,为什么这么做呢? e.g. 一个年轻的妈妈最近浏览了一些商品,包括毛呢大衣,T恤,耳环,手提袋,皮包和小孩的衣服。 那按以前的做法,不管这个用户将要看什么商品,对他的影响都是一样,取一个平均, 但是这样与实际情况显然不符合, 假如该用户现在有在看大衣, 那她历史浏览点击大衣的行为相比她历史对T恤,耳环等这些商品的行为 对她将要买什么大衣的行为影响肯定会大一些,也就是说,用户历史的多种多样的兴趣对于用户当前的candidate ad 可以被locally activated.
上图,左边是base model,其实就是对所有的用户兴趣做一个sum/average/sqrtn pooling,而对于右边是Din,Din对用户的兴趣,和当前的candidate ad(也可以结合自身业务和对模型理解用其他的)做一个attention,这个attention其实很简单, 可以看成一个简单的神经网络,用用户的历史兴趣的特征向量(keys),和当前candidate ad 的特征向量(querys), 做一个简单的(keys, keys-querys, querys, keys*querys), 然后过一个自定义的简单的DNN,最后这个输出当成最后的特征向量,这样对于不同的candidate ad,这个特征向量是不同的(attention)。
模型的tensorflow实现代码可以参考: https://github.com/qiaoguan/deep-ctr-prediction/tree/master/Din
参考文献:【1】Guorui Zhou et all. “Deep Interest Network for Click-Through Rate Prediction,” In KDD,2018.