machine-learning-notes
  • 封面
  • 目录
  • 前言
  • 个人前言
  • 机器学习前言
    • 什么是机器学习和模式识别
    • 机器学习的应用
    • 机器学习的流程
    • 不同的机器学习算法对相同数据预测效果不同
    • 快速入门机器学习
    • 机器学习需要参考哪些书
    • 机器学习的学习路径
    • 深度学习的学习路径
    • 互联网机器学习特定岗位所需技能
  • 机器学习面试
  • 数学基础
  • 微积分
    • 泰勒展开
    • e的直观认识
    • 傅里叶变换
    • 希尔伯特空间
  • 线性代数
    • 范数
    • 矩阵求导
    • 特征值
    • 奇异值分解
  • 概率与信息论
    • 综述概率论基本定义
    • 概率论与贝叶斯先验
    • 正态分布
    • 贝叶斯概率
    • 概率符号说明
    • 共轭先验
    • 信息论
  • 数值计算与优化
    • 最小二乘法
    • 等式约束的拉格朗日乘子法
    • 凸优化
      • 凸集和凸函数
      • 凸优化问题
  • 梯度下降算法
    • 随机梯度下降SGD
    • 动量法Momentum
    • 牛顿动量Nesterov
    • AdaGrad
    • RMSprop
    • Adadelta
    • Adam
    • Nadam
    • AMSGrad
    • AdasMax
  • 概率图模型
    • 概率图模型概论
    • 概率图简介
  • 编程基础
  • linux
    • linux常用命令
    • shell
      • 输入输出重定向
  • python
    • python简介
    • python语法
      • 基础语法
      • 数据结构
      • 过程控制
      • 函数
      • 类和对象
      • 文件操作
      • 正则表达式
    • python库
      • numpy
      • pandas
      • scipy
      • matplotlib
      • scikit-learn
    • python应用
      • 排序算法
  • 数据结构与算法
    • 数据结构
    • 算法思想
      • 排序
        • 堆排序
        • 归并排序
        • 快速排序
      • 递归
    • 剑指offer
      • 链表
      • 二叉树
      • 数组
      • 字符串
      • 栈和队列
      • 递归
      • 动态规划
      • 其他
    • leetcode
    • 编程语言
      • c++
  • Hadoop
    • Hadoop简介
    • MapReduce
  • Hive
  • Spark
  • TensorFlow
    • TensorFlow1.0
      • TensorFlow基础
      • TensorFlow基础概念解析
      • TensorFlow机器学习基础
      • Tensorflow分布式架构
    • TensorFlow2.0
  • PyTorch
  • 机器学习
  • 机器学习概论
  • 特征工程
  • 感知机
  • k近邻
  • 朴素贝叶斯
  • 线性模型
    • 最大熵模型
    • 指数族分布与广义线性模型
    • 线性回归
      • Ridge回归(岭回归)
      • Lasso回归
    • Logistic回归-对数几率回归
  • 决策树
  • 支持向量机
    • 线性可分支持向量机与硬间隔最大化
    • 线性支持向量机与软间隔最大化
    • 非线性支持向量机与核函数
    • 序列最小最优化算法SMO
    • SVM总结
  • 集成学习
    • Bagging
      • 随机森林
    • Boosting
      • AdaBoost
      • GradientBoosting
        • GBDT
        • XGBoost
          • XGBoost理论
          • XGBoost实践
    • Stacking
  • 降维
    • PCA主成分分析
    • 流形学习
  • EM算法
  • HMM隐马尔科夫模型
  • CRF条件随机场
  • 聚类
    • k均值聚类
    • 高斯混合模型
  • 主题模型
    • LDA隐狄利克雷分布
  • 知识点
    • 损失函数
    • 负采样
  • 机器学习算法总结
  • 深度学习
  • 深度学习概论
  • ANN人工神经网络
  • 知识点
    • Batch Normalization
  • CNN卷积神经网络
  • 深度学习优化算法
  • RNN循环神经网络
  • LSTM长短期记忆网络
  • GRU门控循环单元
  • GNN图神经网络
    • GNN图神经网络综述
    • GCN图卷积网络
      • GCN图卷积网络初步理解
      • GCN图卷积网络的numpy简单实现
      • GCN图卷积网络本质理解
      • GCN图卷积网络全面理解
      • SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS ICLR2017
  • 神经网络架构搜索
    • Weight-Agnostic-Neural-Networks Google2019
  • 强化学习
  • 强化学习概论
  • 马尔科夫决策过程
  • 动态规划
  • 无模型方法一:蒙特卡洛
  • 无模型方法二:时间差分
  • 无模型方法三:多步自举
  • 函数近似和深度网络
  • 策略梯度算法
  • 深度强化学习
  • 基于模型的强化学习
  • 强化学习前景
  • 自然语言处理
  • 自然语言处理概论
  • 自然语言
  • 语言模型和中文分词
  • word2vec
    • word2vec概述
    • word2vec算法原理
    • word2vec源码分析
    • word2vec实践
  • Seq2Seq模型和Attention机制
  • Self-Attention和Transformer
  • 知识图谱
  • 推荐系统
  • 推荐系统概论
  • 基础知识
  • 进阶知识
    • 机器学习
      • Factorization Machines ICDM2010
    • embedding
      • Network Embedding
        • LINE: Large-scale Information Network Embedding
    • 深度学习
      • DeepFM: A Factorization-Machine based Neural Network for CTR Prediction 2017
      • DSSM: Learning Deep Structured Semantic Models for Web Search using Clickthrough Data CIKM2013
    • 图卷积网络
      • Graph Convolutional Neural Networks for Web-Scale Recommender Systems KDD2018
    • 强化学习
      • DRN基于深度强化学习的新闻推荐模型
  • 业界应用
    • YouTube
      • Deep Neural Networks for YouTube Recommendations RecSys2016
    • Alibaba
      • Learning Tree-based Deep Model for Recommender Systems KDD2018
      • Deep Interest Network for Click-Through Rate Prediction KDD2018
      • DSIN:Deep Session Interest Network for Click-Through Rate Prediction IJCAI2019
