JourneyFormer: Encoding Airbnb Guest Journey with Sequence Modeling 深度解读
1. 问题与动机
Airbnb 这类双边电商搜索排序里,guest 的行为序列"长、探索性强、且转化标签稀疏"。一个 guest 常跨多个目的地/日期反复浏览,序列长度从 0(新用户)到上万事件不等,但真正的强信号——booking——只占全量数据约 5%。在 JourneyFormer 之前,Airbnb 排序依赖约 900 维人工特征聚合 guest 历史统计(如某周期总预订数、平均预订价、guest-listing 交叉的浏览次数),再由 MLP 打分。这套强基线问题有二:随着工程师不断堆特征,维护成本飙升;聚合后的数值特征难以让模型推断复杂的 guest 意图。这促使团队转向更可扩展、可持续的序列建模。落地挑战明确有三:(1) 序列长且含噪——view 事件远多于其它;(2) 事件类型异构(view / booking request / booking / cancellation / review / CS ticket),频率差异极大;(3) 标签稀疏且以 booking 为目标,而非社交平台常用的 engagement——一次 view 可能只是探索或横向对比,噪声很大。
2. 方法详解
JourneyFormer 分四块。① 事件选择与截断:采用 frequency-based selection,把序列拆成 long-term(过去 7 年、剔除高频 view 事件、聚焦低频事件)与 short-term(过去 21 天、含 view)。Figure 3 显示 view 占 97.8%、其余事件仅 2.2%。long-term/short-term 分别截断到最多 80/200 个事件,阈值按"覆盖 top 2% 最长序列 + GPU VRAM 上限"设定,再按时间戳合并重排。② 特征表示:共享 feature pool,全部用原始特征、不做特征工程,总数 <100(旧模型数百维)。ID 特征(去标识 listing ID、host ID、分层 S2Cell ID)用 Unified Embedding——共享 embedding 表配 m 个静态随机种子,e_xid = Concat over m of UnifiedEmb(Hash_si(x_id)),同等参数预算下比独立 embedding 更可扩展、性能更好。S2Cell 用 14 个层级(level 0 大区到 level 13 街道级,约 1.27 km²),多级地理编码显著优于单一粒度。③ 序列编码:自注意力编码器,多头注意力 + 位置编码 + 残差 + causal mask(防未来事件泄漏,并使中间时刻 embedding 可被后续搜索复用以加速),堆叠多层;实测去掉 feed-forward 层反而 NDCG 更高且更快(推测因 MLP 已把事件映射到 embedding,FFN 冗余)。④ 排序:拼接 sequence embedding + query + listing candidate,过 MLP 出分,用 listwise loss 端到端训练(Eq.4:RankingLoss = -Σ_i [y_i/Σ_j y_j]·log Softmax(z_i))。标签归因:若某 listing 在搜索后 7 天内被预订则标 1,否则 0;只保留含 booking 的搜索、且每 guest 每天最多 4 次搜索以控数据量保多样性。训练规模:booked 序列量级约 10^8,平均每序列 6.9 次搜索,约 9 亿 search-label 对。模型:4 层 Transformer、d=128、post-norm,事件经 1024-512-256-128 的 MLP 投影、输出降至 32 维存储;ranking 头为轻量 MLP(512-128-64-1 量级)以支持实时推理。
3. 核心技术贡献
(1) 把序列建模"工程化"真正落地到搜索排序,贡献核心是四类生产决策的系统拆解(事件选择/capping、特征编码、标签归因、训练加速),而不止于模型结构。(2) 三套训练加速:search batching(让同一 guest 在 T=4/7/10 的多次搜索复用前序时间戳已算出的 encoder embedding,单次前向+反向即可,避免重复跑大 encoder)、sequence bucketization(按长度分桶,边界 4/16/44/88/148/280,对应六种 batch size,用 TensorFlow 的 bucket_by_sequence_length,缓解 padding 造成的数据倾斜)、sparse calculation(只把非 padding 的搜索喂入 ranking 模型,tf.gather_nd)。合计约 4x 吞吐;消融见 Table 2:去掉 search batching 吞吐 -75.41%(即降到约 1/4)、去掉 bucketization -29.35%、去掉 sparse calc -20.54%。(3) 用 Unified Embedding + 14 级分层 S2Cell 处理高基数 ID 与地理信息,去掉 S2Cell ID 造成最大 NDCG 跌幅。(4) 难得地完整记录"探索过但最终放弃"的方案(更大模型、实时 encoder、加 search 事件、多任务、DIN early-fusion),为社区降低踩坑成本。
4. 实验结果分析
离线 NDCG(Table 1,相对强基线,作者注明 0.3% 即显著):JourneyFormer-Long +0.44%、-Short +1.30%、-Full +1.48%(标准差 ±0.01~0.03%)。short-term 贡献明显更大——最终 booking 往往来自近期浏览的 listing,近期 view 是强烈的 booking 意图信号。设计消融(Figure 6):去掉 FFN 在 128/256/128-256-128 各配置均掉点;逐一移除 listing/host/S2Cell ID embedding 掉 0.05%~0.2%,其中去 S2Cell ID 最严重;14 级 S2Cell 优于只用 level 0-6、7-13 或单独 level 13。序列长度(Figure 7):long-term 的 NDCG 随长度单调上升(更多低频事件有助意图预测);short-term 在 11-20 个事件处达峰后随长度下降(浏览很多却无明确意图的 guest 更难预测,反证 frequency-based selection 的合理性)。分布漂移(Figure 8):训练截止后一个月内多数日期仍保持 >1.4% 增益、NDCG 衰减 <0.1%,说明无需频繁重训,利于部署。在线 A/B(Table 3,三周):Full 版 Bookers +0.55%(p<0.01)、Booked Nights +0.82%(p<0.01)、Views +0.90%(p<0.01);Long 版增益较小(Bookers +0.31%)。邮件 listing 排序(Table 4):Full 版邮件点击 Views +5.04%(p<0.01)、Bookers +0.16%、Booked Nights +0.23%。
5. 局限与未来方向
作者明确陈述的负面结果/局限:① 加大模型(扩 embedding 表、加层、提高维度、换架构与 LR 调度)相对成本仅边际收益,并积累技术债,故最终保留简单架构;② 序列模型若改实时推理,离线排序指标提升 >5%,但因 retargeting(反复把用户看过的 listing 推上来)不转化为在线收益,这与社交网络"反复曝光提升 engagement"的规律相反;③ 把 search 事件加入序列无效,可能因 search 数据噪声大;④ 多任务(把 view 当额外标签)离线有些收益、在线无提升,因 view 事件噪声大;⑤ DIN-style early-fusion(query/listing 投影成事件参与自注意力)离线 +0.20%,但训练多花约 15% 且无法离线预计算 encoder 输出、上线 serving 成本高。未来方向:每几小时刷新一次 sequence embedding、纳入 wishlist 创建/支付页访问/地图移动等事件、探索 RL + 序列模型。
6. 工业实践意义
对搜索/推荐实践者:① "离线涨点 ≠ 在线涨点"被本文反复验证——实时 encoder、多任务、加 search 事件都离线有效却在线失效,retargeting 是主因;上线前务必以在线 A/B 校验,并警惕离线指标偏向 booker 子集的评估偏差。② 部署架构可直接借鉴:把"贵"的序列 encoder 用 batch inference 周期性产出 embedding 落库,把"轻"的 ranking 头走实时推理、读 query+listing+sequence embedding——兼顾表达力与延迟。③ 训练加速三件套(search batching / bucketization / sparse calculation)针对"长序列 + 单 guest 多搜索"的数据特点,可迁移到类似场景,其中 search batching 收益最大(去掉吞吐降 75%)。④ 用 booking 这类稀疏强信号做归因、把 7 天内的转化回溯到对应搜索,比用高频含噪的 click/view 更稳——社区搜索可类比把收藏、发帖、深度互动等强信号作为归因目标,缓解纯点击的弱监督问题。⑤ frequency-based selection(高频事件给短窗、低频事件给长窗)是控制序列长度与显存的实用技巧。资源上 <100 原始特征、4 层小 Transformer(d=128)、输出降至 32 维,整体 serving 成本可控。