基于用户历史行为数据的广告推荐模型

今天我们来讲解三篇利用用户历史行为数据建模的广告推荐模型,相比于传统的广告推荐模型,他针对用户历史行为进行了更好的建模,部分模型甚至仔细考虑了用户行为之间的时间间隔信息。

第一篇主要参考了IJCAI 2018年的paper《A Brand-level Ranking System with the Customized Attention-GRU Model》。首先来说这个广告预测推荐的场景比较少见,即从品牌的角度来对用户的行为进行预测,输入是一个长度为n的三元组序列(user, brand, timestamp),预测未来某一个时间点用户是否会购买/点击某一个brand下面的商品。整个模型以GRU为基础模型。GRU的公式如下所示:
z m = σ ( W z x m + U z s m 1 )
r m = σ ( W r x m + U r s m 1 )
s m = z m t a n h ( W h x m + U h ( r m x m 1 ) ) + ( 1 z m ) s m 1

所谓的attention方式,我感觉是作者强行把这篇paper往encoder-decoder架构上进行靠拢,即认为输入n的三元组序列就是sorce序列 ( x 1 , x 2 . . . . x n ) ,经过输入encoder变换会生成中间结果序列 ( h 1 , h 2 , . . . . . h n ) ,而输出就是1个单位长度的序列 y 1 ,即对应某一个brand是否会购买,其改进的attention机制公式如下:
α 0 = A t t e n t i o n ( y 0 , h )
g 0 = j = 1 L α 0 , j h j
s 0 = G R U ( y 0 , g 0 )
o 1 = S o f t m a x ( V s o )
其中 y 0 就是要检测的brand的表征形式。最后模型的损失函数为log损失,即一个简单的二分类问题,即用户是否会购买目标brand。
其实到这里,整个模型已经介绍完了,但是在GRU进行encoder处理的过程中,作者对传统的GRU进行了三处改进:

1 Combining the brand features and brand embedding to better represent the brand
也就是说把特征工程得到的向量和模型自适应学习的embedding向量相加作为brand的表征形式,即 R ( b ) = M e m b e d o k + v k o k 是one-hot的形式, v k 是brand的人工特征向量, M e m b e d 是brand的模型参数形式。而这个 v k 的生成挺有意思的,我这里着重讲一下,流程图如下所示:
这里写图片描述
1 首先从对某个特定的类别角度对所有的item进行排序;
2 按照价格从高到低的顺序把所有的商品划分为7个level;
3 对于某一个特定的brand,其会在不同的level对应不同的商品,那么针对该brand在不同的level的item集合,会对每一个item集合进行8个维度的指标统计,这些指标如下所示:
这里写图片描述
这样在经过处理之后,每一个item会对应人工特征工程的56维数据。

2 Considering different types of actions
因为用户针对某一个brand的行为可以分为:购买或者点击两类,针对这两类行为在使用GRU进行用户行为建模的时候,会针对不同的行为进行区别对待。这这里的处理方式十分简单,就是把步骤1生成的 R ( b ) 乘上一个参数矩阵,即进行空间的映射变化,方式如下:
R ( b ) = M c l i c k R ( b ) if b is clicked
R ( b ) = M p u r c h a s e R ( b ) if b is purchased
其中 M p u r c h a s e M c l i c k 的维度都是 R 56 56 ,这两个矩阵属于模型的参数,会随着模型一起训练。

3 Integrating the time-gate to model time intervals between actions
这一点是最有意思的,因为用户点击或者购买brand的序列会有一个timestamp信息,这部分时间间隔信息也可以进行专门的编码,即通过time-gate的方式进行引入:
T m = σ ( W t x m + σ ( Q t t m ) )
t m 就是两个action之间的时间间隔,这里的单位是秒,最后对GRU的改变如下:
s m = z m T m t a n h ( W h x m + U h ( r m x m 1 ) ) + ( 1 z m ) s m 1

最后在对模型进行训练的时候,其损失函数如下:
L o s s = i = 1 n y i l o g ( p ( R ( b ) ) ) + ( 1 y i ) w ( 1 p ( R ( b ) ) )
可以发现和一般的交叉熵不一样,在负样本那里乘了一个 w ,这个 w 的取值范围是 [ 0 , 1 ] ,是一个压缩系数。之所以这样做,是因为有一些正样本没有标注出来,被混在了负样本之间。

整个模型我认为还是有可以改进的地方,比方说他在建模的时候并没有考虑用户因素,即使对所有的brand进行统一建模。如果能把用户信息表征到模型之中,模型的性能也许还能提高,毕竟不同level的用户消费的brand的level也是不一样的。

