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

news2025/1/6 17:48:16

在前面的文章中,已经介绍了很多关于推荐系统中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.coloradmin.cn/o/1461481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端|Day5:盒子模型(黑马笔记)

Day5:盒子模型 目录 Day5:盒子模型一、选择器1.结构伪类选择器基本使用 2. :nth-child(公式)3.伪元素选择器 二、PxCook三、盒子模型1.盒子模型-组成2.边框线四个方向单方向边框线 3.内边距4.尺寸计算5.外边距6.版心居中7.清除默认样式8.元素溢出9.外边距问题合并现象外边距塌陷…

14. UE5 RPG使用GameplayTag

GameplayTag本来是应用在GAS游戏技能系统里面的,后来UE直接将其抽离出来,作为一个模块,现在可以不在GAS里也可以使用这个模块。比如,我需要判断一个射线拾取的物体,首先我需要判断这个actor是否存在,然后判…

K8S实战:Centos7部署Kubernetes1.20.0集群

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建3台虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置(3台虚拟机进行相同处理)1.2.1、配置host1.2.2、关闭防火墙1.2.3、…

区块链游戏解说:什么是 Planet IX

作者:lesleyfootprint.network 编译:cicifootprint.network 数据源:Planet IX Dashboard 什么是 Planet IX Planet IX,一个由原生 IX TOKEN 推动的 Web3 玩赚平台。作为一款 GameFi 策略游戏, Planet IX 上的每项资…

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析:总体流程:1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

【C++语法基础】3.常用数学运算和位运算技巧(✨新手推荐阅读)

前言 在C编程中,数学运算是非常基础和常用的功能。C提供了多种数学运算符和函数,用于执行基本的数学计算,如加减乘除、取模运算以及位运算等。 一、加减乘除四则运算 C中的基本算术运算符包括加法()、减法(-)、乘法(*)、除法(/)。这些运算…

C++ bfs建模(六十一)【第八篇】

今天我们来学习一下bfs建模 1.bfs建模 BFS 建模 广度优先搜索是从某个起点由内向外逐层搜索(多起点 BFS 中所有起点拥有同样的搜索特性)。 搜索顺序为:1→2→3→4→5→6→7→8。 之前的课程中,我们学习过搜索树中的每个结点均表…

C++ 之LeetCode刷题记录(三十三)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,…

汽车电子论文学习---电动汽车用高功率密度碳化硅电机控制器研究

关键重点: sic的特点:耐压高、开关速度快、开关损耗小;采用sic的控制器,损耗降低70%,续航里程提高5%。sic的模块并联设计难度高于IGBT模块;多芯片并联导致热耦合问题、温升不均,导致部分芯片率…

【C++】类和对象---const成员,取地址及const取地址操作符重载,static成员

目录 ⭐const成员 ⭐取地址及const取地址操作符重载 ⭐static成员 ⭐概念 ⭐特性 ⭐const成员 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何…

字符串相乘

43. 字符串相乘https://leetcode.cn/problems/multiply-strings/ 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整…

快速学习springsecurity最新版 (版本6.2)---用户认证

简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。目前比较主流的是另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富,但是shiro并不简便,这里轻量级安全框架更推荐国产安全框架satokensatoken官网 ​ 一般大型的项目都…

Normalization,LayerNormalization和BatchNormalization

前言 假设我们的损失函数在空间中是一个曲面,这个曲面可以被我们人为的切出等高线,在采用梯度下降算法的时候,我们沿着梯度反方向迭代(梯度方向与等高线垂直),到最后我们会抵达上图曲面的最低点。 在上面的…

strings.xml补充知识

复数名词 <plurals name"book"><item name"one">book</item><item name"others">books</item> </plurals>int bookCount 4; Resources res getResources(); String bookCount res.getQuantityString(R.…

数据结构与算法:队列

在上篇文章讲解了栈之后&#xff0c;本篇也对这一章进行收尾&#xff0c;来到队列&#xff01; 队列 队列的介绍队列的存储结构队列顺序存储的不足之处 循环队列的定义队列的链式存储结构链队列的构建链队列的初始化队尾入队队头出队获取队头队尾元素判断队列是否为空获取队列元…

2023年12月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行以下程序,输出的结果是?( ) class A():def __init__(self,x):self.x=x

【MySQL】报错 Incorrect string value: ‘\xE5\xA4\xA9\xE5\x96\x9C‘ for column的解决方法

目录 解决方法如下&#xff1a;例如&#xff1a; 在向数据库中插入中文时遇到报错Incorrect string value: \xE5\xA4\xA9\xE5\x96\x9C for column &#xff0c;此时为数据库的编码格式有问题&#xff0c;可以按照如下方法修改 解决方法如下&#xff1a; 使用show create table…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0] w torch.tensor([1.0]) w.requires_grad Truedef forward(x):return x*wdef loss(x,y):y_pred forward(x)return (y_pred-y)**2…

【Web前端笔记10】CSS3新特性

10 CSS3新特性 &#xff11;、圆角 &#xff12;、阴影 &#xff08;&#xff11;&#xff09;盒阴影 &#xff13;、背景渐变 &#xff08;&#xff11;&#xff09;线性渐变&#xff08;主要掌握这种就可&#xff09; &#xff08;&#xff12;&#xff09;径向渐变 &…

什么是CODESYS开发系统

CODESYS是一种用于工业自动化领域的开发系统软件&#xff0c;提供了一个完整集成的开发环境。该软件由德国CODESYS GmbH&#xff08;原 3S-Smart Software Solutions GmbH&#xff09;公司开发&#xff0c;其最新版本为CODESYS V3。 CODESYS开发系统具有多种特性和优点。首先&a…