Powered by GitBook
On this page
  • DSIN:用于点击率预估的深度会话兴趣网络
  • 问题背景
  • 模型结构
  • 基本架构
  • DSIN模型
  • Session Division Layer
  • Session Interest Extractor Layer
  • Session Interest Interacting Layer
  • Session Interest Activating Layer
  • 模型试验
  • 进一步讨论
  • Effect of Multiple Sessions
  • Effect of Session Interest Interacting Layer
  • Effect of Bias Encoding
  • Visualization of Self-attention and the Activation Unit
  • 总结
  • 参考资料

Was this helpful?

  1. 业界应用
  2. Alibaba

DSIN:Deep Session Interest Network for Click-Through Rate Prediction IJCAI2019

PreviousDeep Interest Network for Click-Through Rate Prediction KDD2018

Last updated 5 years ago

Was this helpful?

DSIN:用于点击率预估的深度会话兴趣网络

问题背景

从用户行为中,我们发现,

  • 在每个会话中的行为是相近的,

  • 而在不同会话之间差别是很大的。

模型结构

基本架构

Base Model就是一个全连接神经网络,其输入的特征的主要分为三部分,

  • 用户特征XUX^UXU

  • 待推荐物品特征XIX^IXI

  • 用户历史行为序列特征SSS

损失函数:

DSIN模型

其中,激活单元具体结构和右下角方框中的各层的名称为

Session Division Layer

这一层将用户的行文进行切分,首先将用户的点击行为按照时间排序,判断每两个行为之间的时间间隔,前后的时间间隔大于30min,就进行切分。

