用户序列建模方法
摘要:
推荐系统用户的可用特征可以归类:
- 静态特征:用户年龄、属性、地域等特征。
- 动态特征:用户行为序列。
这里主要是对各种常见的算法对动态特征的建模进行总结
主要包括了:
- 池化:DNN for youtube,deep&wide
- attention: DIN,DIEN
- 序列思路:GRU4REC,LSTM等
- 多兴趣特征建模:MIND
- 基于强化学进行建模的法
简介
用户行为序列特征是推荐系统中重要的动态变化的特征。 用户的行为序列可以明显的加强不同样本之间的区分度;在推荐系统中,用户的兴趣是动态变化的,因此,仅仅依靠静态特征进行产出推荐列表,不能满足用户兴趣的实时性保障。
目前,对用户的行为序列进行建模的思路可以分为以下三类:
- 池化方式:最典型的池化方式就是sum、mean等,即将用户过去一段时间的行为看作一个无序的序列。例如,谷歌的DNN for youtube,deep&wide网络等。
- 这种方法简便易行,但是他忽略用户行为序列的顺序等信息
- 注意力机制:这种方式可以认为是采用了加权平均的池化方式。 参考了NLP中常见的各种注意力机制,利用输入的行为序列,计算序列各行为的权重,考虑序列行为中不同行为的贡献峰值。例如,Deep interest network,deep interest evlovenetwork等。然鹅,还是没有考虑行为序列的先后方式。
- 序列的网络结构建模方式:这种方式将用户行为看作一个带有时间属性的序列,一般来说通过lstm,gru,transformer等可以考虑位置信息的组件来进行建模。
- 目前也有研究认为用户具有多兴趣特征,而单一的hidden(lstm/attention/池化后出现来embedding)只能代表用户一个兴趣点。这些方式对用户的多兴趣表达进行了建模。 Multi-Interest Network with Dynamic Routing。
算法详解
一、 Pooling套路的算法
1. DNN for youtube
简单来讲就是:
- 根据用户的播放历史产出hunderds from millions 的候选集。候选集筛选网络通过协同过滤CF来完成。在youtube这个上面用了,user-based的协同过滤。“a matrix factorization approach trainedunder rank loss”
- 之后在召回的数百的list上进行ranking,rank网络通过用户行为序列特征、用户静态特征、vedio的特征输出分值,然后根据分值高低进行排序。
1.1 问题描述
在yotube的这个推荐算法里将推荐问题变成了多分类问题,因而,该问题可以由如下式子描述,其中
P
(
w
t
=
i
∣
U
,
C
)
P(w_t=i | U,C)
P(wt=i∣U,C) 代表用户
U
U
U在候选集
C
C
C中会去video
i
i
i 的概率:
P
(
w
t
=
i
∣
U
,
C
)
=
s
i
∑
j
=
1
N
s
j
P(w_t=i | U,C) = \frac{s_i}{\sum_{j=1}^{N}{s_j}}
P(wt=i∣U,C)=∑j=1Nsjsi
where:
s
i
=
e
v
j
∗
u
s_i = e^{v_j*u}
si=evj∗u
1.2 求解问题/训练模型
在该算法里,作者尝试了hierachical softmax 来处理上面那个million级别的分类问题,但是效果不太好,我自己的猜测式,不同于训练word2vec词向量,这个事情比较难找好用建树的启发式规则。故而作者用了negative sampling的套路。
- 每个训练输入采用负采样的获取多个负样例
- 然后采用重要性权重进行修正
线上serve的时候从millions中搞出候选集,显然不能直接softmax分类,top N推荐:
- 采用哈希分桶
- 最近邻
1.3 模型架构与特征
具体细节可以从下面的图看出来:
图中展示采用的feature包括:
- 静态特征: 年龄、性别、地理特征 等等等。
- 动态特征: 观看的视频的集合、搜索的文本的集合。
注意:这里它对动态特征的使用就是简单按分组进行平均, 也就是我们所说的平均的池化方式
二、attention方式的算法
1. Deep Interest Network
写在其他地方