CategoryResourceRepost/极客时间专栏/深度学习推荐系统实战/推荐模型篇/21|注意力机制、兴趣演化:推荐系统如何抓住用户的心?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

118 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="21注意力机制、兴趣演化推荐系统如何抓住用户的心" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/a1/21/a105760f4e79103861027ce0c8b81421.mp3"></audio>
你好,我是王喆。
近几年来,注意力机制、兴趣演化序列模型和强化学习,都在推荐系统领域得到了广泛的应用。它们是深度学习推荐模型的发展趋势,也是我们必须要储备的前沿知识。
作为一名算法工程师足够的知识储备是非常重要的因为在掌握了当下主流的深度学习模型架构Embedding MLP架构、Wide&amp;Deep和DeepFM等等之后要想再进一步提高推荐系统的效果就需要清楚地知道业界有哪些新的思路可以借鉴学术界有哪些新的思想可以尝试这些都是我们取得持续成功的关键。
所以,我会用两节课的时间,带你一起学习这几种新的模型改进思路。今天我们先重点关注注意力机制和兴趣演化序列模型,下节课我们再学习强化学习。
## 什么是“注意力机制”?
**“注意力机制”来源于人类天生的“选择性注意”的习惯**。最典型的例子是用户在浏览网页时,会有选择性地注意页面的特定区域,而忽视其他区域。
比如图1是Google对大量用户进行眼球追踪实验后得出的页面注意力热度图。我们可以看到用户对页面不同区域的注意力区别非常大他们的大部分注意力就集中在左上角的几条搜索结果上。
那么,“注意力机制”对我们构建推荐模型到底有什么价值呢?
[<img src="https://static001.geekbang.org/resource/image/3a/5f/3a3cb86da13876d679c16f4ec955645f.jpg" alt="" title="图1 Google搜索结果的注意力热度图">](https://www.researchgate.net/figure/Heat-Map-Golden-Triangle-pattern-shown-by-the-heat-map-of-how-users-focus-on-a_fig1_267025472)
价值是非常大的。比如说,我们要做一个新闻推荐的模型,让这个模型根据用户已经看过的新闻做推荐。那我们在分析用户已浏览新闻的时候,是把标题、首段、全文的重要性设置成完全一样比较好,还是应该根据用户的注意力不同给予不同的权重呢?当然,肯定是后者比较合理,因为用户很可能都没有注意到正文最后的几段,如果你分析内容的时候把最后几段跟标题、首段一视同仁,那肯定就把最重要的信息给淹没了。
事实上近年来注意力机制已经成功应用在各种场景下的推荐系统中了。其中最知名的要数阿里巴巴的深度推荐模型DINDeep Interest Network深度兴趣网络。接下来我们就一起来学习一下DIN的原理和模型结构。
### 注意力机制在深度兴趣网络DIN上的应用
DIN模型的应用场景是阿里最典型的电商广告推荐。对于付了广告费的商品阿里会根据模型预测的点击率高低把合适的广告商品推荐给合适的用户所以DIN模型本质上是一个点击率预估模型。
注意力机制是怎么应用在DIN模型里的呢回答这个问题之前我们得先看一看DIN在应用注意力机制之前的基础模型是什么样的才能搞清楚注意力机制能应用在哪能起到什么作用。
下面的图2就是DIN的基础模型Base Model。我们可以看到Base Model是一个典型的Embedding MLP的结构。它的输入特征有用户属性特征User Proflie Features、用户行为特征User Behaviors、候选广告特征Candidate Ad和场景特征Context Features
用户属性特征和场景特征我们之前也已经讲过很多次了这里我们重点关注用户的行为特征和候选广告特征也就是图2中彩色的部分。
<img src="https://static001.geekbang.org/resource/image/c1/6e/c1dbcc00dd17166ec53ca9e46b04006e.jpg" alt="" title="图2 阿里Base模型的架构图[br] (出自论文 Deep Interest Network for Click-Through Rate Prediction)">
我们可以清楚地看到用户行为特征是由一系列用户购买过的商品组成的也就是图上的Goods 1到Goods N而每个商品又包含了三个子特征也就是图中的三个彩色点其中红色代表商品ID蓝色是商铺ID粉色是商品类别ID。同时候选广告特征也包含了这三个ID型的子特征因为这里的候选广告也是一个阿里平台上的商品。
我们之前讲过在深度学习中只要遇到ID型特征我们就构建它的Embedding然后把Embedding跟其他特征连接起来输入后续的MLP。阿里的Base Model也是这么做的它把三个ID转换成了对应的Embedding然后把这些Embedding连接起来组成了当前商品的Embedding。
完成了这一步下一步就比较关键了因为用户的行为序列其实是一组商品的序列这个序列可长可短但是神经网络的输入向量的维度必须是固定的那我们应该怎么把这一组商品的Embedding处理成一个长度固定的Embedding呢图2中的SUM Pooling层的结构就给出了答案就是直接把这些商品的Embedding叠加起来然后再把叠加后的Embedding跟其他所有特征的连接结果输入MLP。
但这个时候问题又来了SUM Pooling的Embedding叠加操作其实是把所有历史行为一视同仁没有任何重点地加起来这其实并不符合我们购物的习惯。
举个例子来说候选广告对应的商品是“键盘”与此同时用户的历史行为序列中有这样几个商品ID分别是“鼠标”“T恤”和“洗面奶”。从我们的购物常识出发“鼠标”这个历史商品ID对预测“键盘”广告点击率的重要程度应该远大于后两者。从注意力机制的角度出发我们在购买键盘的时候会把注意力更多地投向购买“鼠标”这类相关商品的历史上因为这些购买经验更有利于我们做出更好的决策。
好了现在我们终于看到了应用注意力机制的地方那就是用户的历史行为序列。阿里正是在Base Model的基础上把注意力机制应用在了用户的历史行为序列的处理上从而形成了DIN模型。那么DIN模型中应用注意力机制的方法到底是什么呢
我们可以从下面的DIN模型架构图中看到与Base Model相比DIN为每个用户的历史购买商品加上了一个激活单元Activation Unit这个激活单元生成了一个权重这个权重就是用户对这个历史商品的注意力得分权重的大小对应用户注意力的高低。
<img src="https://static001.geekbang.org/resource/image/ed/30/edd028f815ef3577553ffe045f042330.jpg" alt="" title="图3 阿里DIN模型的架构图[br] (出自论文 Deep Interest Network for Click-Through Rate Prediction)">
那现在问题就只剩下一个了这个所谓的激活单元到底是怎么计算出最后的注意力权重的呢为了搞清楚这个问题我们需要深入到激活单元的内部结构里面去一起来看看图3右上角激活单元的详细结构。
它的输入是当前这个历史行为商品的Embedding以及候选广告商品的Embedding。我们把这两个输入Embedding与它们的外积结果连接起来形成一个向量再输入给激活单元的MLP层最终会生成一个注意力权重这就是激活单元的结构。简单来说**激活单元就相当于一个小的深度学习模型它利用两个商品的Embedding生成了代表它们关联程度的注意力权重**。
到这里我们终于抽丝剥茧地讲完了整个DIN模型的结构细节。如果你第一遍没理解清楚没关系对照着DIN模型的结构图反复再看几遍我刚才讲的细节相信你就能彻底消化吸收它。
### 注意力机制对推荐系统的启发
注意力机制的引入对于推荐系统的意义是非常重大的,它模拟了人类最自然,最发自内心的注意力行为特点,使得推荐系统更加接近用户真实的思考过程,从而达到提升推荐效果的目的。
从“注意力机制”开始,越来越多对深度学习模型结构的改进是基于对用户行为的深刻观察而得出的。由此,我也想再次强调一下,**一名优秀的算法工程师应该具备的能力,就是基于对业务的精确理解,对用户行为的深刻观察,得出改进模型的动机,进而设计出最合适你的场景和用户的推荐模型。**
沿着这条思路阿里的同学们在提出DIN模型之后并没有停止推荐模型演化的进程他们又在2019年提出了DIN模型的演化版本也就是深度兴趣进化网络DIENDeep Interest Evolution Network。这个DIEN到底在DIN的基础上做了哪些改进呢
## 兴趣进化序列模型
无论是电商购买行为,还是视频网站的观看行为,或是新闻应用的阅读行为,特定用户的历史行为都是一个随时间排序的序列。既然是和时间相关的序列,就一定存在前后行为的依赖关系,这样的序列信息对于推荐过程是非常有价值的。为什么这么说呢?
我们还拿阿里的电商场景举个例子。对于一个综合电商来说,用户兴趣的迁移其实是非常快的。比如,上一周一位用户在挑选一双篮球鞋,这位用户上周的行为序列都会集中在篮球鞋这个品类的各个商品上,但在他完成这一购物目标后,这一周他的购物兴趣就可能变成买一个机械键盘,那这周他所有的购买行为都会围绕机械键盘这个品类展开。
因此如果我们能让模型预测出用户购买商品的趋势肯定会对提升推荐效果有益。而DIEN模型正好弥补了DIN模型没有对行为序列进行建模的缺陷它围绕兴趣进化这个点进一步对DIN模型做了改进。
图4就是DIEN模型的架构图这个模型整体上仍然是一个Embedding MLP的模型结构。与DIN不同的是DIEN用“兴趣进化网络”也就是图中的彩色部分替换掉了原来带有激活单元的用户历史行为部分。这部分虽然复杂但它的输出只是一个h'(T)的Embedding向量它代表了用户当前的兴趣向量。有了这个兴趣向量之后再把它与其他特征连接在一起DIEN就能通过MLP作出最后的预测了。
<img src="https://static001.geekbang.org/resource/image/56/a0/56c93e11aa3503852c37cd18db740da0.jpg" alt="" title="图4 DIEN模型的架构图 (出自论文 Deep Interest Evolution Network for Click-Through Rate Prediction">
好了现在问题的焦点就在DIEN模型是如何生成这个兴趣向量的。关键就在于DIEN模型中彩色部分的三层兴趣进化网络下面我就按照从下到上的顺序给你讲讲它们的名称和作用。
**最下面一层是行为序列层**Behavior Layer浅绿色部分。它的主要作用和一个普通的Embedding层是一样的负责把原始的ID类行为序列转换成Embedding行为序列。
**再上一层是兴趣抽取层**Interest Extractor Layer浅黄色部分。它的主要作用是利用GRU组成的序列模型来模拟用户兴趣迁移过程抽取出每个商品节点对应的用户兴趣。
**最上面一层是兴趣进化层**Interest Evolving Layer浅红色部分。它的主要作用是利用AUGRU(GRU with Attention Update Gate)组成的序列模型在兴趣抽取层基础上加入注意力机制模拟与当前目标广告Target Ad相关的兴趣进化过程兴趣进化层的最后一个状态的输出就是用户当前的兴趣向量h'(T)。
你发现了吗兴趣抽取层和兴趣进化层都用到了序列模型的结构那什么是序列模型呢直观地说图5就是一个典型的序列模型的结构它和我们之前看到的多层神经网络的结构不同序列模型是“一串神经元”其中每个神经元对应了一个输入和输出。
在DIEN模型中神经元的输入就是商品ID或者前一层序列模型的Embedding向量而输出就是商品的Embedding或者兴趣Embedding除此之外每个神经元还会与后续神经元进行连接用于预测下一个状态放到DIEN里就是为了预测用户的下一个兴趣。这就是序列模型的结构和作用。
[<img src="https://static001.geekbang.org/resource/image/f6/37/f69c0f565b5fa31023b727192d3b1d37.jpg" alt="" title="图5 RNN模型的经典结构 ">](https://towardsdatascience.com/introduction-to-recurrent-neural-networks-rnn-with-dinosaurs-790e74e3e6f6)
至于上面提到过的GRU序列模型它其实是序列模型的一种根据序列模型神经元结构的不同最经典的有[RNN](https://arxiv.org/pdf/1406.1078.pdf)、[LSTM](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.676.4320&amp;rep=rep1&amp;type=pdf)、[GRU](https://arxiv.org/pdf/1412.3555.pdf)这3种。这里我们就不展开讲了对理论感兴趣的同学可以点击我给出的超链接参考这几篇论文做更深入的研究。
[<img src="https://static001.geekbang.org/resource/image/be/02/bed695e253a49e6f08a6627782ec9202.jpg" alt="" title="图6 序列模型中的不同单元结构">](http://dprogrammer.org/rnn-lstm-gru)
事实上序列模型已经不仅在电商场景下成功应用于推测用户的下次购买行为在YouTube、Netflix等视频流媒体公司的视频推荐模型中序列模型也用来推测用户的下次观看行为Next Watch。除此之外音乐类应用也非常适合使用序列模型来预测用户的音乐兴趣变化。所以掌握DIEN模型的架构对于拓宽我们的技术视野非常有帮助。
## 小结
注意力机制和兴趣演化序列模型的加入,让推荐系统能够更好地抓住用户的心。
对于注意力机制来说它主要模拟了人类注意力的天性。具体到阿里的DIN模型上它利用激活单元计算出用户对于不同历史商品的注意力权重针对当前广告商品作出更有针对性的预测。
而序列模型更注重对序列类行为的模拟和预测。典型的例子是DIEN模型对用户购买兴趣进化过程的模拟。DIEN模型可以应用的场景非常广泛包括电商平台的下次购买视频网站的下次观看音乐App的下一首歌曲等等。
总的来说,注意力机制的引入是对经典深度学习模型的一次大的改进,因为它改变了深度学习模型对待用户历史行为“一视同仁”的弊端。而序列模型则把用户行为串联起来,让用户的兴趣随时间进行演化,这也是之前的深度学习模型完全没有考虑到的结构。
最后,我把今天的重要概念总结在了表格中,方便你及时查看和复习。
<img src="https://static001.geekbang.org/resource/image/c3/e0/c38e2d57f570c0e3ea5c0d616397b2e0.jpeg" alt="">
## 课后思考
DIN使用了一个结构比较复杂的激活单元来计算注意力权重你觉得有没有更简单、更实用的方式来生成注意力权重呢其实计算注意力权重就是为了计算历史行为物品和广告物品的相关性在这个过程中你觉得能不能利用到特征交叉的知识呢为什么
欢迎把你的思考和疑问写在留言区,如果你的朋友们也在关注注意力机制和兴趣演化序列模型的发展,那不妨也把这节课转发给他们,我们下节课见!