深入解读Airbnb推荐算法

去年Airbnb——爱彼迎公布了他们的房源推荐算法,并且成为2018年kdd的最佳论文,论文标题 Real-time Personalization using Embeddings for Search Ranking at Airbnb(https://www.kdd.org/kdd2018/accepted-papers/view/real-time-personalization-using-embeddings-for-search-ranking-at-airbnb)。论文详细描述了Airbnb的推荐算法的细节,并且针对该场景下,对已有的算法做了针对性的优化。原文描述的非常详细,本文按照我的理解,分成3个部分对原文中核心的内容进行介绍。

一,房源embedding

基本思路还是借鉴了word2vec中的skip-gram算法,将每个房源都用一个向量embedding来表示,但是做了一些细节上的修改。简单介绍一下skip-gram,对于语料库中的句子,设置一个窗口在每一个句子上滑动,用窗口中央的word,去预测滑动窗口内其他的word,通过这种方式,来训练出所有word的embedding。房源embedding的训练采用了类似的方式,把每个用户连续点击过的房源视作一个句子,每个房源当做word,训练出房源的embedding。

先来描述下训练集的构建,对每个登录用户,将所有点击过的房源当做一个点击会话click session,并且按照时间先后做排序。如果两次点击之间超过30分钟,则将会话进行分割,分割成若干条会话。去掉会话中的误点击和时间比较短的点击,具体操作是过滤掉查看时长在30秒之内的房源记录。最后只保留房源数量大于等于2的会话记录,构成会话训练集S。所有的会话记录会分为两类,一类是以预订房源作为终止的,叫做预订会话(booked session);另一类不包含房源预订的,叫做查看会话(exploratory sessions)。后文会有介绍,针对两种类型的会话,训练目标会有不同。按照文章的描述,训练集大概会有8亿条点击会话。

房源embedding的训练如图1所示,最上面一行橙色方块是某个用户连续点击过的房源记录,包含了11条点击房源记录。滑动窗口大小是m,通过中间的房源,预测左右两侧的m个房源。除了点击房源,最右侧还有一个预订房源,如上文所述,只有在预订会话中才包含预订房源。

图1

图2是房源embedding训练的目标函数,要求最大化目标函数。里边包含4项,我们一项一项来进行介绍。其中,v_l表示当前房源l的embedding(出于编辑方便的原因,公式中的下标变量vl,我用_连接变量v和下标l表示),v_c表示周围的房源c的embedding,不带'表示输入embedding,带'表示输出embedding。第1项是对正样本集合的目标函数,Dp表示正样本,l和c都是用户点击过的房源。第2项是负样本集合的目标函数,为了减少计算量,避免对所有房源都进行计算,负样本Dn通过对所有房源进行随机采样得到。第3项就是图1中的预订房源的目标函数,这个目标函数是全局的,表示说无论窗口在该会话中怎么滑动,这个目标函数始终存在,这样设计的原因是点击会话中的所有房源,可能都跟这个最终预订房源相关。上文中我们说过训练数据有两类,分别是预订会话和查看会话,预订会话包含预订房源,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值