Real-time Personalization using Embeddings for Search Ranking at Airbnb

ABSTRACT

本文讲述了airbnb如何对用户和房源进行embedding,并应用在搜索排序和相似房源推荐中进行实时个性化,这两个业务在airbnb中贡献了99%的转化。文中的embedding 模型针对airbnb的业务进行了很多优化,能捕捉用户的短期和长期兴趣。

INTRODUCTION

在airbnb,为房东和房客优化搜索结果,意味着给定带有地点和入住日期的查询,平台需要将位置、价格、风格、评论等信息对房客有吸引力的房源排在前面,同时,也要很好地匹配房东对旅游时长和lead days的偏好。而且,平台需要检测出那些可能会拒绝房客的房源,比如说负面评论、宠物、停留时长、团队大小或者其他因素,并把这些房源靠后排。

为了实现这些目标,airbnb借助于learning to rank技术。具体来说,作者将问题建模为pairwise regression,其中正例是预订,负例是拒绝。并通过 改良版Lambda Rank 来优化双方的排序。

因为房客在预订之前一般会搜索多次,在一个search session中,点击不止一个房源,联系不止一个房东,我们可以使用这些in-session 信号,比如点击、联系房东等行为进行实时的个性化,目的是给用户呈现那些和我们认为他们喜欢的房源相似的房源,同时,用一些负反馈的信号,比如跳过了高排名的房源,少给用户呈现那些我们认为他们不喜欢的房源。为了计算用户交互过的房源和待排序的候选房源之间的相似性,作者提出对房源进行embedding。作者用这些相似性作为个性化特征输入给搜索排序模型和相似房源推荐。

除了用即时的用户行为,比如点击作为用户短期兴趣的表示来进行实时个性化,作者也引入了另外一种通过预订来训练的embedding,这样可以捕捉用户的长期兴趣。由于旅游的特点,一般用户一年也就1-2次,预订是一个很稀疏的信号,很多长尾用户只有一个预订。为了解决这个问题,作者提出在用户类型的层面上来训练embedding,而不是一个具体的用户id。其中,用户类型则是利用已知的用户属性,使用多对一 的规则进行划分。同时,作者在用户类型embedding的相同空间上学习房源类型embedding,这样就可以计算用户的用户类型embedding和房源的房源类型embedding的相似性。

本文的贡献:

1.Real-time Personalization
之前的embedding都是线下计算好线上拿来用,
2.针对旅游业务中存在的聚集特点对训练过程 进行改造
旅游平台的搜索都有聚集属性,即用户搜索时通常都聚集在一个市场,比如巴黎,很少跨越多个市场,作者在负采样时考虑了这一点,可以更好得学习到一个市场内的listing的相似性;
3.把转化作为全局上下文特征
作者意识到以转化结束的session的重要性,在学习房源embedding时,作者将预订的房源作为全局上下文,随着窗口在session中移动时,被预订房源一直会被预测
4.用户类型embedding
之前学习用户embedding来捕捉长期兴趣的方法都是每个用户一个embedding。当样本比较稀疏的时候,一般没有足够的数据来为每个用户训练一个比较好的embedding。另外,在线上为每个用户存储一个embedding来完成计算也需要很大的内存。基于此,作者提出在用户类型的层面训练embedding,同一类型的用户共享embedding。
5.拒绝作为显式的负样本
为了降低最终被拒绝的推荐,作者通过将房东拒绝的房源作为负样本,这样就可以把房东的偏好信息也编码到用户和房源类型的embedding中。

为了训练短期用户兴趣,作者在8亿点击session上训练房源embedding。广泛的线上线下实验表明将embedding加入排序模型可以带来显著的订单收益。除了搜索排序算法,房源embedding也用来进行相似房源推荐,比已有的算法ctr 提升20%。

为了训练长期用户兴趣,作者在5000万用户的预订房源序列上训练用户类型和房源类型embedding。两种类型的embedding是在同一个向量空间完成的,这样我们就可以计算用户类型和需要排序的房源的房源类型embedding的相似度。将这个相似度加入到排序模型中也带来了收益。

RELATED WORK

METHODOLOGY

介绍了两种方法:
1.房源embedding,用于短期实时个性化
2.用户类型和房源类型embedding,用于长期个性化

Listing Embeddings

假设给定一个从N个用户收集的包含S个点击session的集合S,每个session s=(11,...,lM)∈Ss=(1_1, ...,l_M)\in Ss=(11,...,lM)S 定义为该用户点击过的连续的包含M个房源ID的列表。 只要用户的两个连续的点击之间间隔超过30min,那么就看做 一个新的session 。给定该数据集,目标是学习每个房源I的d-维 实数向量表示v∈Rdv\in R^dvRd。这样 相似房源在embedding空间中的位置会比较相近。

更正式一点,模型目标是使用skip-gram 模型学习房源表示,通过最大化session数据集上的目标函数L来进行优化
在这里插入图片描述
P(li+j∣li)P(l_{i+j}|l_i)P(li+jli) 表示 在点击房源lil_ili的邻近 观测到房源li+jl_{i+j}li+j的概率,该概率定义如下:
在这里插入图片描述

vlv_lvlvl′v_l'vl 表示房源l的输入和输出的embedding表示。m是窗口大小。
V是数据集中房源id的集合,即字典。

从上面两个表达式可以看出,该方法对房源的点击序列的上下文进行建模,上下文相似的房源的表示更比较相似。

计算损失函数的梯度 时间复杂度和词典大小有关。当词典很大时,到达百万量级时,就不可行了。
为了减小计算量,作者使用negative sampling ,该方法操作如下:
1.生成包含正样本对(l,c)的数据集Dp
其中,l是点击房源,c是l的上下文,即同一个用户在点击房源l 前后大小为m的窗口内点击的房源。
2.生成包含负样本对(l,c)的数据集Dn
负样本是从整个数据集词典V中随机采样的n个房源。
优化目标变成:
在这里插入图片描述
该公式其实是label为+1/-1的LR, 正样本对的label为+1,负样本对的label为-1。
在这里插入图片描述
优化通过sgd完成。

Booked Listing as Globa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值