切分后,我们可以将用户的行为序列S转换成会话序列Q。第k个会话Qk=[b1;b2;...;bi;...;bT]Q_k=[b_1;b_2;...;b_i;...;b_T]Qk​=[b1​;b2​;...;bi​;...;bT​],其中,T是会话的长度,bib_ibi​是会话中第i个行为,是一个d维的embedding向量。所以QkQ_kQk​是T∗dT*dT∗d的,而Q,则是K∗T∗dK*T*dK∗T∗d的。

Session Interest Extractor Layer

这里对每个session,使用transformer对每个会话的行为进行处理。

这里使用Bias Encoding而非transformer的Positional Encoding:

BE(k,t,c)=wkK+wtT+wcCBE_{(k,t,c)}=w^K_k+w^T_t+w^C_cBE(k,t,c)​=wkK​+wtT​+wcC​

加入偏置项后,Q变为:

Q=Q+BEQ=Q+BEQ=Q+BE

随后,是对每个会话中的序列通过Transformer进行处理:

注意,这里的Bias Encoding可能不太好理解,但具体实现很简单,利用了python/tensorflow的广播机制,python代码如下

import numpy as np
# K = 2 两个session
sess = np.random.randn(2, 1, 1)
# T = 3 每个session有三个item
seq = np.random.randn(1, 3, 1)
# C = 5 每个item是5维embedding
embed = np.random.randn(1, 1, 5)
# BE = WK + WT + WC
bias_embedding = sess + seq + embed

print("sess = ")
print(sess)
print("seq = ")
print(seq)
print("embed = ")
print(embed)
print("bias_embedding = sess + seq + embed = ")
print(bias_embedding)

Session Interest Interacting Layer

用户的会话兴趣,是有序列关系在里面的,这种关系,我们通过一个双向LSTM(bi-LSTM)来处理:

每个时刻的hidden state计算:

Session Interest Activating Layer

用户的会话兴趣与目标物品越相近,那么应该赋予更大的权重,这里使用注意力机制来刻画这种相关性:

αkI=exp(IkWIXI)∑kKexp(IkWIXI)UI=∑kKαkIIk\begin{aligned} &\alpha^I_k=\frac{\text{exp}(I_kW^IX^I)}{\sum_k^K\text{exp}(I_kW^IX^I)}\\ &U^I=\sum_k^K \alpha_k^II_k \end{aligned}​αkI​=∑kK​exp(Ik​WIXI)exp(Ik​WIXI)​UI=k∑K​αkI​Ik​​

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

αkH=exp(HkWHXI)∑kKexp(HkWHXI)UH=∑kKαkHHk\begin{aligned} &\alpha^H_k=\frac{\text{exp}(H_kW^HX^I)}{\sum_k^K\text{exp}(H_kW^HX^I)}\\ &U^H=\sum_k^K \alpha_k^HH_k \end{aligned}​αkH​=∑kK​exp(Hk​WHXI)exp(Hk​WHXI)​UH=k∑K​αkH​Hk​​

模型试验

模型使用了两个数据集进行了实验,分别是阿里妈妈的广告数据集和阿里巴巴的电商推荐数据集。

对比模型有:YoutubeNet、Wide & Deep、DIN 、DIN-RNN、DIEN。

评价指标是AUC。结果如图:

其中,

DIN-RNN(这个和DIN很像,在原始的DIN中,用户的行为序列没有使用RNN进行处理,而DIN-RNN使用bi-LSTM对用户的历史行为序列进行处理)

对于DSIN,这里有分了三种情况,第一个是DSIN,不过将Bias Encoding变为Transformer里面的Positional Encoding,第二个是DSIN,使用bias encoding,但不添加session interest interacting layer and the corresponding activation unit。第三个就是前文介绍的DSIN框架。可以看到,最后一个在两个数据集上的AUC均为最大。

进一步讨论

Effect of Multiple Sessions

从实验结果来看,DIN-RNN的效果差于DIN,而DSIN-BE的效果好于DSIN-BE-No-SIIL。两组的差别均是有没有使用序列建模。文章里提到,对于序列建模来说,如果用户的行为时十分跳跃的,同时是突然结束的,会使得用户的行为看上进去具有很大的噪声。这样就使得DIN-RNN的效果反而不如DIN,

