Real-time Personalization using Embeddings for Search Ranking at Airbnb
Abstract
作者主要开发了listing and user embedding技术,能捕捉客人短期与长期的兴趣,并给出有效房屋推荐列表。
Introduction
Novel contribution:
-
real-time personalization:
使用用户最近交互的item的embedding来在线计算与需要排序的items的相似性。
-
Adapting Training for Congregated Search:
embedding的时候用负采样
-
Leveraging Conversions as Global Context:
将booked listing作为全局上下文
-
User type embeddings
使用用户类型的embedding而不是对每个用户都建立embedding,因为没有足够的数据以及对内存的要求过大
-
Rejections as Explicit Negatives
将主人的拒绝视为负例
Methodology
Listing embeddings
因为采用负采样的skip-gram模型,因此最初的目标函数与word2vec的目标函数一样:
Booked Listing as Global Context.
将click session分为booked session和exploratory session,booked session是最终产生了book行为的,exploratory session是没有产生的。
对于booked session来说,将booked listing作为global context,也就是无论它是否在上下文的窗口里,总是目标函数的一部分。
Adapting Training for Congregated Search
为了解决负例样本来自的market place总是与正例的market place不一致的问题,aribnb又加入了一组negative samples。该批样本就是在central listing同一市场的listing集合中进行随机抽样得到的。
Cold start listing embeddings
如果有new listing缺失embedding vector,就找附近的3个同样类型、相似价格的listing embedding进行平均得到。
Examining Listing Embeddings
通过使用聚类以及分析相同类型与价格范围的余弦相似度,可以得出使用embedding方法很好的编码了listing的特征
为了更方便的探索embedding的效果,airbnb还开发了Similarity Exploration Tool。
User-type& Listing-type Embeddings
为了捕捉长期的偏好,airbnb这里采用了booked session来来进行学习。但是会有如下的问题:
- booking session的数据远小于click session的数据
- 很多用户过去只订过一个listing,因此我们无法从长度为1的session中学习
- 要训练出有意义的embedding,那么实体一般需要出现5-10次,但是对于airbnb来说,很多listing出现次数少于5-10次
- 用户booking间隔的时间过长可能会因为事业的变化而对相关的因素如价格而改变,这也可能造成用户的偏好不是那么准确。
为了解决上述的问题,airbnb采用了listing_type和user_type来取代listing_id和user_id。
For example, an Entire Home listing from US that has a 2 person capacity, 1 bed, 1 bedroom & 1 bathroom, with Average Price Per Night of $60.8, Average Price Per Night Per Guest of $29.3, 5 reviews, all 5 stars, and 100% New Guest Accept Rate would map into listing_type = US_lt1_pn3 _pg3 _r3_5s4_c2 _b1_bd 2_bt 2_nu 3 .
如上述原文所说,就可以将很多不同的listing id映射到相同listing type了。
user type同理,也能通过上述的映射得到。
针对同一user_id的session,将session定义为
一个session中的 u t y p e u_{type} utype是同一个user_id的,只不过 u t y p e u_{type} utype可能会随着时间的变化而改变。
针对中心item是user type还是listing type,目标函数略有不同:
Explicit Negatives for Rejections
将房主的拒绝当作一个明确的负类,在目标函数后再加上这样一个信号。
Experiments
用到的embedding特征在搜索排序模型中
特征重要性:
效果提升: