假设用户对“电脑A”进行点击转换后,如果利用DIN算法得到的推荐列表可能是[“电脑B”,“电脑C”]。但用户的兴趣在点击后可能发生了变化,用户可能变得更加关注“鼠标”、“键盘”之类的商品,这个时候就需要去捕捉用户的兴趣变化信息,这就是DIEN想达到的效果
兴趣建模的CTR模型有几种,其中大多数是将行为的表现直接视为兴趣,而缺乏对具体行为背后的潜在兴趣进行建模,因此提出了DIEN;
关键知识点
兴趣提取层
兴趣提取层的作用是从用户的行为序列中提取出一系列的兴趣状态,且包含了筛选过后的先前状态的信息。例如【”衬衫A“、”电脑A“(衬衫A信息少)、”衬衫B“(衬衫A信息多,电脑A信息少)、”鼠标A“(电脑A信息多,衬衫A/B信息少)……】
其中使用了GRU来实现兴趣状态提取,而GRU相比于LSTM运行更快且克服了RNN梯度消失的问题;
兴趣进化层
兴趣进化层的作用是通过AUGRU(将Attention加入GRU)来模拟用户兴趣进化的过程。例如目标商品为“键盘”,其历史行为序列中【“电脑” ->…-> “鼠标”】的信息将会作出主要贡献,其符合经验所得,即电脑>>鼠标>>键盘的演变过程;
算法原理
不同于付费搜索,在许多类似在线展示广告的电子商务平台上,用户不能清楚的表达它们的意图,因此捕捉用户的兴趣对提高CTR准确性至关重要。DIEN致力于捕获用户兴趣和对用户兴趣进化过程进行建模。DIEN分为几部分:首先,所有的类别特征通过Embedding层进行转换;然后DIEN采用两步来捕捉用户进化过程:兴趣提取层基于用户行为序列抽取兴趣序列;兴趣进化层模拟了相对于目标item下的兴趣进化过程。最终将兴趣表示和广告、用户信息、上下文的embedding向量进行拼接。
兴趣提取层
用户行为是用户潜在兴趣的载体,用户在采取一个行为后兴趣可能也会发生变化,尤其是电子商务系统当中的用户行为是丰富的,在短时间内(两周)就会产生很长的用户历史行为,其中会包含各类信息;
与直接将行为作为兴趣不同,兴趣提取层的作用就是从用户的行为序列中提取出一系列的兴趣状态,如上图所示,结构中使用了GRU来实现兴趣状态提取,而GRU相比于LSTM运行更快且克服了RNN梯度消失的问题;
GRU理解
GRU的输入输出结构
GRU的输入输出结构
可以看到GRU的输入输出普通RNN是一样的,当前输出 和上一个节点传递下来的隐状态 ,输出为当前节点的输出 和 传递给下一个节点的隐状态 ;
GRU的内部结构
首先需要了解GRU中的 重置门(reset gate)和 更新门(update gate)
其次我们了解 重置门的使用:将上一个节点传递的隐状态 进行“重置”之后得到数据 ,再和输入 进行拼接
最后我们了解 更新门的使用:同时进行更新和遗忘操作,主要针对上一个节点传递的隐状态 和当前节点的状态 ,得到输出到下一个节点的隐状态
GRU 图示
其中 为 sigmoid 激活函数, 为元素积,
兴趣提取
通过 GRU 在 中使用的 只包含监督的最终兴趣,然而其行为的历史状态 无法得到适当的监督训练。
例如 为监督物品,完整的行为序列 中 得到了有效的监督训练;但行为序列 中 却未得到有效的监督训练
因此提出了辅助损失,使用 (实际的下一个行为作为正例)来监督兴趣状态的 训练,同时还从数据集中抽取负例来辅助训练;
整体损失函数:
辅助损失函数:
其中 表示点击的行为序列, 表示没有点击的行为序列。 是历史行为数, 表示用户 点击第 个item的embedding向量, 表示除用户 在第 步点击的item外,从数据集中采样的item的embedding向量。
在损失函数的帮助下,每个隐藏状态 用户采取行为 后的兴趣状态。连接 个兴趣点 组成兴趣序列,兴趣进化层可以在此基础上对兴趣进化进行建模。
引入辅助损失有以下几个优点:
1、从兴趣学习的角度来看,辅助损失可以帮助GRU的隐藏状态去表示用户兴趣;
2、对于GRU的优化,当GRU模拟长历史行为序列时,辅助损失降低了反向传播的难度;
3、辅助损失为Embedding层提供了更多的语义信息,可以产生更好的Embedding矩阵;
兴趣进化层
随着外部环境和内部认知共同影响,用户的兴趣会随时间变化而变化。以“服装”兴趣为例,随着人们流向趋势和用户品味发生变化,用户对衣服的偏好也会随之改变,可以看作是用户的兴趣进化;
对进化过程建模的优势:
- 兴趣进化模层可以为最终兴趣的表示提供更多的相关历史信息;
- 根据兴趣进化趋势预测目标项目的CTR更好;
兴趣进化过程中的两个特点:
1、因为兴趣的多样性,兴趣会发生漂移。例如用户一段时间内对“衣服”感兴趣,另一段时间对“电脑”感兴趣;
2、每个兴趣都有自己的进化过程,例如“衣服”和“电脑”的进化过程几乎是独立的,因此我们只需要关注目标Item相关的兴趣进化过程;
兴趣进化层的作用是通过AUGRU(将Attention加入GRU)来模拟用户兴趣进化的过程。
上一阶段在辅助损失的帮助下,获得了兴趣序列的表达形式。再结合Attention与GRU来对兴趣进化过程进行建模:GRU中每一步通过利用Attention的局部激活来增加其对相关兴趣的权重,减弱兴趣漂移带来的影响,这有助于对特定item下的兴趣进化过程进行建模。
Attention机制函数:
其中 表示是不同类别广告的embedding向量后的连接, ,其中 是隐藏状态的维度, 是广告embedding向量的维度。attention分数反应了广告 和输入 之间的关系,相关性强的分数越大。
如何将attention机制加入GRU中,有以下三种:
- GRU with attentional input(AIGRU):使用attention得分去影响用户进化层的输入: 。其中 是兴趣提取层中GRU中第t个隐藏状态, 是用于兴趣进化层中GRU的输入,* 是向量的标量积。在AIGRU中,相关度较低的兴趣可以通过较低的attention分数来降低。理想状态下,低相关性的输入可以减少到0,然而AIGRU效果并不是很好,因为即使0的输入也会改变GRU的输入状态,所以相关性小的兴趣也影响了兴趣进化过程的学习。
- Attention based GRU(AGRU):具体来说,AGRU利用Attention分数替代GRU中的更新门,直接对隐状态进行更新,公式: 。在兴趣进程过程中,AGRU直接利用attention分数来直接控制隐藏状态的更新。AGRU削弱了兴趣进化中低相关兴趣的影响,将注意力机制嵌入到GRU提高了注意力机制的影响,有助于AGRU克服AIGRU的缺陷。
- GRU with attentional update gate(AUGRU): ; 。在AUGRU中,保留了更新门中的原始信息,这决定了每个维度的不同影响。利用attention分数来缩放更新门的所有维度,这将导致相关性较小的兴趣对隐藏状态影响较小。AUGRU可以更有效的避免兴趣漂移带来的干扰,推动相关的兴趣平稳的进化。