写点什么

Airbnb 基于嵌入技术的实时个性化推荐

  • 2019-11-14
  • 本文字数:4609 字

    阅读完需:约 15 分钟

Airbnb基于嵌入技术的实时个性化推荐

导读:今天为小伙伴们分享的是王鸣辉老师解读的一篇老文,作为去年 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


此文主要是对论文的重点部分进行翻译性地解读,同时穿插着我自己对各部分理解和想法。如有问题,欢迎指正。


目前在推荐上比较流行的方案,主要是基于 googlewide&deep 开启的 end to end 的模型,uid,itemid 作为 embedding 输入加上其他各种特征,并着重在 wide 部分进行优化,比如以 deepFM 为首的模型。我们自己也是在这个方向上实践的。这篇论文是先单独训练 embedding,然后在把 embedding 当特征输入到 rank model 中。

Introduction

搜索算法的目标就是为了提升网站的收益,在 Airbnb 需要同时优化客人和房主两方,即给定地点和日期后,将位置、价格、风格和评价等方面对用户有吸引力的房子排前。也要考虑房主的偏好,将可能会拒绝客人的排名降低,比如用户评价差,有宠物,人数等等原因。


在一个 search session 中会有多次点击和联系房主,这些都是 in-session signals。实时个性化推荐的目标是在搜索会话期间为客人展现更多类似于我们认为他会喜欢的房间,同时,可以用负面信号,如跳过高排名的 listings,去减少与之相似的我们认为不喜欢的。


引入 listing embeddings,利用这些相似性去为 Search Ranking Model 创建个性化特征,驱动相似 listing 推荐。


由于一般人一年旅行一到两次,在 Airbnb 的场景中,booking 是很稀疏的,其中大量用户只订过一次。为此,训练 listing_type 级别的 embeddings。同样,也学习与 listing _type embeddings 同一向量空间的 user_type embeddings。这里边的一个亮点就是 user_type embeddings 和 list_type embeddings 是同一空间下的。


历史工作


  • Real-time Personalization

  • Adapting Training for Congregated Search

  • Leveraging Conversions as Global Context

  • User Type Embeddings

  • Rejections as Explicit Negatives


效果:


CTR 相对于现有的模型提升 20%。


如上文所说,接下来介绍 Listing Embeddings、Listing_type Embeddings 和 User_type Embeddings

Listing Embeddings

首先定义 session,用户的点击序列就是 session,两个点击间超过 30min 就是一个新的 session,或者预订了房间也算是结束了一个 session。根据此数据集去学习,使用 skip-gram model 最大化如下目标函数:



是在临近点击 li 情况下,应用 soft-max 后 li+j 被点击的概率:



变量的定义很好理解,l 就是 listing ( paper 中的 listing 我理解就是房子 ),u 就是 user,v 代指 vector,像 vli 就是指 listing i 的 embedding,ν 代指所有 listings 集合。


随机采样当做负例和传统的 skip-gram 相同,于是优化目标函数转变为:



D 指数据集, p 为 positive,n 就是 negative 了。


1. Booked Listing as Global context


