核心观点

内容精讲

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处理长序列用户行为、如何平衡计算效率与模型效果,以及如何在工业级系统中分阶段落地复杂模型。

阅读原文 → 返回 AI 技术文档

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