← Thoughts

DCRNet:用户没有立刻下单,不等于他不喜欢

2026-07-23

它想解决什么问题?

机票排序和普通商品排序有两个明显不同。

第一个不同是,机票的价值取决于当时的查询和环境。同一位用户过去买过早班机,不一定说明他一直喜欢早班机。也许当时早班机最便宜,或者只有早班机还有余票。如果只记住“他买过早班机”,却忽略当时搜索的日期、价格和候选列表,模型很容易把临时选择误认为长期偏好。

第二个不同是,用户经常不会立即下单。他可能先点击一趟航班,随后继续比较价格和时间,过几个小时甚至几天才回来购买。最后一次点击到最终下单之间的行为,往往反映了用户如何改变想法、排除候选并逐渐确定行程。普通排序模型通常把所有历史行为混在一起,很难单独捕捉这段关键过程。

DCRNet 要回答的其实是两个问题:

用户过去的选择中,哪些是稳定偏好,哪些只是由当时的查询和环境造成的?

用户点击后没有立即购买的这段时间里,他的兴趣发生了什么变化?

它是怎么做的?

DCRNet 主要包含两条建模路径。

第一条路径是混合相似度注意力。模型不会直接把全部历史行为压成一个兴趣向量,而是先比较每次历史行为与当前搜索在“查询条件”和“环境信息”上的相似程度。

相似度高的行为,更多反映用户在相近出发地、目的地、日期和价格环境下的选择;相似度低的行为,则可能包含不受当前环境限制的长期偏好。模型将两部分分别提取,再通过自监督约束让它们保持区分,避免把场景影响和个人偏好混在一起。之后,模型再结合当前候选航班,判断两类兴趣中哪些信息对这次排序有用。

第二条路径是延迟掩码注意力。模型先识别用户是否在购买前的一段时间内点击过同一个行程。如果用户后来完成购买,这类样本会被视为延迟购买样本。

对于延迟购买样本,模型不会查看所有历史记录,而是做两次筛选:先保留最大延迟窗口以内的行为,再保留与当前查询和环境足够相似的行为。筛选后,模型按照行为时间和目标航班的相关性分配权重,重点观察从最后点击到最终购买期间,哪些行为真正推动了决策。

最后,DCRNet 分别建立常规转化模型和延迟转化模型,并根据延迟时长动态融合两者。常规模型学习一般情况下的用户偏好,延迟模型专门学习“点击后经过比较再购买”的决策过程。

背后的理论与公式

先看第一条路径。设当前查询和环境的表示分别为 $e_q$、$e_c$,第 $k$ 次历史行为对应的查询、环境和行程表示分别为 $e_k^q$、$e_k^c$、$e_k^{id}$。模型先计算这段历史与当前场景的相似权重:

\[w_k^{q,c}= \frac{(e_q\Vert e_c)^\top(e_k^q\Vert e_k^c)} {\sum_{j=1}^{|H|}(e_q\Vert e_c)^\top(e_j^q\Vert e_j^c)}\]

$\Vert$ 表示向量拼接。分子衡量第 $k$ 次历史行为与当前场景有多相似,分母负责归一化。得到 $w_k^{q,c}$ 后,同一段历史行程被拆成两个部分:

\[e_k^r=w_k^{q,c}e_k^{id}, \qquad e_k^{ir}=(1-w_k^{q,c})e_k^{id}\]

$e_k^r$ 表示与当前查询和环境相关的兴趣,$e_k^{ir}$ 表示相对不受当前场景影响的兴趣。如果 $w_k^{q,c}$ 接近 1,这次历史选择主要进入相关兴趣;如果它接近 0,则更多进入非相关兴趣。两者相加仍等于原始行程表示:

\[e_k^r+e_k^{ir}=e_k^{id}\]

因此,这个过程不是删除历史信息,而是把同一段信息按场景相关性重新分配。论文进一步使用成对排序约束,让相关兴趣更接近自己的中心、远离非相关兴趣的中心,反之亦然,从而减少两种兴趣之间的混淆。

再看延迟购买路径。对于第 $k$ 次历史行为,模型设置两个掩码。第一个判断它是否位于最大延迟时间 $T_{\max}$ 内:

\[m_k^{time}=\mathbf{1}(\mathrm{BDT}_k\le T_{\max})\]

第二个判断它与当前查询和环境的相似权重是否超过阈值 $c$:

\[m_k^{sim}=\mathbf{1}(w_k^{q,c}>c)\]

只有同时满足“时间足够近”和“场景足够像”的行为才会被保留:

\[e_k'=m_k^{time}m_k^{sim}e_k^{id}\]

这个乘法很关键。只满足时间条件,可能保留近期但与当前行程无关的点击;只满足相似度条件,又可能引入很久以前的过时偏好。两个掩码同时为 1,行为才进入延迟兴趣建模。

保留下来的行为还需要区分重要程度。设当前目标航班表示为 $e_t$,时间注意力为:

\[a_k=z^\top\tanh(W_t e_t+W_h e_k'), \qquad \alpha_k=\frac{\exp(a_k)}{\sum_j\exp(a_j)}\]

最终延迟兴趣表示为:

\[O_{delay}=\sum_k\alpha_k e_k'\]

$\alpha_k$ 总和为 1,表示每段有效行为对最终购买的相对贡献。与目标航班更相关、更能解释购买决策的行为,会获得更高权重。

延迟模型和常规模型分别输出 $p_{delay}$ 与 $p_{basic}$。论文使用类似专家混合的门控结构,并把延迟购买时间作为重要输入,动态决定两条路径的权重。训练目标由三部分组成:

\[\mathcal{L} =\lambda_1\mathcal{L}_{decouple} +\lambda_2\mathcal{L}_{delay} +\lambda_3\mathcal{L}_{basic}, \qquad \lambda_1+\lambda_2+\lambda_3=1\]

第一项帮助分离场景相关与非相关兴趣,第二项学习延迟购买,第三项保证普通样本上的基础转化预测。三个目标联合训练,使模型既能理解用户的一般偏好,也能处理交通场景特有的延迟决策。

一句话类比

DCRNet 像一位会复盘用户决策过程的售票顾问:

“他以前买早班机,可能只是因为当时更便宜,不能直接认定这是长期偏好;这次他点击后又比较了几趟相似航班,最后才回来购买,这段过程才是理解当前选择的关键。”

效果

论文使用飞猪机票与火车票生产数据进行验证。相比表现最好的基线,DCRNet 的离线 AUC、NDCG@10 和 NDCG@15 平均提升约 1.81%、2.10% 和 2.66%;消融实验也验证了混合相似度注意力和延迟掩码注意力各自的作用。

线上实验覆盖约 200 万用户,持续 10 天。在机票排序场景中,相比 CPNet,DCRNet 的点击率提升约 8.03%,转化率提升约 6.24%。模型线上推理耗时约 26 毫秒,已应用于飞猪机票和火车票行程排序。

论文页面