但在DSIN中,我们对用户的行为序列按照会话进行了分组,由于以下两点原因,使得DSIN中使用序列建模效果反而更好:

1、每个session内部,用户的行为是同质的

2、不同的session之间,用户的session兴趣是呈现一种序列性的,适合序列建模

Effect of Session Interest Interacting Layer

DSIN-BE的效果好于DSIN-BE-No-SIIL,说明通过Effect of Session Interest Interacting Layer得到混合上下文信息的用户兴趣,可以进一步提升模型的效果。

Effect of Bias Encoding

DSIN-BE的效果好于DSIN-PE,说明对不同的session添加偏置项,效果还是十分不错的。

Visualization of Self-attention and the Activation Unit

这里论文展示了一下 Self-attention and the Activation Unit的效果,还是开篇的那个例子:

可以看到self-attention和激活函数的权值的关系。

总结

  • 用户的行为序列包含多个历史session片段,其特点是:

    1、在同一个session中,点击的内容是同质的

    2、在不同片段中,点击的内通是不同的

  • 基于这个特点,提出了Deep Session Interest Network (DSIN) ,具体做法是:

    1、使用基于transformer和Bias-Encoding的自注意力机制来提取用户每个片段的兴趣

    2、使用双向LSTM来捕获像下文序列兴趣的序列关系

    3、使用激活单元(其实还是注意力机制),基于要预测的目标item来聚合用户不同session兴趣的表征

  • 将来会使用知识图谱作为先验知识来解释用户的历史行为,以便更好的预测CTR

参考资料

本文参考了这两篇文章。

Bias Encoding的具体TensorFlow代码实现利用了broadcast机制,如下:

        self.sess_bias_embedding = self.add_weight('sess_bias_embedding', shape=(self.sess_max_count, 1, 1),
                                                   initializer=TruncatedNormal(
                                                       mean=0.0, stddev=0.0001, seed=self.seed))
        self.seq_bias_embedding = self.add_weight('seq_bias_embedding', shape=(1, seq_len_max, 1),
                                                  initializer=TruncatedNormal(
                                                      mean=0.0, stddev=0.0001, seed=self.seed))
        self.item_bias_embedding = self.add_weight('item_bias_embedding', shape=(1, 1, embed_size),
                                                   initializer=TruncatedNormal(
                                  mean=0.0, stddev=0.0001, seed=self.seed))

# ======

    def call(self, inputs, mask=None):
        """
        :param concated_embeds_value: None * field_size * embedding_size
        :return: None*1
        """
        transformer_out = []
        for i in range(self.sess_max_count):
            transformer_out.append(
                inputs[i] + self.item_bias_embedding + self.seq_bias_embedding + self.sess_bias_embedding[i])
        return transformer_out

pdf:

代码:

Deep Session Interest Network for Click-Through Rate Prediction
shenweichen/DSIN
推荐系统遇上深度学习(四十五)-探秘阿里之深度会话兴趣网络DSIN
阿里Deep Session Interest Network解读
shenweichen/DSIN
shenweichen/DSIN
numpy和tensorflow中的广播机制
返回顶层目录
返回上层目录
问题背景
模型结构
基本架构
DSIN模型
Session Division Layer
Session Interest Extractor Layer
Session Interest Interacting Layer
Session Interest Activating Layer
模型试验
进一步讨论
Effect of Multiple Sessions
Effect of Session Interest Interacting Layer
Effect of Bias Encoding
Visualization of Self-attention and the Activation Unit
总结
DSIN-paper
session-demo
loss-function
DSIN-model
DSIN-model-1
session-division-layer
session-interest-extractor-layer
transformer
session-interest-interacting-layer
Bi-LSTM
Bi-LSTM-hidden
datasets-metric
visualize-attention-weights