BLOG

个人博客,记录学习与生活

[KDD2018]Airbnb Embedding

Published Aug. 4, 2020, 11:36 a.m. by kkk

1介绍Embedding技术在Airbnb搜索排序推荐上的工程实现和应用。

Airbnb的业务有其特殊性,提供网上订房但特点是都是民宿而非普通的宾馆,导致即需要向租客提供服务又要向房东服务,双方处于一个接近对等状态,双向评价而且房东可以拒绝租客。

场景分割

  • 短期兴趣推荐
  • 长期兴趣推荐

对于房源信息推荐,对于一个用户,根据其最近一个月的连续订房、浏览信息进行推荐;而对于更早前的订房、使用情况,主要出于两点原因(1. 信息存储所需的空间 2. 用户兴趣随时间的变化 )进行另外一种方式处理。

以此分为短期兴趣推荐和长期兴趣推荐,前者是通过构造房源的embedding进行推荐,后者通过构造用户类型和房源类型的embedding进行推荐。

短期兴趣推荐

通过构建房源的embedding,基于用户浏览(点击)记录进行相关房源推荐。数据采样为30分钟内用户的浏览情况,30分钟内的情况作为一个独立的会话(session)

通过word2vec(skip-gram)为核心技术,将会话作为其中的一个文本序列,同样通过负采样来计算概率、利用SGD来更新参数,整体目标函数为: $$ \mathcal L = \sum_{s\in S}\sum_{l_i\in s}(\sum_{-m \ge j \le m, i \ne 0}\log \mathbb P(l_{i+j}\vert l_i) ) $$ 对于房源$l$而言,优化目标为: $$ \arg \max_\theta \sum_{(l,c)\in \mathcal D_p} \log \frac{1}{1 + e^{-v^\prime_c v_l}} + \sum_{(l,c)\in \mathcal D_n} \log \frac{1}{1 + e^{v_c^\prime v_l}} $$ 符号解释:$\mathcal D_p$为该会话中$l$的房源对(即skip-gram中的词汇对),通过窗口长度$m$以$l$为基准向前和向后选取构成。$\mathcal D_n$为从该会话和所有房源$V$中选择出的$n$个负样本对。

问题:直接通过上述的处理会忽视掉一些问题:已预定过的房源对后续推荐的作用;用户搜索的房源内容通常聚集在一个范围(市场)内,通过向整个房源$V$中选择负样本不准确。

将已预订的房源作为全局信息

在用户浏览(点击)生成的会话中,包括已经预定的房源(花钱了)和未预定的房源(只是看看,没花钱),两者对后续推荐的影响是不一样的。

具体优化:在会话中,构造房源对的时候,对于选择的中心房源,不管已预订房源在不在其窗口范围内,都将两者组合为一个房源对,如下图所示(紫色部分)

之后优化目标为($l_b$为已预订房源): $$ \arg \max_\theta \sum_{(l,c)\in \mathcal D_p} \log \frac{1}{1 + e^{-v^\prime_c v_l}} + \sum_{(l,c)\in \mathcal D_n} \log \frac{1}{1 + e^{v_c^\prime v_l}} + \log \frac{1}{e^{-v^\prime_{l_b} v_l}} $$

搜索聚集现象的影响

在线旅游预订网站的用户通常只在单一市场内进行搜索,比如特定的一个地理位置。

这种可称之为搜索聚集现象,影响就是,优化目标中$\mathcal D_p$中的房源大多在相同的市场内,而负采样$\mathcal D_n$中的房源可能大部分都不属于该市场,这种不平衡现象可能导致在某一市场中,学习到的是次优的相似性(We found that this imbalance leads to learning sub-optimal within-market similarities)。

具体优化:增加一个负样本集$\mathcal D_{m_n}$,该负样本集从中心房源$l$所属的市场中采样而得。于是优化目标变为: $$ \begin{align} \arg \max_\theta & \sum_{(l,c)\in \mathcal D_p} \log \frac{1}{1 + e^{-v^\prime_c v_l}} + \sum_{(l,c)\in \mathcal D_n} \log \frac{1}{1 + e^{v_c^\prime v_l}} \\ & + \log \frac{1}{e^{-v^\prime_{l_b} v_l}} + \sum_{(l,m_n)\in \mathcal D_{m_n}} \log \frac{1}{1+e^{v^\prime_{m_n} v_l}} \end{align} $$ 上述式子即为最终版的优化目标,参数$\theta$包括:$v_l, v_c; l,c\in V$。以此可构建所有房源的embedding表示

冷启动

对于新加入的房源,由于没经过训练没有embedding,导致无法进行推荐。

