正文
先给出结论:
针对互联网电子商务领域,数据特点:Diversity、Local Activation。DIN 给出了解决方案:
-
使用
用户兴趣分布
来表示用户多种多样的兴趣爱好
-
使用
Attention 机制
来实现 Local Activation
-
针对模型训练,提出了
Dice 激活函数,自适应正则
,显著提升了模型性能与收敛速度
1.1 名词解释
这两个词在论文中通篇出现,先把其表示的意思说清楚。
Diversity:
用户在访问电商网站时会对多种商品都感兴趣。也就是用户的兴趣非常的广泛。
Local Activation:
用户是否会点击推荐给他的商品,仅仅取决于历史行为数据中的一小部分,而不是全部。
不明白?举个例子:
Diversity:一个年轻的母亲,从他的历史行为中,我们可以看到她的兴趣非常广泛:羊毛衫、手提袋、耳环、童装、运动装等等。
Local Activation:一个爱游泳的人,他之前购买过 travel book、ice cream、potato chips、swimming cap。当前给他推荐的商品 (或者说是广告 Ad) 是 goggle(护目镜)。那么他是否会点击这次广告,跟他之前是否购买过薯片、书籍、冰激凌一丁点关系也没有!而是与他之前购买过游泳帽有关系。也就是说在这一次 CTR 预估中,部分历史数据 (swimming cap) 起了决定作用,而其他的基本都没啥用。
1.2 相关工作
CTR 预估是一个比较窄的研究领域,但是模型性能一点点的提升,在实际应用中都非常关键,真金白银毫不含糊。随着深度学习在 CV、NLP 等领域取得突破性进展,一些研究也开始尝试将 DNN 应用于 CTR 预估,比如:Wide&Deep, DeepFM 等。
这些做法一般分为两部分:
-
在输入上面加一层 embeding 层,把最原始高维度、稀疏的数据转换为低维度的实值表示上 (dense vector)。
-
增加多个全连接层,学习特征之间的非线性关系。
Sparse Features -> Embedding Vector -> MLPs -> Output
这些方法的
优点
在于:
相比于原来的 Logistic Regression 方法,大大减少了人工特征工程的工作量。
缺点:
在电子商务领域中,用户的历史行为数据 (User Behavior Data) 中包含大量的用户兴趣信息,之前的研究并没有针对 Behavior data
特殊的结构 (Diversity + Local Activation)
进行建模。
这就是 DIN 要改进的地方!
DIN 同时对 Diversity 和 Local Activation 进行建模。
针对 Diversity:
针对用户广泛的兴趣,DIN 用
an interest distribution
去表示。
针对 Local Activation:
DIN 借鉴机器翻译中的 Attention 机制,设计了一种
attention-like network structure
, 针对当前候选 Ad,去局部的激活 (
Local Activate
) 相关的历史兴趣信息。和当前候选 Ad 相关性越高的历史行为,会获得更高的
attention score
,从而会主导这一次预测。
当 DNN 深度比较深 (参数非常多),输入又非常稀疏的时候,很容易过拟合。DIN 提出
Adaptive regularizaion
来防止过拟合,效果显著。
论文还提出,DIN 方法也可以应用于其他
有丰富用户行为数据
的场景,比如:
2. 系统总览
阿里推荐系统工作流程就像上图所示:
-
检查用户历史行为数据
-
使用 matching module 产生候选 ads
-
通过 ranking module 得到候选 ads 的点击概率,并根据概率排序得到推荐列表
-
记录下用户在当前展示广告下的反应 (点击与否)
这是一个闭环的系统,对于用户行为数据 (User Behavior Data),系统自己生产并消费。
2.1 训练数据
前面提到,电子商务领域,充分利用 User Behavior Data 非常关键,而它又有着非常显著的特点:
还有的特点,就是 CTR 中输入普遍存在的特点:
CTR 中一旦涉及到用户行为数据,还有一个特点:
也就是:多值离散特征。比如:用户在 YouTube 上看的视频和搜索过的视频。无论是看过的还是搜索过的,都不止一个,但是相对于所有的视频来说,看过和搜索过的数量都太小了 (非常稀疏)。在电子商务上的例子就是:用户购买过的 good_id 有多个,购买过的 shop_id 也有多个,而这也直接导致了每个用户的历史行为 id 长度是不同的。
为了得到一个固定长度的 Embedding Vector 表示,原来的做法是在
Embedding Layer
后面增加一个
Pooling Layer
。Pooling 可以用 sum 或 average。最终得到一个固定长度的
Embedding Vector
,是用户兴趣的一个抽象表示,常被称作
User Representation
。缺点是会损失一些信息。