Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

读论文推荐系统之ctr预估-DSIN模型解析 #11916

Open
guevara opened this issue Dec 5, 2024 · 0 comments
Open

读论文推荐系统之ctr预估-DSIN模型解析 #11916

guevara opened this issue Dec 5, 2024 · 0 comments

Comments

@guevara
Copy link
Owner

guevara commented Dec 5, 2024

(读论文)推荐系统之ctr预估-DSIN模型解析



https://ift.tt/2TvLjcH



Jesse_jia


本人才疏学浅,不足之处欢迎大家指出和交流。

继续更新,今天要分享的是阿里系第三篇CTR预估文章:Deep Session Interest Network(IJCAI19)。要点:作者们发现用户的行为在每一个会话和异构交叉会话中是高度同质(同构或异构)的,因此提出了DSIN模型,利用用户多个历史会话来模拟CTR预测任务中的用户系列行为。下面一起来看下吧。

原文:《Deep Session Interest Network for Click-Through Rate Prediction


一、引入



由论文中相关的介绍,虽然目前绝大多数的CTR预测模型都是从用户历史行为数据中去建模他们动态、不断变化兴趣特征,但是大多数都停留到behavior sequence序列的阶段便不再分析下去了。

而如何从用户历史行为数据中建模他们动态、不断变化的兴趣特征已经成为CTR预估的一个关键问题,如之前阿里的DIN/DIEN来建模用户的兴趣特征。但是大多数工作还是忽略了用户行为序列(sequences)内在的结构:用户的行为sequences其实是由多个会话(sessions)组成,其中多个sessions是通过用户的点击时间(同airbnb)来区分。

这里可以看到其实sessions和sequence性质上都是由多个behaviors组成。但是session是根据一定时间规则对sequence进行划分的结果。 (一个sequence由k个session组成 )

如下图,将用户的点击行为按照时间排序,判断每两个行为之间的时间间隔,前后的时间间隔大于30min,就进行切分。可以看到,第一个session中,用户查看的都是跟裤子相关的物品,第二个session中,查看的是戒指相关的物品,第三个则是上衣相关。从中可以观察到用户的行为在每一个session中行为是高度相近的(同构),在不同session间行为是差别较大的(异构)。

这说明用户在同一个session下对购买商品有一个明确的、单独的需求,但是一旦开启一个新的session,他的兴趣将会发生很大的变化。基于该观察,作者提出了一个CTR预估模型,被称作Deep Session Interest Network(DSIN)。该模型充分利用了用户的多个历史行为sessions。

模型要点:

· 首先,根据点击时间将用户的行为序列划分成多个sessions,并使用带有bias编码的自注意力模块来抽取用户每个session的兴趣特征

· 在第二部分使用Bi-LSTM去捕捉用户在多个历史会话中兴趣的交互和演变

· 最后使用local activation单元来整合目标item对于不同session兴趣的重要性


二、模型


Base Model

Base Model是一个MLP网络,在base model中输入特征分为三部分:用户特征,待推荐物品特征,用户历史行为序列特征(UBS)。用户特征包括性别、城市、用户ID等等,待推荐物品特征包含商家ID、品牌ID等等,用户历史行为序列特征主要是用户最近点击的物品ID序列。当然一些item的side information也可以加到输入特征中。

这些特征分别通过Embedding层转换为对应的embedding向量,拼接后输入到多层全连接中,并使用logloss指导模型的训练。(也就是普通的DNN)

DSIN

整体的结构如上图所示,模型在MLP之前DSIN包含左右两大部分,其中左边部分是用户特征和待推荐物品特征通过embedding层转换对应的向量表示然后进行拼接;右边部分主要是对用户行为序列进行建模,是本文重点,从下到上分为四层:

1、session division layer

如下图将用户的历史点击行为序列S进行切分:首先将用户的点击行为按照时间排序,判断每两个行为之间的时间间隔,如果前后的时间间隔大于30min,就进行切分。切分后,我们可以将用户的行为序列S转换成会话序列Q。第k个会话Qk=[b1,b2,…,bi,…,bT] , 其中,T是会话的长度, bᵢ 是会话中第i个行为。(分解的方式可以视实际情况,论文中作者是按间隔时间30分钟来分解的。)

前文说到在同一个session中的行为是高度相近的,而用户在当前session下的随意的一些行为会使得session的兴趣表示变得不准确。所以这里对每个会话都使用Transformer中的多头自注意力机制(multi-head self-attention)来抽取用户session的兴趣特征,捕获行为之间内部关系,减少不大相关行为的影响。有关多头自注意力机制,请参考:细讲 | Attention Is All You Need

具体过程为:为用户行为序列中的每个session添加一个Positional Encoding,该模块被称为Bias Encoding ,BE中的每个元素都分为三块:

其中BE是K×T×d维的。BE(k,t,c)是第k个session中,第t个物品的embedding向量的第c个位置的偏置项。也就是说,对每个session中的每个物品对应的embedding的每个位置,都加入了偏置项。加入偏置项后更新Q,Q是用户行为session的表示:

在推荐系统中,用户的点击行为会受各种因素影响,比如颜色、款式和价格(这些就作为多头注意力中的head)。Mulit-head self attention 模块可以在不同的表示子空间层面上建模这种关系。这里让 Qₖ 表示为:

其中 Qₖₕ 是T×dₕ的,它是 Qₖ 的第h个head,H是head的数量。其中第h个head的输出为:

然后将不同的头连接起来喂给前馈网络:

I_{k}^{Q}=FFN(Concat(head_{1},...,head_{H})W^{O})

经过Mulit-head self attention 处理之后,每个Session得到的结果仍然是T * d大小的,随后,经过一个avg pooling操作,将每个session兴趣转换成一个d维向量。

I_{k} = Avg(I_{k}^{Q})

3、session interest interacting layer

在提取出每个session的interest后,很自然就会想要去捕获不同session之间的顺序关系,这里DSIN使用了Bi-LSTM来做这件事。每个时刻的hidden state计算如下:

相加的两项分别是前向传播和反向传播对应的t时刻的hidden state。这里得到的隐藏层状态Ht,可认为是混合了上下文信息的会话兴趣。

4、session interest activating layer

这一层建模不同session和target item的关联度。也就是说用户的会话兴趣与目标物品越相近,越应该赋予更大的权重。使用注意力机制来刻画这种相关性:

同样,对于混合了上下文信息的会话兴趣,也进行同样的处理:

最后将User profile向量、Item profile向量、会话兴趣加权向量UI、带上下文信息的会话兴趣加权向量UH进行横向拼接,输入到全连接层中,得到最终的输出。


三、实验



作者在广告和推荐系统上都有评估。使用了两个数据集进行了实验,分别是阿里妈妈的广告数据集和阿里巴巴的电商推荐数据集。对比模型有YoutubeNet、Wide & Deep、DIN 、DIN-RNN、DIEN,评价指标为AUC。结果:

其他相关实验细节参阅原论文。


实现DSIN的一个Demo,感兴趣的童鞋可以看下我的[github]







via Jesse's Blog

December 5, 2024 at 07:10PM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant