CTR之行为序列建模用户兴趣:DIN

在前面的文章中,已经介绍了很多关于推荐系统中CTR预估的相关技术,今天这篇文章也是延续这个主题。但不同的,重点是关于用户行为序列建模,阿里出品。

概要

论文:Deep Interest Network for Click-Through Rate Prediction

链接:https://arxiv.org/pdf/1706.06978.pdf

这篇论文是阿里2017年发表在KDD上,提出了一种新的CTR建模方法:Deep Interest Network (DIN),它最大的创新点是引入了局部激活单元(local activation unit,其实是一种Attention机制),对于不同的候选item,可以根据用户的历史行为序列,动态地学习用户的兴趣表征向量。

  • 在此之前,在DNN中,对于用户历史行为序列的处理方法一般都是pooling(sum pooling或者mean pooling等),即等同对待历史序列中的所有行为,无关于当前的候选item,如下图所示:

Base Model

  • **但用户当前的兴趣或者说当前对某个特定的item是否感兴趣,实际上应该只与某些行为是相关的。**如下图所示,用户对Candidate的大衣是否感兴趣,其实主要跟用户看过的衣服类型比较有关联,而跟其它如包包和鞋子则基本不相关。

  • 联想到FMs中,因为存在候选item和历史行为item的交叉特征,也是有类似的思想存在,但实际推荐系统工程中,很难实现所有item的交叉计算

DIN的整体网络结构其实与Base Model是差不多的,唯一的区别就是在User Behaviors建模上,如下图:

DIN结构

Base Model

Feature Reresentation.

首先,离散特征会进行one-hot或者multi-hot编码:

x = [ t 1 T , t 2 T , . . . , t M T ] T ,   t i ∈ R K i x=[t^T_1,t^T_2,...,t^T_M]^T,\ t_i \in R^{K_i} x=[t1T,t2T,...,tMT]T, tiRKi

  • K i K_i Ki 是第i个field的unique feature数量, t i [ j ] ∈ { 0 , 1 } t_i[j] \in \{0,1\} ti[j]{0,1}是一个0-1向量;
  • ∑ j = 1 K i t i [ j ] = k \sum_{j=1}^{K_i}t_i[j]=k j=1Kiti[j]=k,当k=1时, t i t_i ti是one-hot编码,k>1则是multi-hot编码。

one-hot&multi-hot编码

Embedding layer.

对于第i个field的特征 t i t_i ti,有着对应的embedding字典: W i = [ w 1 i , w 2 i , . . . , w K i i ] ∈ R D × K i W^i=[w^i_1,w^i_2,...,w^i_{K_i}] \in \mathbb{R}^{D \times K_i} Wi=[w1i,w2i,...,wKii]RD×Ki。而 w j i ∈ R D w^i_j \in R^D wjiRD则是维度为D的embedding向量。

Embedding操作其实是一种表检索机制,具体如下:

  • 如果 t i t_i ti是one-hot向量,并且第j个元素 t i [ j ] = 1 t_i[j]=1 ti[j]=1,那么 t i t_i ti的embedding表征则为 e i = w j i e_i=w^i_j ei=wji
  • 如果 t i t_i ti是multi-hot向量,并且 t i [ j ] = 1 ,   j ∈ { i 1 , i 2 , . . . , i k } t_i[j]=1,\ j\in\{i_1,i_2,...,i_k\} ti[j]=1, j{i1,i2,...,ik},那么 t i t_i ti的embedding表征则是一个embedding向量列表: { e i 1 , e i 2 , . . . , e i k } = { w i 1 i , w i 2 i , . . . , w i k i } \{e_{i_1},e_{i_2},...,e_{i_k}\}=\{w^i_{i_1},w^i_{i_2},...,w^i_{i_k}\} {ei1,ei2,...,eik}={wi1i,wi2i,...,wiki}

Pooling layer and Concat layer.

像这种multi-hot向量特征,其实就非常符合用户的行为序列特点:序列即代表存在多个行为(如点击了多个商品),并且每一个不同的用户的行为序列长度也不同。一般的处理方法则是通过pooling layer,将embedding向量列表转换为固定长度的向量(因为MLP只能处理固定长度的输入):

e i = p o o l i n g ( e i 1 , e i 2 , . . . , e i k ) e_i=pooling(e_{i_1},e_{i_2},...,e_{i_k}) ei=pooling(ei1,ei2,...,eik)

而最常用的pooling layer则是sum pooling和average pooling,即将列表中的所有向量进行element-wise的相加或者均值操作。

接着,再将所有处理过的表征向量进行拼接,得到的最终的表征向量输入。

MLP&Loss.

MLP仍然是常规的全连接网络层,为了自动学习特征组合,如PNN、Wide&Deep和DeepFM。

Base Model的目标函数使用negative log-likehood:

p ( x ) p(x) p(x)是最终网络softmax layer之后的输出,代表样本x是否被点击的概率。

Deep Interest Network

一开始提到了,用户行为序列pooling的缺点在于同等地对待序列中所有行为的item,并且对于任何候选item,同一个用户的行为序列计算的兴趣表征向量是同样不变的。另外,论文还指出固定的有限制的维度的表征向量,成为了表征用户多样的兴趣的瓶颈,但向量的维度扩展又严重增加了学习参数的规模和存储负担,这在实时推荐系统中是难以接受的,并且在有限的训练样本下也容易导致过拟合。

在这种动机下,提出了能够考虑历史行为序列和候选集的相关性来自适应计算用户的兴趣表征向量的模型DIN。通过解刨用户的点击行为动机,发现与展示的item相关的历史行为极大地贡献了点击。

给定一个候选item,DIN将attention给到局部活跃的历史行为的表征,来实现这种兴趣表征自适应计算。具体做法是引入了一种局部激活单元,应用在用户的行为序列特征上,数学上则是一种加权sum pooling来得到在候选item A A A 下用户的兴趣表征 v U v_U vU,如下式:

{ e 1 , e 2 , . . . , e H } \{e_1,e_2,...,e_H\} {e1,e2,...,eH} 是用户历史行为的embedding向量列表,长度为H, v A v_A vA则为候选item的embedding向量。

  • a ( ⋅ ) a(\cdot) a() 是一种前馈网络,其输出便作为激活权重。
  • 如下图,两个embedding向量的激活权重计算是原向量拼接它们的out product作为输入,喂给后续的网络,输出一个标量权重。这是一种显式的知识,能够帮助相关性建模。

  • 从公式明显看出,对于不同的候选item, v U v_U vU的计算结果是不同的。

Mini-batch Aware Regularization

过拟合是深度网络训练中一个关键的挑战,比如加入一些细粒度的特征,比如商品ID,模型的效果会在第一个epoch之后迅速地下降。

通常的做法是加入L1或者L2正则惩罚。在没有加入正则惩罚的情况下,每一个batch中,只有那些出现过即不为0的离散特征的参数需要更新,但L2正则惩罚却会计算整个参数的L2-norm,这会造成极其沉重的计算。

因此,论文提出Mini-batch Aware Regularization,只计算在每个batch出现过的离散特征的参数的L2-norm,并且ID类即离散特征的embedding矩阵贡献了CTR网络的绝大部分参数,只在ID类特征参数上应用。

W ∈ R D × K W \in \mathbb{R}^{D\times K} WRD×K 为embedding矩阵,embedding向量维度为D,离散特征的空间维度,即离散特征的unique id数量。在 W W W 上扩展 l 2 l_2 l2 正则如下式:

w j ∈ R D w_j \in \mathbb{R}^D wjRD 是第j个embedding向量, I ( x j ≠ 0 ) I(x_j \neq 0) I(xj=0) 表示实例x的feature id是 j j j n j n_j nj 则表示feature id j j j 在所有样本出现的次数。

上式可以简化为下式:

B是mini-batches的批次数量, B m \mathcal{B}_m Bm 则是第m个批次。

α m j = m a x ( x , y ) ∈ B m I ( x j ≠ 0 ) \alpha_{mj}=max_{(x,y)\in \mathcal{B}_m} I(x_j \neq 0) αmj=max(x,y)BmI(xj=0),表示第m个批次 B m \mathcal{B}_m Bm 至少有一个实例存在feature id j j j,那么,上式又可以近似等于下式:

最后,加入mini-batch aware regularization的embedding参数的梯度下降如下式:

自适应的激活函数

