核心观点
- Airbnb构建了基于Transformer的序列模型,将用户长达七年的行为(预订、浏览、取消等)编码为向量,替代传统手工特征,实现更精准的搜索排序。
- 为解决长序列计算难题,将用户行为拆分为长期序列(7年,最多80个事件)和短期序列(21天,最多200个浏览),分别建模后融合。
- 通过搜索批处理(一次编码多次路由)、长度分桶和稀疏计算等优化,训练吞吐量提升约4倍;服务时采用离线预计算+在线实时检索的分离架构,保证低延迟。
- 分三阶段上线:先长期序列,再加短期序列,最后引入集合排序器(setwise ranker),离线NDCG累计提升3.78%,在线指标显著增长(uncanceled bookers +0.55%等)。
- 该方法相比传统手工特征更可扩展,能捕捉用户深层偏好,尤其适合预订转化率优化场景。
内容精讲
Airbnb的搜索排序系统长期依赖手工特征,如历史预订总数、平均价格等聚合统计。随着特征数量增长到数百个,这种方法的可扩展性和表达能力逐渐受限。为了更全面地理解用户偏好,Airbnb团队决定采用Transformer序列模型,直接编码用户的完整旅程——包括过去七年的预订、评价、取消以及近21天的浏览行为。
用户行为序列面临三大挑战:一是浏览事件占绝大多数,部分用户积累数十万次浏览,直接建模计算不可行;二是预订事件稀疏且噪声大,浏览可能反映真实意图也可能只是随意浏览;三是训练成本高昂,需要优化。为此,团队将用户序列拆分为两部分:长期序列(过去7年,最多80个事件)捕获预订、评价等低频但信息丰富的事件;短期序列(过去21天,最多200个浏览)反映近期浏览意图。两个序列共享统一的嵌入表,对高基数ID(如房源、房东)和层级地理ID进行编码。
训练效率方面,团队实现了三项关键优化。最有效的是搜索批处理:由于编码器使用因果掩码,一次前向传播即可生成所有时间步的嵌入,将多次搜索路由到对应中间嵌入,避免重复编码。此外,通过长度分桶减少批内填充浪费,以及稀疏计算消除排名模型中的填充搜索,三者共同带来约4倍的训练吞吐提升。服务时,序列编码器作为每日批处理任务离线运行,生成用户嵌入并存储;当用户发起搜索时,排名模型实时检索对应嵌入,结合当前查询对候选房源打分,保持低延迟。
系统分三阶段上线。第一阶段仅引入长期序列,离线NDCG提升0.44%,验证了序列学习用户表征的有效性。第二阶段加入短期序列,带来额外1.04%的提升(累计1.48%)。第三阶段引入集合排序器(setwise ranker),与序列编码器联合训练,相比逐一点排序器,它能同时考虑一组候选房源,理解相对差异,进一步带来2.3%的提升。最终离线NDCG累计提升3.78%,在Airbnb持续优化十余年的排名系统中,0.3%的提升即被视为显著,3.78%是巨大飞跃。
在线A/B测试也证实了效果。仅长期序列:uncanceled bookers +0.31%,views +0.38%。加入短期序列后:uncanceled bookers +0.55%,uncanceled nights +0.82%,views +0.90%,均统计显著。这表明模型能将用户更喜欢的房源排到更高位置,帮助用户更高效地找到心仪房源。

阅读价值
本文适合搜索推荐工程师、AI应用开发者和架构师阅读。通过Airbnb的实践案例,可以学习如何用Transformer处理长序列用户行为、如何平衡计算效率与模型效果,以及如何在工业级系统中分阶段落地复杂模型。

内容与图片版权归原作者所有 · 原文: https://medium.com/airbnb-engineering/personalizing-airbnb-search-by-learning-from-the-guest-journey-bcefd1915624?source=rss----53c7c27702d5---4