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

在前面的文章中,DIN模型 在用户行为序列建模中引入注意力机制来强调加权与target item相关的行为,以实现动态的兴趣表征;而DIEN模型 则在DIN的基础上加入时间性信息,使用注意力机制的GRU来挖掘用户兴趣的演变。

而今天的这篇文章也是继续这个主题,再介绍一个引入将行为序列切分session来对用户兴趣建模的模型:DSIN(Deep Session Interest Network)

概要

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

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

这篇论文认为许多研究都忽视了序列的内在结构:序列是由sessions组成,sessions是按照发生时间切分的用户行为

并且观察到用户的行为在每个session里几乎都是同类(homogeneous)的,而在不同session之间又是混杂(heterogeneous)的,即用户在某一时间内的行为会集中在某一个“类别/主题”上,而在另一个时间段内则集中在另外一个“类别/主题”上

如下图所示,是一个从真实场景下收集到的数据,下面的数字代表了当前点击商品与第一次点击商品的时间gap(单位为秒),session按照是否超过30min进行切分。

基础观察到这种规律,论文提出了DSIN(Deep Session Interest Network)来通过利用多个历史sessions来建模用户的行为序列。DSIN包含三个关键的组件:

  1. 将用户的行为序列切分多个sessions,然后使用带着偏置编码(bias encoding)的自注意力网络来建模多个sessions。自注意力可以捕获session之间的内在交互/相关关系,然后提取每个session的用户兴趣,因为这些不同的sessions可能会彼此相互关联,遵循一种序列化的模式;
  2. 接着,使用双向LSTM(Bi-LSTM) 来捕获这些不同的历史session兴趣的交互和演变;
  3. 最后,考虑不同的session兴趣对target item有着不一样的影响,设计了一个**局部激活单元(local activation uint)**去聚合它们,去建模行为序列的最终表征

这里的自注意力类似于transformer,将每个session类比token,可以前往这篇文章BERT模型系列大全解读回顾下transformer和自注意力。

基础模型

在前面的两篇相关文章 CTR之行为序列建模用户兴趣:DIN和CTR之行为序列建模用户兴趣:DIEN中都详细地介绍了Base Model,其主要包括四部分:特征表征(Feature Representation)、Embedding、Multiple Layer Perceptron (MLP)和损失函数

具体的内容在这里就不再赘述了,但记住几个后面涉及的符号:

  • 用户行为embeddings: S = [ b 1 ; . . . ; b i ; . . . ; b N ] ∈ R N × d m o d e l S=[b_1;...;b_i;...;b_N] \in \mathbb{R}^{N \times d_{model}} S=[b1;...;bi;...;bN]RN×dmodel
  • target item属性(Item Profile)表征embeddings: X I ∈ R N i × d m o d e l X^I \in \mathbb{R}^{N_i \times d_{model}} XIRNi×dmodel

#DSIN结构

如上图所示,DSIN在底层的特征表征和Embedding的后面,MLP的前面,即中间部分加入了四个特殊的网络层:

  1. session划分层,将行为序列分割成不同的sessions;
  2. session兴趣提取层,提取用户的session兴趣;
  3. session兴趣交互层,捕获session兴趣之间的序列关系;
  4. session兴趣激活层,考虑(w.r.t) target item,对用户session兴趣应用局部激活单元。这与DIN中attention和DIEN中的GRU with attention一样的思想,来激活与target item更为相关的行为序列或兴趣序列。

session划分层

为了提取用户更为准确的session兴趣,论文将用户行为序列S划分成sessions集合Q,第k个session表示为:

Q k = [ b 1 ; . . . ; b i ; . . . ; b T ] ∈ R T × d m o d e l Q_k=[b_1;...;b_i;...;b_T] \in \mathbb{R}^{T \times d_{model}} Qk=[b1;...;bi;...;bT]RT×dmodel

  • T是session保留的行为数量, b i b_i bi是session里的第i个行为。
  • 用户sessions的分割是以时间间隔超过30min的相邻行为。即当两个相邻的行为时间超过30min的话,会以它们为界限,前面一个行为保留在当前session,后面一个行为会开启一个新的session。该做法出自《Framewise phoneme classification with bidirectional LSTM networks》的做法。

