召回足量房源:由于城市间房源数量差异巨大,从几百到几十万不等,这给召回策略带来了挑战。比如我们采用 Faiss 的参数设置(nlist=100,nprobe=20),即将房源聚成一百类,在检索时从二十个最相似的类中挑选 top n 最相似的房源。这种策略理论上只能召回五分之一的房源。对于房源数量较少的城市,这可能导致召回结果不足。
针对推荐中分城市分业务类型的召回需求,我们采用了多分区 Faiss 服务作为解决方案。该服务由我们的深度学习平台 WPAI 提供,通过构建分区,一个 Faiss 服务具备集成多个 Faiss 索引的能力。在构建多分区 Faiss 服务时,我们将城市 ID 与房源的业务类型进行组合,生成唯一的分区 ID。每个房源在构建 Faiss 索引时都会被映射到对应的分区 ID 下。在用户进行检索时,根据用户的点击、连接、关注等行为序列推测其偏好的业务类型,并结合线上实际请求的业务类型,确定应该请求哪个分区下的房源数据。
精排的演进包括以下几个阶段:线性模型、树模型、深度神经网络、多任务,以及多场景多任务。精排数据集的正样本是用户的真实点击行为,负样本则是基于用户点击位置以上的真实曝光但未点击的房源。同时我们过滤掉了误点击、经纪人以及异常用户(如爬虫)产生的数据。特征主要包括房源特征(如区域、商圈、价格、面积等)、上下文特征(如用户行为序列、搜索筛选行为等)、用户画像以及统计特征等。针对业务方对商业房源的特殊曝光需求,我们在页面上实施了流量倾斜策略。这也导致了前排房源的偏差问题。为了纠正这种偏差,我们最初尝试了 PAL 和 Google 提出的偏置网络等偏差建模方法,但线上效果并不理想。最终,采用了手动去偏策略,仅将第 K 个位置之后的曝光点击房源作为训练样本。
在我们业务场景中,用户与房源的交互方式多种多样,包括点击、电话、微聊、收藏和分享等。这些行为反映了用户对房源的不同偏好程度,因此我们对它们分别建模,在 ESMM 上取得了一定的效果。然而,只关注用户的短期行为序列可能导致推荐的房源过于相似,缺乏多样性,从而影响用户体验。同时用户找房行为往往具有周期性,所以我们需要考虑用户的长期兴趣。我们将距今 k 天前的最近 n 次行为作为用户的长期兴趣序列。这个序列能够反映用户在前一段时间的偏好和兴趣。在优化多任务模型的 Loss 权重时,采用了 GradNorm 方法。