解决措施:利用附加信息(位置、价格、房源类型等),在具有embedding、属于相同房源类型、处于相同价格区间的房源中,找到与新房源地理上(10公里内)最近的3个,将其embedding取均值构建出新房源的embedding,从而使新房源能加入到推荐之中。

通过该方法,可以覆盖超过98%的新加入房源。

长期兴趣推荐

步骤:构建用户类型embedding和房源类型embedding,将其embedding设置为同一向量空间,训练之后,给用户推荐与其embedding相似度最高的房源embedding所代表的房源

涉及的处理:

  1. 如何构建用户类型、房源类型embedding
  2. 如何训练到一个向量空间
  3. 相似度定义

1. 构建用户类型、房源类型embedding

采用字典类型的映射方式,根据几项属性的取值,将用户和房源分为特定的几类,如下图:

对于房源,根据城市、类型、每晚价格、每人价格、评价数、五星评价比例、容量、床位数、卧室数、新客接受率的几项取值,将千万数量级的房源分为几十或几百种

对于用户,首先将其分为有过消费记录、没有消费记录的用户,对于没有消费记录的用户,根据市场、语言、设备、资料是否齐全、是否有用户头像进行分类,对有过消费记录的用户,在此基础上加上消费次数、平均每晚价格、平均每人价格、平均人数、评论数、对房源五星评论百分比、被房东五星评论百分比这些分类指标进行分类,以此将数十亿数量级用户分类成数十、数百种。

至此,完成房源和用户分类工作,属于同一分类的房源(用户),将具有相同的embedding

2. 训练到一个向量空间

依旧是采用Word2Vec架构,联合训练房源和用户,那么现在问题就是:如何联合训练房源和用户?

策略:根据每个用户的历史订单情况(按时间顺序,每个订单格式为(user_type, listing_type))生成会话,一个会话只由一个用户的所有历史订单情况生成,那么生成的会话格式为:$U_{t1}L_{t1}U_{t2}L_{t2}\cdots U_{tM}L_{tM}$。以此作为Word2Vec中的句子进行训练得到特定用户类型和特定房源类型的embedding,如下图中的(a)。

注:$U_t$为用户类型,$L_t$为房源类型,同一用户的用户类型可能会随时间变化。

针对房东的优化

不同于短期兴趣推荐的基于点击率,只反应了用户的偏好,长期兴趣推荐基于的是订单,既反映了用户偏好也反映了房东偏好(房东可以拒绝用户的订单,比如因为评价不高、资料不齐全等),所以对于房东的拒绝应作为反馈纳入到之后的推荐之中。

如上图(b)中所示,将房东的拒绝信息也加入会话之中,进行训练,在优化目标中加上一项对于拒绝信息的处理,于是

对于用户类型$u_t$而言,训练优化目标为: $$ \begin{align} \arg \max_\theta & \sum_{(u_t,c)\in \mathcal D_{book}}\log \frac{1}{1+e^{- v^\prime_c v_{u_t}}} + \sum_{(u_t,c) \in \mathcal D_{neg}}\log \frac{1}{1+e^{v_c^\prime v_{u_t}}} \\ & + \sum_{(u_t, l_t)\in \mathcal D_{reject}}\log \frac{1}{1+e^{v_{l_t}^\prime v_{u_t}}} \end{align} $$

对于房源类型$l_t$而言,优化目标为: $$ \begin{align} \arg \max_\theta & \sum_{(l_t,c)\in \mathcal D_{book}}\log \frac{1}{1+e^{- v^\prime_c v_{l_t}}} + \sum_{(u_t,c) \in \mathcal D_{neg}}\log \frac{1}{1+e^{v_c^\prime v_{l_t}}} \\ & + \sum_{(l_t, u_t)\in \mathcal D_{reject}}\log \frac{1}{1+e^{v_{u_t}^\prime v_{l_t}}} \end{align} $$

3. 相似度定义

采用余弦距离。如对于用户$i$(embedding为$e_i$)和房源$j$(embedding为$e_j$),其相似度$sim(i,j)$为: $$ sim(i,j) = \frac{e_i \cdot e_j}{\Vert e_i\Vert \cdot \Vert e_j\Vert} $$

总结

就技术而言,并没有什么创新点,基本都是在Word2Vec提出的内容之中,只是加入了工程、业务上的改进。

就思路而言,短期兴趣推荐和长期兴趣推荐跟协同过滤方法是类似的,分别是基于商品(item-based)和基于用户(user-based)的思路,两者具有不同的适用场景和计算、存储复杂度,最终的系统就是融合了两者。



  1. Grbovic M, Cheng H. Real-time personalization using embeddings for search ranking at airbnb[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 311-320. 


Share this post
< Pre: [KDD2018]Alibaba Embedding Pos: [KDD2017]Struc2Vec >
434 comments
Similar posts
Add a new comment