session兴趣提取层

在同一个session里的行为之间是强相关的。另外,在一个session里,用户那些随意的行为会让session兴趣偏离它原本的表现。

为了捕获同一个session的行为之间的内在关系,降低那些不相关的行为的影响,论文使用了多头自注意力,并且进行了一些优化工作。

偏置编码

为了利用序列的顺序相关信息,自注意力机制给输入embeddings加入了位置编码。

而sessions的顺序相关信息和不同表征子空间的偏置同样需要被捕获,论文在位置编码的bias加入了bias encoding BE ∈ R K × T × d m o d e l \in \mathbb{R}^{K \times T \times d_{model}} RK×T×dmodel,具体如下式:

  • w K ∈ R K w^K \in \mathbb{R}^K wKRKsession的偏置向量,k是session的索引
  • w T ∈ R T w^T \in \mathbb{R}^T wTRT 是session中的位置的偏置向量,t是行为在session里的索引
  • w C ∈ R d m o d e l w^C \in \mathbb{R}^{d_{model}} wCRdmodel行为embedding中的单位(unit)位置的偏置向量,c是unit在embedding中的索引

加入偏置编码之后,用户的行为sessions Q 则更新为:

Q = Q + B E Q=Q+BE Q=Q+BE

多头自注意力

在推荐系统中,用户的点击行为是被许多多样的因素影响的,比如颜色、风格和价格等。多头自注意力可以捕获不同表征子空间的相关性。论文中使用的多头自注意力跟标准的Transformer其实是一样的结构。

Q k = [ Q k 1 ; . . . ; Q k h ; . . . ; Q k H ] Q_k=[Q_{k1};...;Q_{kh};...;Q_{kH}] Qk=[Qk1;...;Qkh;...;QkH],其中 Q k h ∈ R T × d h Q_{kh} \in \mathbb{R}^{T \times d_h} QkhRT×dh Q k Q_k Qk的第h个head,H是heads的数量, d h = 1 h d m o d e l d_h=\frac{1}{h}d_{model} dh=h1dmodel

那么,第h个head的计算如下式:

其中, W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV 是线性矩阵。

接着,所有heads的向量进行拼接,喂给前馈网络层(feed-forward network,FFN):

其中, W O W^O WO是线性矩阵,并且同样保留残差连接和layer normalization

那么,用户的第k个session兴趣 I k I_k Ik 如下式:

I k = A v g ( I k Q ) I_k=Avg(I_k^Q) Ik=Avg(IkQ)

需要注意的是,自注意力的参数在不同的sessions中是共享的

session兴趣交互层

用户的session兴趣与上下文的其他sessions是有着顺序相关性的,对动态的变化进行建模可以丰富session兴趣之间的相关性信息

而LSTM则是善于捕获这种顺序相关性,能够建模session兴趣之间的交互。

其中, σ ( ⋅ ) \sigma(\cdot) σ()是sigmoid函数,ifo,和 c 分别是输入门控,遗忘门控,输出门控和cell向量,与 I t I_t It有着相同的size。

双向则意味着存在一个前向的RNN和后向的RNN,那么,其隐状态 H 计算如下式:

H t = h f t → ⊕ h b t ← H_t=\overrightarrow{h_{ft}} \oplus \overleftarrow{h_{bt}} Ht=hft hbt

其中, h f t → \overrightarrow{h_{ft}} hft 是前向LSTM的隐状态, h b t ← \overleftarrow{h_{bt}} hbt 是后向LSTM的隐状态。

session兴趣激活层

与target item更相关的用户的session兴趣会对用户是否点击起着更为重要的影响。那么,用户session兴趣对于target item的权重计算问题便随之而来。

