作者丨王喆
单位丨Hulu高级机器学习工程师
研究方向丨计算广告、推荐系统
知乎专栏丨王喆的机器学习笔记
今天我们聊一聊 KDD 2018 的 Best Paper,Airbnb 的一篇极具工程实践价值的文章 Real-time Personalization using Embeddings for Search Ranking at Airbnb。
相信大家已经比较熟悉我选择计算广告和推荐系统相关文章的标准:
- 工程导向的;
- 阿里、Facebook、Google 等一线互联网公司出品的;
- 前沿或者经典的。
Airbnb 这篇文章无疑又是一篇兼具实用性和创新性的工程导向的 paper。文章的作者 Mihajlo 发表这篇文章之前在 Recsys 2017 上做过一个 talk,其中涉及了文章中的大部分内容,我也将结合那次 talk 的 slides [1] 来讲解这个论文。
废话不多说,我们进入文章的内容。
Airbnb 作为全世界最大的短租网站,提供了一个连接房主(host)挂出的短租房(listing)和主要是以旅游为目的的租客(guest/user)的中介平台。这样一个中介平台的交互方式比较简单,guest 输入地点,价位,关键词等等,Airbnb 会给出 listing 的搜索推荐列表:
▲ Airbnb的业务场景
容易想见,接下来 guest 和 host 之间的交互方式无非有这样几种:
- guest点击listing(click)
- guest预定lising(book)
- host有可能拒绝guest的预定请求(reject)
▲ Airbnb的交互方式
基于这样的场景,利用几种交互方式产生的数据,Airbnb 的 search 团队要构建一个 real time 的 ranking model。
为了捕捉到用户 short term 以及 long term 的兴趣,Airbnb 并没有把 user history 的 clicked listing ids 或者 booked listing ids 直接输入 ranking model,而是先对 user 和 listing 进行了embedding,进而利用 embedding 的结果构建出诸多 feature,作为 ranking model 的输入。这篇文章的核心内容就是介绍如何生成 listing 和 user 的embedding。
具体到 embedding 上,文章通过两种方式生成了两种不同的 embedding 分别 capture 用户的 short term 和 long term 的兴趣。
一是通过 click session 数据生成 listing 的 embedding,生成这个 embedding 是为了进行 listing 的相似推荐,以及对用户进行 session 内的实时个性化推荐。
二是通过 booking session 生成 user-type 和 listing-type 的 embedding,目的是捕捉不同 user-type 的 long term 喜好。由于 booking signal 过于稀疏,Airbnb 对同属性的 user 和 listing 进行了聚合,形成了 user-type 和 listing-type 这两个 embedding 的对象。
我们先讨论第一个对 listing 进行 embedding 的方法:
Airbnb 采用了 click session 数据对 listing 进行 embedding,其中 click session 指的是一个用户在一次搜索过程中,点击的 listing 的序列,这个序列需要满足两个条件,一个是只有停留时间超过 30s 的 listing page 才被算作序列中的一个数据点,二是如果用户超过 30 分钟没有动作,那么这个序列会断掉,不再是一个序列。