session 被分为两种:


  • booked sessions ( i.e. click sessions that end with user booking a listing to stay at

  • exploratory sessions (i.e. click sessions that do not end with booking, i.e. users were just browsing


引入最终预订的 listing 作为全局上下文,无论其是否在窗口内,帮助优化临近点击 listing 到预订 listing 的相关关系。于是 booked sessions 的 embedding 更新规则变成:




2. Adapting Training for Congregated Search


在线预定一般都是在一个 market 里去选择,比如你想去 London,那么你会在 London 这个 market 里去选择。而负样本是全局随机采样的,很可能与正例不在同一个 market 里,导致同 market 内学习到的相似性不够好,为此引入同 market 的随机样本作为额外的负样本。



3. Cold start listing embedding


新房子的 embedding,用 10 英里内最相似的三个房子(类型、价格范围)的 embedding 均值来代替


4. Examining Listing Embeddings


在 8 亿的 click sessions 上训练 32 维 embeddings,进行 K-means 聚类,可以发现位置相近的聚集在一起,可知学习到了地理位置的相似性。也可以看到相同类型和价格的 listing 比不同的更相似,如下图:



User-type & Listing-type Embeddings

用用户预订序列来训练 Embedding,可以捕获 cross-market 的相似度,不过这样学习有以下挑战:


  • 预订是个低频事件,booking sessions 数据相较于 click sessions 少很多。

  • 许多用户只预订一次,session 长度为 1 是无法被学习的。

  • 对于任何一个实体,要学到有意义的 embedding 需要实体出现在数据中至少 5-10 次。

  • 用户两次预订间隔时间很长的话,用户自身偏好可能会改变比如因为职业的改变而对价格敏感度改变。


解决方案,引入 Listing_type embeddings:


给定一个 listing_id,根据它的位置,价格,类型,容量,床数等进行规则映射,用数据驱动的方式最大化每个 listing_type 桶的覆盖范围。Airbnb 的映射 table 如下:



1. Training Procedure


此处我觉得是一个比较有想法的点,就是学习在同一向量空间下的 user_type 和 listing_type embedding。


是用户预订序列数据集,将 user_type,list_type 组合在一起,再拼成一个序列即相当于把他们确定到了一个空间中。


于是在 skip-gram 中, 为中心项时,目标函数为:



为中心项时,目标函数为:




2. Explicit Negatives for Rejections


不像一般的场景里只考虑用户偏好,Airbnb 的这个场景既要考虑用户偏好也要考虑主人的偏好。引入房主拒绝行为,作为房主方的显示反馈。某种层面上会使对用户不敏感的房主和评分一般的客人聚拢,减少客人被拒绝几率,提高预定概率。


对于被拒绝的序列,我们优化的目标函数分别变为:



and


EXPERIMENTS

这段主要介绍了下训练和离线评估的细节,和 listing Embeddings 在房间相似推荐中的应用,以及如何将 embedding 处理为特征提供给 Search Ranking Model。


1. Training Listing Embeddings


  • 30 分钟不活跃原则

  • 移除偶发和短点击 ( 如停留少于 30s )

  • 只保留 >=2 的 sessions

  • 匿名 session,移除 userid


点击会话分为 exploratory sessions & booked sessions。训练数据中 booked sessions 过采样 5 倍达到最好效果。


① Setting up Daily Training


  • over multiple months

  • 每天引入新一天,去掉最早一天的数据

  • 重新训练是要比增量训练现有的 vector 效果好。


模型中,day-to-day vector 的变化不会导致矛盾,因为最终使用的是 embeddings 间的相似度而非具体的 vector


② 超参


  • dimensionality 32

  • window size 5

  • iterations 10


③ Offline Evaluation of Listing Embeddings


从预订房间开始回溯 17 个点击,统计预订房间在对应点击时刻的平均位置,比较了如下三个版本:


  • d32: trained using (3)

  • d32 book: trained with bookings

  • as global context (4)

  • d32 book + neg: trained with bookings

  • as global context and explicit negatives from same market (5)


最终可以发现 d32 book + neg 效果最好,具体如下图:



④ Similar Listings using Embeddings


Airbnb home listing page 有相似房源,会展示相同可用日期下类似的房源,用余弦相似度,最近邻,取 top K。


A\B Test 显示,CTR 整体提升 21% ( 有入住日期的提升 23%,无日期提升 20% ),在相似房源处进行最终预定的提升 4.9%。


2. Real time personalization in Search Ranking using Embeddings


训练数据 , K 是搜索后返回 listing 的序号,x 特征 vector,y 是 label:


  • y = 1 booked

  • y = 0.25 contacted but no booked

  • y = -0.4 host rejected

  • y = 0.01 clicked

  • y = 0 just viewed


每次使用最近 30 天的数据训练新的 ranking model。


特征具体如下:


Feature vector xi for the i-th listing result consists of listing features, user features, query features and cross-features. Listing features are features associated with the listing itself, such as price per night, listing type, number of rooms, rejection rate, etc. Query features are features associated with the issued query, such as number of guests, length of stay, lead days, etc. User features are features associated with the user who is conducting the search, such as average booked price, guest rating, etc. Cross-features are features derived from two or more of these feature sources: listing, user, query. Examples of such features are query listing distance: distance between query location and listing location, capacity fit: difference between query number of guests and listing capacity, price difference: difference between listing price and average price of user’s historical bookings, rejection probability: probability that host will reject these query parameters, click percentage: real-time memorization feature that tracks what percentage of user’s clicks were on that particular listing, etc. The model uses approximately 100 features. For conciseness we will not list all of them.

——详见原 paper


他们使用了 pairwise regression 的思路去训练了一个 GBDT model,使用的支持 Lambda Rank 的 gbdt,用 NDCG 评估。


https://github.com/yarny/gbdt


① Embedding Features for Search Ranking


| Feature Name | Feature Name |


|—————|:——————-:|


|EmbClickSim| similarity to clicked listings in Hc


|EmbSkipSim| similarity to skipped listings Hs


|EmbLongClickSim| similarity to long clicked listings Hlc


|EmbWishlistSim| similarity to wishlisted listings Hw


|EmbInqSim| similarity to contacted listings Hi


|EmbBookSim| similarity to booked listing Hb


|EmbLastLongClickSim| similarity to last long clicked listing


|UserTypeListingTypeSim| user type and listing type similarity


② User-type & Listing-type Embedding Features


  • 500K user types

  • 500K listing type

  • 50 million user booking sessions


③ Embedding Features Coverage and Importances



④ Online Experiment Results Summary


引入 embedding features 后,NDCU 提升 2.27%,booking DCU 增长 2.58%。

收获 & 反思

  • 我们自己的 end to end 模型所产生的 embedding 是否训练的足够充分有效。

  • 尝试引入以其他逻辑训练的 embeddings,不一定直接引入 embedding,论文中引入的实际是相似度。

  • 训练同一向量空间下的 embedding 是很好的想法,将本来不同的 embedding 进行了统一。

  • 和平台自身场景、需求进行合理的结合。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247495109&idx=1&sn=eccf1f678affd8272ace63dfa207c23a&chksm=fbd75fa9cca0d6bfd723de5cc78631993670f99567fd3457a63187232105c854bd189acc4fe6&scene=27#wechat_redirect


2019-11-14 08:001943

评论

发布
暂无评论
发现更多内容

6个常见的IB网络不通问题

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

这问题巧了,SpringMVC 不同参数处理机制引发的思考 | 京东云技术团队

京东科技开发者

spring springmvc HTTP 请求方式 企业号 6 月 PK 榜

喜报:Apache Flink 荣获 2023 年度 SIGMOD 系统奖 !!!

Apache Flink

大数据 flink 实时计算

数据库性能优化必读,AntDB-M数据库的哈希索引设计

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 6 月 PK 榜

ClickHouse数据表迁移实战之-remote方式 | 京东云技术团队

京东科技开发者

Clickhouse 数据迁移 Remote 迁移数据 企业号 6 月 PK 榜

inBuilder低代码平台特性推荐系列-第四期

inBuilder低代码平台

从2PC和容错共识算法讨论zookeeper中的Create请求 | 京东云技术团队

京东科技开发者

zookeeper 分布式事务 zookeeper分布式锁 企业号 6 月 PK 榜 容错共识算法

前端文件上传的几种交互造轮子 | 京东云技术团队

京东科技开发者

前端 Vue3 文件上传 文件上传下载 企业号 6 月 PK 榜

为什么很多互联网公司很少做单元测试?

博文视点Broadview

专场来袭,深度解读阿里云视频云的全智能进化

阿里云CloudImagine

云计算 阿里云 视频云

NFTScan | 06.19~06.25 NFT 市场热点汇总

NFT Research

热点 NFT\ 市场

沈阳等级保护测评机构有哪些?有几家?在哪里?

行云管家

等保 等级保护 等保测评 沈阳

DataLeap的全链路智能监控报警实践(二):概念介绍

字节跳动数据平台

Hive执行计划之只有map阶段SQL性能分析和解读

不在线第一只蜗牛

sql 开发语言 开发框架

堡垒机的作用以及价格简单说明-行云管家

行云管家

网络安全 堡垒机 IT运维

福昕软件与北信源达成战略合作,构建PDF文档安全新格局

新消费日报

教你学会使用Angular 应用里的 export declare const X Y

华为云开发者联盟

前端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

磐舟磐基平台:基于KubeEdge的落地实践

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

用代码玩转迷你图:手把手教你用编程语言打造简洁易读的数据图表!

不在线第一只蜗牛

代码 框架开发

2023-06-26:在大小为 n x n 的网格 grid 上,每个单元格都有一盏灯,最初灯都处于 关闭 状态 给你一个由灯的位置组成的二维数组 lamps 其中 lamps[i] = [rowi,

福大大架构师每日一题

Go 算法 rust 福大大架构师每日一题

JavaScript 实践+理论(总结篇):作用域、闭包、this、对象原型

Immerse

闭包 原型链 作用域 this 原型模式

精选8道ES高频面试题和答案,后悔没早点看。

王中阳Go

elasticsearch 面试题 go面试题 后端面试题 ES面试题

h2database BTree 设计实现与查询优化思考 | 京东云技术团队

京东科技开发者

数据库 索引 B+tree 企业号 6 月 PK 榜 h2database

如何驯化机器狗读懂人类手势,手把手教你!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨

云游世界NFT卷轴游戏dapp系统开发合约定制

开发微hkkf5566

基于 LRU-K 模型如何实现高效的元数据缓存?

焱融科技

#高性能 #文件存储 #分布式存储

百度召开CVPR首个大模型研讨会,吸引超1000支队伍参与文心大模型国际比赛

新消费日报

【直播预告】HarmonyOS极客松赋能直播第二期:数据库与网络连接开发

HarmonyOS开发者

HarmonyOS

Airbnb基于嵌入技术的实时个性化推荐_文化 & 方法_王鸣辉_InfoQ精选文章