注意力机制 使用source和target的软对齐已经被证明是一种有效的权重分配方法,论文也使用该方法,考虑target item,session兴趣的自适应表征计算如下式:

同理,融合了上下文信息的session兴趣表征计算如下式:

最后,用户属性(User Profile)和item属性(Item profile)的embedding向量,与 U I , U H U^I,U^H UI,UH进行拼接和压平(flatten),输入到最后的MLP层。

实验结果

基线对比

AUC公式

总结

  1. 论文认为在推荐系统中,用户的行为序列是由多个历史sessions构成,在不同的session中展现了不同的兴趣;
  2. 然后,使用多头注意力来捕获session行为的内存相关性,并且提取每一个session兴趣
  3. 另外,用户的session兴趣是序列化的,并且彼此相关联,因此用适合序列结构的双向LSTM来捕获session之间的交互和session兴趣的变化;
  4. 最后再使用注意力机制来激活那些与target item更为相关的session兴趣;
  5. 不过对于某些场景,比如新闻推荐类似的信息流场景,用户大部分并不是主动行为,那么点击的序列可能就不具备很强的连续性了,因此不满足一个session内的点击都是同类(homogeneous)的,这种场景下DSIN就并不一定适用了。

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

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

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

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.mzph.cn/news/771788.shtml

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

相关文章

jspssm_maven项目——KTV点歌系统

目录 背景 技术简介 系统简介 界面预览 背景 随着互联网的广泛渗透和进步,基于网络技术的KTV点歌系统迅速壮大,其发展始终围绕用户的实际需求展开。通过深入洞察用户的需求,开发出高度定制的管理平台,利用网络的便捷性对系统…

8.软件工程

整个章节偏向于记忆、背诵; 主要议题: 软件体系:3层; UML重点,重点记3要素中的关系、图; 1.软件体系结构 分层 优点:利于软件的重复利用; 缺点:以什么方式分层&#…

音频RK809

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、目的二、知识准备2.1Audio框架2.1.1 DAI2.1.2 CODEC2.1.3 machine三、原理图3.1 整体原理图3.2 喇叭部分3.3 麦克风部分四、设备树4.1 sound 部分4.2 codec 部分五、驱动讲

用友软件公司面试总结

一、自我介绍 二、质询 1. 对本公司的了解? 2. 身边同学对你的印象,认知、评价? 3. 你觉得身边人的评价符合吗? 4. 你觉得你的优点是什么? 5. 哪里人?会粤语吗? 6. 你对公司有多少了解&a…

使用Urllib库创建第一个爬虫程序

Urllib 是 Python 的标准库,它提供了一系列用于处理 URL 的函数和类,包括发送 HTTP 请求、处理 HTTP 响应、解析 URL 等功能。可以使用 urllib 来编写简单的网络爬虫。 request:它是最基本的HTTP请求模块,可以用来模拟发送请求。只…

【JavaScript 漫游】【044】Web Worker

文章简介 本篇文章为【JavaScript 漫游】专栏的第 044 篇文章,对浏览器模型的 Web Worker 相关知识点进行了总结。 概述 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任…

设计模式|观察者模式(Observer Pattern)

文章目录 初识观察者模式优缺点示例代码(使用 Java 实现)有哪些知名的框架采用了观察者模式常见面试题 初识观察者模式 观察者模式(Observer Pattern)是一种软件设计模式,属于行为型模式。它定义了一种一对多的依赖关…

仿mudo库实现高并发服务器实现文章整合

相关文章实现与转载 (按实际项目流程发布) 时间轮设计-CSDN博客 正则表达式的使用-CSDN博客 bind函数的认识与基本使用-CSDN博客 timerfd的认识与基本使用-CSDN博客 Buffer缓冲区类实现(模块一)-CSDN博客 日志打印宏的编写-CSDN博客 Socket套接字类实现(模块二)-CSDN博…