PReLU是ReLU之后最经常被使用的激活函数,其公式如下式:

PReLU

PReLU优化了ReLU在输入s小于0的场景,但仍然存在hard rectified(矫正) point,即当输入s=0时,这可能会让每一个网络层的输入变成不同的分布。

基于这种考虑,论文提出了一种数据自适应的激活函数Dice,如下式:

Dice

看到这个公式,很容易就联想到batch normalization,这两者的计算存在很多相似之处。Dice在训练阶段, E [ s ] E[s] E[s] V a r [ s ] Var[s] Var[s]是每一个批次的输入的均值和方差;而在推理阶段, E [ s ] E[s] E[s] V a r [ s ] Var[s] Var[s]则是所有训练批次数据的移动均值版本,与bn是一样的方式。

ϵ \epsilon ϵ是一个平滑常量,避免出现分母为0的情况。

Dice可以看成是PReLU的泛化版本,其关键idea是根据数据去自适应调节rectified point。 E [ s ] = 0   a n d   V a r [ s ] = 0 E[s]=0\ and\ Var[s]=0 E[s]=0 and Var[s]=0 时,Dice则退化为PReLU,两者的对比如下图:

实验结果

指标

论文衡量模型效果,使用的指标是用户加权的AUC,为了简化,还是以AUC表示,如下式:

n是用户的数量,# i m p r e s s i o n i impression_i impressioni A U C i AUC_i AUCi是第i个用户的曝光量和AUC。

另外,还加入了相比Base Model的相对提升指标,如下式:

不同模型的效果对比

不同正则的消融实验

MBA正则和Dice的效果

代码实现

git

推荐系统CTR建模系列文章:

CTR特征重要性建模:FiBiNet&FiBiNet++模型

CTR预估之FMs系列模型:FM/FFM/FwFM/FEFM

CTR预估之DNN系列模型:FNN/PNN/DeepCrossing

CTR预估之Wide&Deep系列模型:DeepFM/DCN

CTR预估之Wide&Deep系列(下):NFM/xDeepFM

CTR特征建模:ContextNet & MaskNet(Twitter在用的排序模型)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/398666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#写的一个计算DCI-P3色域和SRGB的小工具

文章最后附带分享链接与提取码 方便需要测试屏幕的小伙伴,只需要输入RGB就能得到覆盖率与比率,W计算色温,不测也要写上,不然会报错 链接:https://pan.baidu.com/s/1wdmAwmwiXjNvn1tGsvy0HA 提取码:1234

【力扣hot100】刷题笔记Day8

