查看原文
其他

Airbnb 搜索:Embedding 表示学习

The following article is from 深度学习排序艺术 Author 谷育龙Eric

(点击上方公众号,可快速关注)

转自:深度学习排序艺术

【导读】:本文将基于Airbnb KDD 2018年的论文,介绍Airbnb搜索中,如何学习item、user embedding,并应用到搜索推荐中。对工业界搜索推荐系统中如何更好地学习embedding、如何应用到搜索推荐,具有很好的借鉴作用。


在搜索推荐系统中,基于word2vec的方法学习embedding时,通常基于用户的行为序列(例如在淘宝中的点击、购买)来构造训练数据,可以是单个场景(搜索或推荐)或全网。关键的问题包括:
  • 如何构造正样本?包括如何切分序列,如何选取生成正样本,如何对不同重要程度的正样本做特殊处理。

  • 如何选取负样本?负样本的构造选取方法,对后续搜索推荐应用的效果至关重要。

  • 如何解决冷启动问题?冷启动问题,指互联网应用中,存在大量user和item,相关的行为数据很少,无法有效学习到embedding。

  • 如何将学习的embedding应用到搜索或推荐中?


本文将介绍Airbnb论文中在处理这些问题的特色。


1.正样本构造


1.1 序列数据构造
Airbnb在这篇论文里,基于用户在搜索系统中的行为序列,构造训练数据。
一个用户某个时间内有旅行计划,在Airbnb搜索系统的行为基本如下图所示:
基于点击行为构造训练数据的流程如下:
  • 对于每个用户,作者将该用户在Airbnb的点击行为按照时间从小到大排序成一个长序列。
  • 去除掉在页面停留时间少于30秒的listing,来减少噪声行为。如果两个行为间时间差超过30分钟,说明相关性比较少,分割成两个序列。对于每个用户,就生成了多个session序列。
  • 汇总所有用户的序列,作为训练数据。
基本的skip-gram模型来学习listing embedding,正样本为窗口长度  内的listing,负样本为从所有listing随机选取的listing:

其中  为正样本集合,  为负样本集合,  为中心listing,  为context listing,  表示input embedding表示,  表示output embedding表示。

1.2 预定样本加权
对于包含预定样本的session (booked session),如果在相同序列,即使不同窗口内,也作为正样本,从而加强模型对预定这个重要样本的学习:

其中  为预定的listing。


2. 负样本构造


2.1 随机负样本
Airbnb中选取负样本的第一种方法是,用word2vec的方法,从所有listing随机选取负样本:
根据item频度的幂来采样负样本,可以解决高频item在正样本出现过多、embedding学习完后,大多item embedding最相似的都是这些高频item的问题。

2.2 hard负样本
在Airbnb中,有成千上万个地方。随机采集的负样本,和正样本大概率不在一个地方,对于学习好的embedding表示意义不大。因此,作者选取了在同一个地方的item来进行采样。公式变为:


其中  为和中心listing  在相同地方的listing。
在embedding表示学习中,在随机负样本以外,通常可以选取一些hard negatives ,例如和正样本在相同类目下的其他样本。通过将随机负样本和hard negatives以一定比例混合,可以使学习的模型更加有区分度。论文 [2]介绍了Facebook在负样本选取、混合的一些经验。



3. 基于预定序列学习embedding


基于用户短期的点击序列信息,非常适合建模相同地方listing的相似关系。

在个性化搜索推荐中,考虑用户长期的成交购买信息,十分重要。但长期的预定信息和当前需求,通常不在一个地方,如何建模不同地方的listing的关系呢?Airbnb的解决方法是通过建模用户长期的预定序列,来建模学习不同地方的listing的关系,进而可以在搜索推荐中,考虑用户过去长期的预定listing的embedding信息, 提供更好的个性化搜索推荐服务。然而,基于预定序列学习embedding,存在以下问题:

  • 预订session序列数据远少于点击序列,因为预定是少量行为

  • 大量user, item的历史预定次数非常少,无法有效学习embedding

  • 长时间后,用户特点可能发生变化


为了解决这些问题,Airbnb基于item、user属性将他们分,学习分组item type、user type的embedding。
基于订单序列,user type, item type的训练数据构造如下:
  • 对于每个用户,把过去的预定序列按时间排序, 把(user type, item type)对拆分成两个id,放到序列中

  • 多个用户的这些序列,就构成了长期预定序列数据

  • 对于预定失败的数据,作为额外的负样本。


然后对分组,就能学到比较好的user type, item type的embedding了:


4.Embedding在搜索推荐中的应用


4.1 推荐
基于点击行为学习的embedding, 很好的建模了相同地方不同listing的相似度。Airbnb将embedding应用到了相同地方找相似的个性化推荐应用中。从下图可以看出,embedding表示学习,很好地建模了listing的风格、价格、房间类型等信息。

Embedding,非常适合用于推荐系统的召回阶段,例如电商中的相似相关商品召回 [4,5],服务线上推荐系统。

4.2 搜索

Airbnb基于学习的embedding,构造了8个高级实数特征,添加到已有的GBDT搜索排序模型中,离线和在线实验表明,搜索排序能取得更好的效果。
离线提升效果如下:

8个基于embedding的高级特征的特征重要性如下图所示:


后记


搜索推荐中的embedding表示学习,对召回等模块具有重要的作用。

如何更好地构造正负样本,尤其是负样本 [2] ?每个item学习一个embedding是否足够,能否用多个embedding更好地建模item在不同关系中的特性 [4]?

更多关于基于图神经网络(Graph Neural Networks) 学习embedding,应用到线上搜索推荐系统的模型,参见论文 [3][4]。

由于本人水平有限,难免有疏漏错误之处,文章中存在的问题,欢迎大家指正!

参考论文:
  1. Real-time Personalization using Embeddings for Search Ranking at Airbnb,KDD 2018
  2. Embedding-based Retrieval in Facebook Search, KDD 2020
  3. Graph Convolutional Neural Networks for Web-Scale Recommender Systems, KDD 2018
  4. Decoupled Graph Convolution Network for Inferring Substitutable and Complementary Items, CIKM 2020.
  5. Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba, KDD 18


- EOF -


推荐阅读  点击标题可跳转

1、OpenMMLab 的这些 CV 开源库,你收藏了吗?

2、揭秘为什么大公司搜索推荐都用 CTR/CVR Cotrain 的框架

3、SMP2020 微博情绪分类比赛总结


看完本文有收获?请转发分享给更多人

关注「大数据与机器学习文摘」,成为Top 1%

点赞和在看就是最大的支持❤️

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存