C#语言规范及特殊用法笔记

前言 记录在学习C#过程中遇到的知识点,会持续更新。 1. 常用数据类型结构的默认值 创建类的一个实例时,在执行构造函数之前,如果没给成员变量赋初始值,C#编译器将每一个成员变量初始化为默认值。虽然C#编译器为每个类型都设置了…

MySQL 8.0.35 企业版开启审计audit log功能

一、系统环境和要求 在MySQL中,开启日志审计可以记录数据库的操作日志,包括修改、删除、插入等操作。这对于追踪和分析数据库的使用情况以及排查潜在的安全问题非常有帮助。本文将详细介绍如何开启MySQL的日志审计功能。 操作系统:Ubuntu 20…

人工智能 框架 paddlepaddle 飞桨 使用指南 使用例子 线性回归模型demo 1

安装过程&使用指南&线性回归模型 使用例子 本来预想 是安装 到 conda 版本的 11.7的 但是电脑没有gpu 所以 安装过程稍有变动,下面简单讲下 conda create -n paddle_env117 python=3.9 由于想安装11.7版本 py 是3.9 所以虚拟环境名称也是 paddle_env117 activa…

6 Spring-AOP

文章目录 1,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给容器…

数据库SQLSever——数据查询

一、无条件查询 查询表的所有信息 SELECT * FROM 表名 例:查询学生表 SELECT * FROM student087 二、根据列名查询 根据列名查询表信息 SELECT [列名],[列名],.... FROM 表名 例:查询学生表的学生学号和姓名 SELECT SNO,SNAME FROM STU…

OD_2024_C卷_100分_70、停车场车辆统计【JAVA】【逻辑分析】

题目描述 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。 车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位&#…

常用设计模式介绍

前言 简说设计模式。 文章目录 前言一、设计模式的要素1、设计模式解决的问题2、设计模式分类1)创建型设计模式2)结构型设计模式3)行为型设计模式 二、详细介绍1、创建型设计模式1)工厂方法模式2)抽象工厂模式3&#x…

基于FPGA的光纤通信系统设计

文章目录 光纤通信系统的组成发送端FPGA端口定义状态机设计代码示例 接收端功能模块端口定义状态机设计 光纤通信系统的组成 发送端FPGA 发送控制逻辑、数据编码、校验码生成、缓存控制、时钟控制 端口定义 状态机设计 代码示例 接收端功能模块 接收端控制逻辑、数据解码、…

谈谈伦敦银投资的价值吗?

白银作为贵金属家族中的一员,当然有着其自身的经济价值和投资价值,尤其是在通货膨胀或货币贬值的时候,伦敦银的价格往往会上涨,投资者参与其中就能起到保值增值的作用。 此外,白银还是一种很好的避险资产,…

AST学习三---构造节点

题目:将 var a 3; 通过AST替换成 var a 12; 本次所用到的知识 1.path.replaceWith (单)节点替换函数,调用方式 path.replaceWith(newNode); 实参一般是node类型,即将当前遍历的path替换为实参里的新节点 注意,它不能用于Array的替换,即实参不能是Array的类型 2.babel/…

突破编程_C++_STL教程( copy 算法)

1 std::copy 算法的概念与用途 std::copy 是 C 标准库中的一种算法&#xff0c;主要用于将一个范围内的元素从一个位置复制到另一个位置。其函数原型如下&#xff1a; template<class InputIterator, class OutputIterator> OutputIterator copy(InputIterator first…

电商api数据接口开发亚马逊国际按关键字搜索商品API请求key接入演示

要使用亚马逊国际API按关键字搜索商品&#xff0c;你需要使用item_search请求。首先&#xff0c;你需要注册一个开发者账号并获取API密钥&#xff08;API Key和API Secret&#xff09;。然后&#xff0c;你可以使用以下Python代码示例来按关键字搜索商品&#xff1a; # coding…