P2P租车推荐系统架构试谈

主要参考Airbnb的房屋租赁推荐系统
(Real-time Personalization using Embeddings for Search Ranking at Airbnb)

P2P租车与Airbnb的房屋租赁在业务逻辑上是高度相似的,都属于短期租赁的双边市场,一个顾客很少会预定同一台车多次,一台车在某时间段内只能被一个顾客租用,车主有可能拒绝出租,数据存在严重的稀疏性,所以这里参考Airbnb在房屋租赁上的架构。主要分为两大模块,search ranking和similar listing recommendation,similar listing recommendation推荐相似车型,search ranking负责搜索排序。下面将分别阐述两大模块的设计方法,在此之前,要先介绍下embedding,其是两大模块都将用到的策略。

Embedding,最早是源于NLP领域,后来得到推广,现已被广泛应用于各个领域。这里用到的embedding策略有两种不同的方式,一种是listing embeddings,一种是user-type&listing-type embeddings, 分别用于short-term real-time personalization和long term personalization,捕捉的是用户的短期行为信息和长期行为信息。下面分别介绍两种不同的embedding策略。
(1)listing embeddings
每次用户的连续点击不同listing的连贯行为被称为一个session,如果这次的session最终有成功book一台车,则称为booked session,那个被预定的listing被称为booked listing;这次的session没有成功book一台车,则称为exploratory session。在剔除掉一些质量不好的session后,由这些session我们便可以构建出数据集S,将session中的listing视作word,整个session视作sentence,便可以使用the skip-gram model,并配合negative sampling approach技术进行训练,便可以得到listing embedding。同时,在这里,结合业务场景,可以对the skip-gram model进行一些修改,1在booked session中,将Booked listing作为global context,其将总是出现在每次的滑动窗口内参加训练,毕竟我们模型的目的就是为了更多地促进book行为。2租车行为通常在一个窗口期内都集中在一个固定的地区,所以在用negative sampling approach时应注意多从与正样本相同的一个地区内进行随机采样,以保证样本的均衡。使用listing embedding有很多的好处,其中一个体现在冷启动中,当一个新的listing上线时,我们便可以用与其相似的其它n个listing的embedding的均值作为其embedding。
(2)user-type&listing-type embeddings
listing只能捕获短期的用户行为信息,要利用用户的长期行为信息,我们应使用user-type&listing-type embeddings,将同样类型的user映射到同一个embedding上,同样类型的listing映射到跟user-type embedding在同一个空间的embedding上,以此来解决数据的稀疏性问题。这里,把一个用户连续book过的listing,配合每次book时用户所属的类型, 形如,构建出一个session,把这些session组合成Sb数据集,同样使用the skip-gram model,配合negative sampling approach便可以训练出user-type & listing-type embeddings,同样,在这里,可以结合业务场景对the skip-gram model进行一些修改,将那些被rejection的listing作为负样本加入the skip-gram model训练会得到更好的结果,在对用户推荐时可以把可能拒绝他们的listing往后排。

在介绍完embedding技术后,我们来介绍similar listing recommendation和search ranking。

一,similar listing recommendation用于推荐相似车型,当用户点击某个具体的listing时,在旁边的similar listings carousel即使用similar listing recommendation给用户推荐与那个listing相似的其它车。可以注意到,用户在某时点击一个具体的listing,这属于一个短期的用户行为,所以这里可以直接使用前面训练得到的listing embedding。使用两辆车的listing embeddings间的cosine similarity作为衡量其相似的程度,把那些相似度最高的并且可以被用户租用(即跟用户的需求属于同一个地区并且没被其它人租走)的车推荐给用户。

二,search ranking,当用户使用自己的个人信息和意愿进行搜索时,其将返回给用户最匹配的listing,其中根据匹配程度对listing进行排序,越匹配的放在越前面。对search ranking,其可以转化为一个pairwise regression with search label的问题,我们需要构建数据集并使用Lambda Rank算法进行训练。把一次search构建为形如Ds =(x i ,y i ),i = 1 …K ,其中xi代表某个listing的特征,y i ∈ { 0 , 0 . 01 , 0 . 25 , 1 ,− 0 . 4 } ,每个标签的含义如下,0是用户看到了某个listing却将其忽略,0.01是用户点击了某个listing,0.25是用户联系了某listing的主人但最后并未book,1是用户book了某listing,-0.4是用户被某listing的主人拒绝了,注意在构建Ds的时候,里面必须含有book成功的数据,即对应的yi=1。最后把合格的Ds组合在一起形成数据集D。上面说了,xi代表某个listing的特征,这里说的特征包括listing features,user features,query feature和cross-features,以及在Airbnb架构中被证明极为有用的listing embedding feature和User-type & Listing-type Embedding Features。其中,listing embedding feature是使用listing embedding进行构建的,我们搜集用户在过去两周内的行为,比如点击过某个listing,忽略过某些本来在排序中排名很高的listing等,将这些行为对应的listing的list embedding与某个样本的listing embedding进行cosine similarity的计算,并将计算值作为这个样本的特征,这些特征名形如EmbClickSim,EmbWishlistSim等。User-type & Listing-type Embedding Features则只要使用对应用户的User-type embedding和对应某样本listing的 Listing-type Embedding进行cosine similarity的计算,并将计算值作为特征即可。这样把特征都一一构建完毕(据Airbnb的架构说其使用了一百个左右的特征),便可以投入模型用Lambda Rank算法进行训练,训练完毕后便可投入使用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值