前言 到了大章节【链表】了,争取两三天给它搞定!! 160. 相交链表 - 力扣(LeetCode)】 双指针 参考题解,相比于求长度右对齐再一起出发的方法简洁多了 class Solution:def getIntersectionNode(self, head…

【安卓基础2】简单控件

🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职。 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频链接 (他们的视频后面一部分没再更新,看看前面…

机器人内部传感器阅读笔记及心得-位置传感器-光电编码器

目前,机器人系统中应用的位置传感器一般为光电编码器。光电编码器是一种应用广泛的位置传感器,其分辨率完全能满足机器人的技术要求,这种非接触型位置传感器可分为绝对型光电编码器和相对型光电编码器。前者只要将电源加到用这种传感器的机电…

9、使用 ChatGPT 的 GPT 制作自己的 GPT!

使用 ChatGPT 的 GPT 制作自己的 GPT! 想用自己的 GPT 超越 GPT ChatGPT 吗?那么让我们 GPT GPT 吧! 山姆 奥特曼利用这个机会在推特上宣传 GPTs 的同时还猛烈抨击了埃隆的格罗克。 GPTs概览 他们来了! 在上周刚刚宣布之后,OpenAI 现在推出了其雄心勃勃的新 ChatGPT…

微服务-Alibaba微服务nacos实战

1. Nacos配置中心 1.1 微服务为什么需要配置中心 在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此&…

Sora给中国AI带来的真实变化

OpenAI的最新技术成果——文生视频模型Sora,在春节假期炸裂登场,令海内外的AI从业者、投资人彻夜难眠。 如果你还没有关注到这个新闻,简单介绍一下:Sora是OpenAI使用超大规模视频数据,训练出的一个通用视觉模型&#x…

以程序员的视角,看前后端分离的是否必要?

Hello,我是贝格前端工场,本篇分享一个老生常谈的话题,前后端分离是必然趋势,但也是要区分具体的场景,欢迎探讨,关注,有前端开发需求可以私信我,上车了。 一、什么是前后端分离和不分…

消息队列-RabbitMQ:workQueues—工作队列、消息应答机制、RabbitMQ 持久化、不公平分发(能者多劳)

4、Work Queues Work Queues— 工作队列 (又称任务队列) 的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。我们把任务封装为消息并将其发送到队列,在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作…

【ArcGIS微课1000例】0105:三维模型转体模型(导入sketchup转多面体为例)

文章目录 一、实验概述二、三维模型转多面体三、加载多面体数据四、注意事项一、实验概述 ArcGIS可以借助【导入3D文件】工具支持主流的三维模型导入。支持 3D Studio Max (.3ds)、VRML and GeoVRML 2.0 (.wrl)、SketchUp 6.0 (.skp)、OpenFlight 15.8 (.flt)、Collaborative …

docker (八)-dockerfile制作镜像

一 dockerfile dockerfile通常包含以下几个常用命令: FROM ubuntu:18.04 WORKDIR /app COPY . . RUN make . CMD python app.py EXPOSE 80 FROM 打包使用的基础镜像WORKDIR 相当于cd命令,进入工作目录COPY 将宿主机的文件复制到容器内RUN 打包时执…

挑战杯 基于LSTM的天气预测 - 时间序列预测

0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…

【LeetCode】递归精选8题——基础递归、链表递归

目录 基础递归问题: 1. 斐波那契数(简单) 1.1 递归求解 1.2 迭代求解 2. 爬楼梯(简单) 2.1 递归求解 2.2 迭代求解 3. 汉诺塔问题(简单) 3.1 递归求解 4. Pow(x, n)(中等&…

【linux】查看openssl程序的安装情况

【linux】查看openssl程序的安装情况 1、查看安装包信息 $ rpm -qa |grep openssl 2、安装路径 $ rpm -ql openssl $ rpm -ql openssl-libs $ rpm -ql openssl-devel 3、相关文件和目录 /usr/bin/openssl /usr/include/openssl /usr/lib64/libssl.so.* /usr/lib64/libcrypto…

直接查看电脑几核芯几线程的方法

之前查看电脑几核芯几线程时都是点击 此电脑->属性->设备管理器->处理器 但是这样并不能判断是否有多线程 譬如这里,是2核芯2线程还是4核芯? 实际上,打开任务管理器后点击性能查看核芯线程数即可 所以示例这台电脑是4核芯而不是2…

视频生成模型:构建虚拟世界的模拟器 [译]

原文:Video generation models as world simulators 我们致力于在视频数据上开展生成模型的大规模训练。具体来说,我们针对不同时长、分辨率和宽高比的视频及图像,联合训练了基于文本条件的扩散模型。我们采用了一种 Transformer 架构&#…

多维时序 | Matlab实现BiLSTM-MATT双向长短期记忆神经网络融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现BiLSTM-MATT双向长短期记忆神经网络融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现BiLSTM-MATT双向长短期记忆神经网络融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab…

回显服务器

. 写一个应用程序,让这个程序可以使用网络通信,这里就需要调用传输层提供的api,传输层提供协议,主要是两个: UDP,TCP,它们分别提供了一套不同的api,socket api. UDP和TCP UDP:无连接,不可靠传输,面向数据报,全双工 TCP:有连接,可靠传输,面向字节流,全双工 一个客户端可以连接…

仪表板展示|DataEase看中国:历年研究生报考数据分析

背景介绍 在信息时代的浪潮中,研究生教育作为培养高层次专业人才的重要通道,不断吸引着广大毕业生和在职人士的关注。今天我们结合2018年~2024年的研究生报考数据,以数字为镜,深入了解近年来研究生培养态势。 本文将…

Redis篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、Redis 的回收策略(淘汰策略)?二、为什么 edis 需要把所有数据放到内存中?三、Redis 的同步机制了解么?四、Pipeline 有什么好处,为什么要用 pipeline?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…
最新文章