本文授权转载自王喆的机器学习笔记 ( https://zhuanlan.zhihu.com/wangzhenotes ), 每隔一到两周作者会站在算法工程师的角度讲解一些计算广告, 推荐系统相关的文章. 本文以阿里的深度兴趣网络(DIN) 为例讲解了推荐系统中的注意力机制.
选择文章的标准有三个:
一是工程导向的;
二是阿里, Facebook,google 等一线互联网公司出品的;
三是前沿或者经典的.
我们从阿里的深度兴趣网络 (Deep Interest Network) 开始. 很多同学已经非常熟悉这篇文章了, 但我觉得一篇优秀的文章多强调几遍也不为过. 说这篇文章好, 主要有三个原因:
一是因为这篇文章的 工程性很强 . 工程性很强的文章首先是便于实现的, 其次你可以从字里行间看到很多实践出真知的影子, 比如 DIN 这篇文章中 GAUC 这样的 metric 的改进, 以及 Dice 这样的激活函数的创新, 都是对经典知识在实践中改进的例子.
第二个原因是因为这篇文章 对用户行为的观察非常精准 . 有句话说做推荐其实就是 "揣摩人心", 你把用户的行为和习惯揣摩好了, 才能够以此出发, 从技术上映射用户的习惯. DIN 这篇文章有效的利用了用户兴趣多样性以及当前候选商品仅与用户一部分兴趣有关这一特点, 引入注意力机制, 这是非常精准的动机.
第三个原因是 模型的微创新 , 从低维到高维是创新, 从离散到连续是创新, 从单一到融合也是创新, 这篇文章把 NLP 大行其道的注意力机制引入推荐领域, 当然是典型并且有效的创新手段, 也是所有算法工程师应该学习的地方.
好了, 废话讲完了, 我们看看这篇文章到底做了什么.
用户场景很简单, 就是在一个电商网站或 App 中给用户推荐广告, 当然对于阿里妈妈来说, 广告也是商品, 所以这篇文章的广告场景其实也是一个经典的推荐场景.
好, 既然要推荐, 我们当然需要利用用户的历史数据了, 对于一个电商来说, 历史数据当然就是点击, 添加购物车, 下单这些行为了. 论文中给了一位用户的行为序列.
用户的行为序列
显然是一个女生的行为历史啦, 从最左边的手套, 鞋子到右边的杯子, 睡衣. 要被推荐的候选商品是一件女式大衣. 我们应该如何计算这件大衣的 CTR 呢?
如果按照之前的做法, 我们会一碗水端平的考虑所有行为记录的影响, 对应到模型中就是我们会用一个 average pooling 层把用户交互过的所有商品的 embedding vector 平均一下形成这个用户的 user vector, 机灵一点的工程师最多加一个 time decay, 让最近的行为产生的影响大一些, 那就是在做 average pooling 的时候按时间调整一下权重.
但是我们仔细想一想我们自己的购买过程, 其实每个用户的兴趣都是多样的, 女生喜欢买衣服包包, 也喜欢化妆品, 甚至还为自己男朋友挑选过球衣球鞋, 那么你在买大衣的时候, 真的要把给男朋友买球鞋的偏好考虑进来么? 具体到本文的例子中, 在预测大衣的 CTR 这件事情上, 用户浏览过杯子, 跟用户浏览过另一件大衣这两个行为的重要程度是一样的吗?
这事不用问算法工程师, 你就回家问问你老妈估计答案都是一定的, 肯定是浏览过另一件大衣这件事的参考价值高啊. 好了, 就是这件你老妈都知道的事情, 让阿里妈妈的算法工程师们加上了 attention 机制.
注意力机制顾名思义, 就是模型在预测的时候, 对用户不同行为的注意力是不一样的,"相关" 的行为历史看重一些,"不相关" 的历史甚至可以忽略. 那么这样的思想反应到模型中也是直观的.
来源: http://www.tuicool.com/articles/IZNr6vy