论文|Airbnb Embedding的实践和思考

Posted 搜索与推荐Wiki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文|Airbnb Embedding的实践和思考相关的知识,希望对你有一定的参考价值。

其实在19年初的时候大概看了一下这篇论文,但当时其实理解的并不深,今天再读的时候发现这里边其实包含了很多东西,不仅是学术性的目标函数优化,也包括工程性的取舍和特征的构造。

本文分为两部分,第一部分主要介绍论文,第二部分谈从中的收获和启发,如果你对论文比较熟悉的话可以直接阅读第二部分。

第一部分

引言

Airbnb于2018年提出了论文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》,可谓是Embedding技术在工程实践中的一次大的进步,虽然论文已经发表两年了,但每次读都会有不一样的收获,作为深度学习的「核心操作」之一,Embedding技术不仅能够将大量的稀疏特征转换成稠密特征,便于输入深度学习网络,而且能够通过Embedding将物品语义进行编码,用来计算物品的相似度,进度i2i(item to item)的推荐。

论文主要提出的是item的Embedding算法和优化方案,基于不同类型和时间窗口的房源序列构建Embedding,以致于能够捕获用户的短期(short-term)和长期(long-term)兴趣偏好。其本质是改造Word2vec的优化目标函数,使用的是其中Skip-gram模型(另一种是词袋模型,bag-of-word)

背景

Airbnb是一个在线约定房源的网站,主要是给用户提供不同地点的房源列表(需要注意的是在论文中房源使用的是「list」进行表示,可能国内朋友阅读的时候会有点出戏),如下所示,在搜索某个地点的房源之后,展示列表为:

在点击某个具体的房源之后,也会有相似房源推荐,如下所示:

上述的两个部分,其实也是Airbnb进行论文中Embedding评估的业务场景。

基于用户短期兴趣的房源Embedding构建方法

文章中提到使用8亿的搜索点击房源session作为训练集构建房源的embedding(当然足够大的数据集构造出的Embedding也更加准确,表达信息也更加准确)。

目标函数的进化

定义 S S S N N N个用户的 S S S个click sessions,每个session为: s = ( l 1 , . . . , l M ) ∈ S s = (l_1, ..., l_M) \\in S s=(l1,...,lM)S,论文中特意提到如果一个用户的两次点击之间超过30分钟这进行session的截断,最后为每个房源(list)生成一个 d d d维的embedding向量,$ v_l_i \\in R^d$,这里使用word2vec中的skip-gram,最大化目标函数为:

L = ∑ s ∈ S ∑ l i ∈ s ( ∑ − m ≥ j ≤ m , i ≠ 0 l o g   P ( l i + j ∣ l i ) ) L = \\sum_s \\in S \\sum_l_i \\in s ( \\sum_ -m \\geq j \\leq m, i \\neq 0 log \\, P(l_i+j | l_i)) L=sSlis(mjm,i=0logP(li+jli))

其中 P ( l i + j ∣ l i ) P(l_i+j | l_i) P(li+jli) 可以通过softmax来进行定义和求解:
P ( l i + j ∣ l i ) = e x p ( v l i T v l i + j ′ ) ∑ l = 1 ∣ V ∣ e x p ( v l i T v l ′ ) P(l_i+j | l_i) = \\frac exp(v_l_i^T v_l_i+j') \\sum_l=1^|V| exp(v_l_i^T v_l') P(li+jli)=l=1Vexp(vliTvl)exp(vliTvli+j)

其中 v l v_l vl 表示的是房源 l l l 的输入向量, v l ′ v_l' vl 表示的是房源 l l l的输出向量表示, m m m 表示的上下文滑动的窗口大小, V V V 表示的是所有房源的集合。

在实际的计算中由于 V V V 很大,基于整体数据的负样本进行训练,在有限的计算资源下,将会消耗很多的资源和计算时间,因此会进行一定程度的负采样。

这里使用 D p D_p Dp 表示正样本对 ( l , c ) (l, c) (l,c),即房源 l l l和其上下窗口内的房源 c c c D n D_n Dn 表示负样本对 ( l , c ) (l, c) (l,c),负样本从整个房源集合中进行抽取。增加随机负采样后,优化的目标函数变为:
a r g   m a x θ ∑ ( l , c ) ∈ D p l o g 1 1 + e − v c ′ v l + ∑ ( l , c ) ∈ D n l o g 1 1 + e v c ′ v l \\underset\\theta arg \\, max \\sum_(l,c) \\in D_p log \\frac11+e^-v_c' v_l + \\sum_(l,c) \\in D_n log \\frac11+e^v_c' v_l θargmax(l,c)Dplog1+evcvl1+(l,c)Dnlog1+evcvl1

求解参数 θ \\theta θ 可以使用随机梯度上升法(stochastic gradient ascent)。

用户的行为序列其实分为两类:

  • 经过一系列点击之后有预定房源的行为
  • 经过一系列点击之后没有预定房源的行为

用户短期内预定房源的行为其实在一定程度上和之前的搜索点击行为都有强相关的关系,因此将预定房源的行为作为一个全局的动作加入到每个session中,则需要优化的目标函数转变为:
a r g   m a x θ ∑ ( l , c ) ∈ D p l o g 1 1 + e − v c ′ v l + ∑ ( l , c ) ∈ D n l o g 1 1 + e v c ′ v l + l o g 1 1 + e − v l b ′ v l \\underset\\theta arg \\, max \\sum_(l,c) \\in D_p log \\frac11+e^-v_c' v_l + \\sum_(l,c) \\in D_n log \\frac11+e^v_c' v_l + log \\frac11+e ^- v'_l_b v_l θargmax(l,c)Dplog1+evcvl1+(l,c)Dn以上是关于论文|Airbnb Embedding的实践和思考的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统实践与思考-20201107

推荐系统[二]:召回算法超详细讲解[召回模型演化过程召回模型主流常见算法(DeepMF/TDM/Airbnb Embedding/Item2vec等)召回路径简介多路召回融合]

论文|DeepWalk的算法原理代码实现和应用说明

论文|DeepWalk的算法原理代码实现和应用说明

论文|DeepWalk的算法原理代码实现和应用说明

论文阅读二进制的Embedding