第二篇参考了2018年的IJCAI的paper《Sequential Recommender System based on Hierarchical Attention Network》,他的目标是推荐场景,即根据用户的历史购买的item信息来预测用户未来会购买的item列表。整个模型结构图如下所示:
这里写图片描述
其实整个模型还是比较简单的,就是一个双层attention机制的神经网络,其实他的任务描述的还是挺有意思的,给一个用户的1到t时刻的transactions序列信息,表征为 L = S 1 , S 2 , S 3 . . . . S t ,其中 S t 代表了t时刻的用户transactions的item集合,我们需要预测该用户 S t + 1 时刻的交易信息。作者之所以使用two level的attention机制,是因为他综合考虑了用户的long-term和short-term信息,其中 S 1 , S 2 , . . . . S t 1 可以看成是用户long-term的行为信息, S t 可以看成用户short-term的行为信息。首先作者先使用attention机制对long-term行为信息进行处理,公式如下:
h 1 , j = R e l u ( W 1 v j + b 1 )
α j = e x p ( u T h 1 , j ) p L t 1 u e x p ( u T h 1 , p )
u t 1 l o n g = j L t 1 u α j v j
当得到了目标用户long-term的表征 u t 1 l o n g 之后,把其和short-term的商品再经过一个类似的attention结构,最后得到整体的用户表征 u a i m ,接下来再把这个表征向量 u a i m 和带预测的item v j 求内积,即 R j = u a i m v j ,就能得到该用户对于该商品的预测信息。在进行损失函数构造的时候,该paper利用了parewise的思想,并不是去预测特定商品的绝对分数,而是对于不同商品之间的排序信息进行预测,其公式如下所示:
a r g m i n θ I n σ ( R i R j ) + λ u v | | θ u v | | 2 + λ a | | θ a | | 2

第三篇参考了2017年IJCAI的paper《What to Do Next: Modeling User Behaviors by Time-LSTM》,其实它比前两篇时间都早,是最早提出使用RNN系列模型来解决RS系统(推荐系统)的行为序列时间间隔不一致的问题,该问题如下所示:
这里写图片描述
因此为了解决time interval的问题,作者在传统的LSTM的基础上增加了time gate,即既要对用户的long-term信息进行编码,又要对用户的short-term信息进行编码,综合考虑用户的长期偏好和最近的行为偏好。并提出了三种方案,首先我们来简单介绍一下基础的LSTM的公式:
i m = σ i ( x m W x i + h m 1 W h i + w c i c m 1 + b i )
f m = σ f ( x m W x f + h m 1 W h f + w c f c m 1 + b f )
c m = f m c m 1 + i m σ c ( x m W x c + h m 1 W h c + b c )
o m = σ o ( x m W x o + h m 1 W h o + w c o c m 1 + b o )
h m = o m t a n h ( c m )

接下来,我们详细介绍一下三种引入了time gate的LSTM结构,其整体结构图如下所示:
这里写图片描述
(我看这些图片比较头晕,所以就直接上公式了)

Time-LSTM 1
T m = σ t ( x m W x t + σ ( t m W t t ) + b t )
c m = f m c m 1 + i m T m σ c ( x m W x c + h m 1 W h c + b c )
o m = σ o ( x m W x o + t m W t o + h m 1 W h o + w c o c m 1 + b o )
T m 在其中的作用主要体现在两点:
1 一方面 T m 可以对于输入信息进行过滤;
2 另一方面 t m 首先被存储在了 T m 之中,然后该信息会被传递到 c m 中,接下来就会被一次传递到 c m + 1 , c m + 2 . . . . 之中,因此 t m 会帮助对用户的长期兴趣进行建模。

Time-LSTM 2
在该改进的模型之中,增加了两个gate,分别是 T 1 m T 2 m ,它们的计算公式如下:
T 1 m = σ t ( x m W x 1 + σ ( t m W t 1 ) + b 1 )
s . t W t 1 <= 0
T 2 m = σ t ( x m W x 2 + σ ( t m W t 2 ) + b 2 )
之所以有 W t 1 <= 0 的限制,是因为为了保证当最近一次的 t m 比较小的时候 T m 会输出比较大的值,而当 t m 比较大的时候 T m 会输出比较小的值,也是为了把最近的 t m 信息进行编码。
z m = f m c m 1 + i m T 1 m σ c ( x m W x c + h m 1 W h c + b c )
c m = f m c m 1 + i m T 2 m σ c ( x m W x c + h m 1 W h c + b c )
o m = σ o ( x m W x o + t m W t o + h m 1 W h o + w c o z m + b o )
h m = o m σ h ( z m )

Time-LSTM 3
这个其实和LSTM 2是非常相似的,只不过就是把忘记门拿掉了,公式如下:
z m = 1 i m T 1 m c m 1 + i m T 1 m σ c ( x m W x c + h m 1 W h c + b c )
c m = ( 1 i m ) c m 1 + i m T 2 m σ c ( x m W x c + h m 1 W h c + b c )

猜你喜欢

转载自blog.csdn.net/guoyuhaoaaa/article/details/81170338