返回介绍

数学基础

统计学习

深度学习

工具

Scala

六、Airbnb Search Ranking [2018]

发布于 2023-07-17 23:38:24 字数 47248 浏览 0 评论 0 收藏 0

  1. 在过去的十年中,典型的基于传统信息检索的搜索体系架构中,已经看到机器学习在其各种组件中的出现越来越多。尤其是在搜索排序Search Ranking中,根据搜索的内容类型,搜索排序通常具有挑战性的目标。这种趋势背后的主要原因是可以收集和分析的搜索数据量的增加。大量收集的数据为使用机器学习根据历史搜索,从而为用户个性化搜索结果、并向用户推荐最近消费内容相似的内容提供了可能性。

    任何搜索算法的目标都可能因为当前平台的不同而有所不同,不存在一刀切one-size-fits-all的解决方案。尽管某些平台旨在提高网站的互动engagement(如在搜索到的新闻文字上的点击click、消费时间time spent ),而另一些平台则旨在最大化转化conversion (如,购买搜索到的商品或者服务)。而在双边市场two-sided marketplace 的情况下,我们通常需要优化市场双方(即卖方seller 和买方 buyer )的搜索结果。

    双边市场已经成为很多现实世界应用application 中可行的商业模式。特别是,我们已经从社交网络范式social network paradigm 转变为一个由两种不同类型的参与者participant (分别代表供给和需求 supply and demand )组成的网络。对于 Airbnb 而言,它是一个双边市场two-sided marketplace,其中需要同时优化房东host 和租客 guest 的偏好preference 。实际上,用户很少两次消费相同的 item ,而一个 listing 在某个日期只能接受一个租客(电商领域一个listing 表示一个商品详情页)。这意味着给定一个带有位置location 和行程日期trip date 的输入query

    • 对于位置location、价格price、风格style、评论review 等等对租客有吸引力的 listing ,我们需要给该 listing 一个比较高的排名 ranking
    • 与此同时,对于租客的行程持续时间trip duration 和提前天数lead days 方面很好地匹配了房东偏好的 listing ,我们需要给该listing 一个比较高的排名。
    • 此外,我们需要检测可能因为差评bad review、宠物pet、逗留时间、团体人数、或任何其它因素而可能拒绝租客的 listing ,并将这些 listing 的排名降低。

    为了实现这一目标,论文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》 求助于使用 Learning to Rank 。 具体而言,我们将问题形式化为 pairwise regression ,其中正效用positive utility 用于预定booking、负效用negative utility 用于拒绝rejection 。我们使用 Lambda Rank 模型的修改版本对问题进行优化,该模型共同优化了市场双方的排名。

    由于租客通常会在预定之前进行多次搜索,即在他们的搜索session 中点击多个listing 并联系多个房东。因此我们可以使用这些 session 中的信号(即点击click、房东联系host contact 等等)从而进行实时个性化Real-time Personalization,目的是向租客展示更多的listing 。这些推荐的 listing 相似于 similar to 我们认为从搜索session 开始以来租客喜欢的那些listing 。与此同时,我们可以利用负向信号negative signal(如用户跳过排名比较toplisting 、反而选择了排名较bottomlisting )从而向租客少展示一些相似于 similar to 我们认为租客不喜欢的 listing

    为了能够计算租客互动的listing 和待排序的候选listing 之间的相似性,我们提出使用 list embedding ,一个从搜索session 中学到的低维向量representation 。我们利用这些相似性为我们的搜索排序模型Search Ranking Model 创建个性化特征,并为我们的相似listing 推荐Similar Listing Recommendation 提供支持。搜索排序Search RankingSimilar Listing Recommendation 这两个渠道在 Airbnb 带来了 99% 的转化conversion

    使用了即时immediate 的用户行为(如点击)的实时个性化Real-time Personalization 可以作为短期用户兴趣short-term user interest 的代理信号proxy signal 。除此之外我们还引入了另一种类型的 embedding 。这种embedding 通过预定booking 数据来训练,从而能够捕获用户的长期兴趣long-term interest

    由于旅游业务travel business 的特性nature,用户平均每年旅行 1~2次,因此预定是一个稀疏的信号,并且也是长尾long tail 的信号(大多数用户只有单次预定)。为了解决这个问题,我们提出在用户类型级别level of user type 、而不是在特定的 user id 上训练 embedding 。其中用户类型 user type 是使用 many-to-one 的、基于规则的映射来确定的类型。这些规则利用了已知的用户属性attribute 。同时,我们在于user type embedding 相同的向量空间中学习 listing type embedding 。这使得我们能够计算正在进行搜索的用户的 user type embedding ,和需要排序的候选listinglist type embedding 之间的相似性。

    和之前发表的、互联网个性化embedding 的工作相比,本文的创新之处在于:

    • 实时个性化Real-time Personalization:之前关于使用 embedding 的个性化推荐和item 推荐的大多数工作都是通过离线创建user-itemitem-item 推荐表recommendation table ,然后在推荐时从它们中读取而部署到生产环境中的。

      我们实现了一种解决方案,其中用户最近交互 itemembedding 以在线方式进行组合,以计算与待排序的 item 的相似性。

    • 针对聚集搜索的适配训练Adapting Training for Congregated Search :和互联网搜索web search 不同,旅游平台travel platform 上的搜索通常是聚集的congregated。用户通常仅在特定市场market (例如巴黎)内进行搜索,而很少在不同的市场之间搜索。

      我们调整了embedding 训练算法,以便在进行负采样时考虑到这一点,从而可以更好地捕获市场内 within-marketlisting 的相似性。

    • 利用转化作为全局上下文Leveraging Conversions as Global Context:在我们的预定案例中,我们认识到以预定结束的click session (即 booked listing)的重要性。

      在学习 listing embedding 时,我们将 booked listing 视为全局上下文global context。当滑动窗口在 session 中移动时,始终会对 booked listing 进行预测。

    • 用户类型 embedding User Type Embeddings:先前关于训练用户 embedding 以捕获其长期兴趣的工作为每个用户训练了一个单独的 embedding 。当目标信号target signal 稀疏时,没有足够的数据来训练每个用户的良好 embedding representation 。更不用说为每个用户存储embedding 以执行在线计算将需要大量内存。

      因此,我们提出在每个用户类型级别上训练 embedding,其中具有相同类型的用户组user group 将具有相同的 embedding

    • 拒绝作为显式的负样本Rejections as Explicit Negatives:为了减少会导致拒绝rejection 的推荐,我们在训练过程中将房东拒绝host rejection 视为显式的负样本,从而在user type embeddinglisting type embedding 中编码房东偏好。

    对于短期兴趣个性化short-term interest personalization,我们使用超过8 亿次搜索click session 来训练 listing embedding ,从而获得了高质量的 listing embedding representation 。我们对真实的搜索流量进行了广泛的离线和在线评估。结果表明:在排序模型中添加 emebdding 特征可以显著提高预定 booking 增益。除了搜索排序算法之外,listing embedding 还成功地测试并发布于相似listing 推荐 similar listing recommendation,其效果比现有算法的点击率click-through rate: CTR 高出 20%

    对于长期兴趣个性化long-term interest personalization,我们使用 5000 万用户的booked listing 序列来训练 user type embeddinglisting type embeddinguser type embeddinglisting type embedding 都是在相同的向量空间中学习的,这样我们就可以计算出 user type 和待排序 listinglisting type 之间的相似性。这个似性被用作搜索排序模型的附加特征,并且也成功进行了测试和发布。

  2. 相关工作:

    • 在很多自然语言处理Natural Language Processing:NLP 应用application 中,经典的、将单词表示为高维稀疏向量的语言建模方法已经被神经语言模型Neural Language model 所取代。神经语言模型通过使用神经网络来学习单词embedding,即单词的低维 representation 。这些神经网络是通过直接考虑单词顺序、以及单词之间的共现co-occurrence 来训练的,基于这样的假设:句子中经常一起出现的单词也共享更多的统计依赖性statistical dependence

      随着用于单词representation learning 的高度可扩展的 continuous bag-of-words:CBOW 语言模型和skip-gram:SG 语言模型的发展,embedding 模型已经被证明在大规模文本数据上训练之后,在许多传统语言任务language task 上获得了 state-of-the-art 的性能。

    • 最近,embedding 的概念已经从word representation 扩展到了 NLP 领域之外的其它应用程序application 。来自互联网搜索Web Search 、电商E-commerce、市场Marketplace 等领域的研究人员很快意识到:就像可以通过将句子中的单词序列视为上下文来训练word embedding 一样,也可以通过将用户行为序列视为上下文来训练用户行为的 embedding 。这些用户行为包括用户点击或购买的 itemquery 以及被点击的广告。从那以后,我们看到 embedding 被用于互联网上的各种类型的推荐,包括音乐推荐music recommendation 、求职搜索job search 、应用推荐app recommendation、电影推荐movie recommendation 等等。

      此外,已经表明:可以利用用户交互的item 来直接学习用户 embedding,其中用户 embeddingitem embedding 位于相同的向量空间。通过这种方式可以做出直接的 user-item 推荐。

      对于冷启动推荐cold-start recommendation 特别有用的另一种方法是:仍然使用文本 embedding ,并利用item 和/或user 元数据(如标题、详情description)来计算它们的 embedding

      最后,已经为社交网络分析Social Network analysis 提出了 embedding 方法的类似扩展,其中图上的随机游走random walk 可用于学习图结构中定点的 embedding

    embedding 方法在学术界和工业界都产生了重大影响。最近的行业会议出版物和讨论表明,embedding 方法已经成功地部署在各大互联网公司的各种个性化、推荐和排序引擎中。

6.1 模型

  1. 下面我们介绍用于 Airbnb 上搜索的、针对 listing recommendation 任务和listing ranking 任务提出的方法。

    我们描述了两种不同的方法,即:用于短期实时个性化short-term real-time personalizationlisting embedding ,用于长期个性化long-term personalizationuser-type embedding & listing type embedding

6.1.1 Listing Embedding

  1. 假设给定一组从 $ N $ 个用户获得的 $ S $ 个click session 的集合 $ \mathbb S $ ,其中每个 session $ \mathbf s=(l_1,\cdots,l_M)\in \mathbb S $ 定义为用户点击的 $ M $ 个listing id 的不间断序列uninterrupted sequence 。每当两次连续用户点击之间的时间间隔超过30 分钟时,我们认为就开始新的 session

    给定这个数据集,我们的目标是学习每个 unique listing $ l_i $ 的 $ d $ 维实值real-valuedrepresentation $ \mathbf{\vec v}_{l_i}\in \mathbb R^{d} $ ,使得相似的listingembedding 空间中距离较近。

    更正式地说,该模型的目标是通过在整个 click session 集合 $ \mathbb S $ 上,通过最大化目标函数 $ \mathcal L $ 来使用 skip-gram 模型从而学习 listing representation 。即:

    $ \mathcal L = \sum_{\mathbf s\in \mathbb S}\sum_{l_i\in \mathbf s}\left(\sum_{-m\le j\le m,j\ne 0}\log P(l_{i+j}\mid l_i)\right) $

    其中概率 $ P(l_{i+j}\mid l_i) $ 表示从点击的 listing $ l_i $ 的上下文邻域中观察到listing $ l_{i+j} $ 的概率,其定义为:

    $ P(l_{i+j}\mid l_i)=\frac{\exp\left(\mathbf{\vec v}_{l_i}^\top \mathbf{\vec v}_{l_{i+j}}^\prime\right)}{\sum_{l=1}^{|\mathbb V|}\exp\left(\mathbf{\vec v}_{l_i}^\top \mathbf{\vec v}_{l}^\prime\right)} $

    其中:

    • $ \mathbf{\vec v}_l $ 和 $ \mathbf{\vec v}_l^\prime $ 分别表示listing $ l $ 的 input vector representationoutput vector representation
    • 超参数 $ m $ 定义为点击listing 的上下文窗口的长度。
    • $ \mathbb V $ 是数据集中unique listing id 组成的词汇表vocabulary

    从上式可以看到:我们提出的方法对点击listing 序列的时间上下文temporal context 进行建模,其中具有相似上下文的 listing (如,在click session 中具有相似的邻域listing )将具有相似的 representation

    这里的 listing embedding 没有考虑到 listing 的属性信息,仅考虑了 listing id

  2. 计算上述目标函数的梯度 $ \nabla \mathcal L $ 所需的时间和词表大小 $ |\mathbb V| $ 成正比,这对于具有数百万个listing id 的大规模词表是不可行的。作为替代方案,我们使用了负采样方法,该方法大大降低了计算复杂度。 负采样方法具体做法为:

    • 首先生成由点击 listing $ l $ 和它的上下文 $ c $ (即,在长度为 $ m $ 的窗口内,同一个用户在点击listing $ l $ 之前、之后点击的其它listing )组成的正的pair 对 $ (l,c) $ 所构成的集合 $ \mathbb D_p $ 。

    • 然后生成由点击 listing $ l $ 和整个词表 $ \mathbb V $ 中随机抽取的 $ k $ 个listing 组成的负的pair 对 $ (l,c) $ 所构成的集合 $ \mathbb D_n $ 。其中这里的 $ c $ 为负采样的 listing,而不是上下文listing

    • 最后,优化的目标函数为:

      $ \arg\max_{\theta}\sum_{(l,c)\in \mathbb D_p} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_l^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(l,c)\in \mathbb D_n} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_l^\top \mathbf{\vec v}_{c}^\prime\right)} $

      其中 $ \theta $ 为模型参数。

      然后我们通过随机梯度下降来最优化该目标函数。

  3. 预定的 listing 作为全局上下文Booked Listing as Global Context:我们可以将click session 集合 $ \mathbb S $ 细分为:

    • booked session:即以用户预定了一个 listing 作为结束的 click session

      注意,这涉及到预定之后的点击如何处理。如果预定之后立即跟随一个点击(30 分钟内),那么这个点击应该直接丢弃掉。

    • exploratory session:即不是以用户预定作为结束的 click session ,用户仅仅只是在浏览。

    从捕获上下文相似性的角度来看,这两者都是有用的。但是 booked session 可以用于适配性adapt 优化,使得在每个step 中,我们不仅可以预测相邻的点击listing,还可以预测最终的预定 listing 。这种适配可以通过将预定的listing 添加为全局上下文来实现,这样无论它是否位于上下文窗口内,都将始终对其进行预测。因此,对于booked sessionembedding 更新规则调整为:

    $ \arg\max_\theta \sum_{(l,c)\in \mathbb D_p} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_l^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(l,c)\in \mathbb D_n} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_l^\top \mathbf{\vec v}_{c}^\prime\right)}\\ + \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_l^\top \mathbf{\vec v}_{l_b}^\prime\right)} $

    其中:

    • $ l_b $ 为预定listing, $ \mathbf{\vec v}_{l_b }^\prime $ 为预定listingoutput vector representation
    • 对于exploratory session,因为没有预定listing,因为它的目标函数没有最后一项。

    下图显示了如何使用 $ m $ 的滑动窗口从 booked session 中使用 skip-gram 模型来学习 list embedding

    • 该窗口从第一次点击的 listing 滑动到预定的listingbooked session 以预定作为结束)。
    • 在每个step,正中centrallistingembedding $ \mathbf{\vec v}_l $ 被更新,使得它预测来自 $ \mathbb D_p $ 的上下文listingembedding $ \mathbf{\vec v}_c^\prime $ 、以及全局上下文预定listingembedding $ \mathbf{\vec v}_{l_b}^\prime $ 。
    • 随着窗口的滑动,一些listing 进入或移出上下文集合,而预定的listing 始终作为全局上下文被保留(虚线)。

  4. 针对聚集搜索适配的训练Adapting Training for Congregated Search:在线旅游预定网站online travel booking site 的用户通常只在一个市场market 内搜索,即他们想去的地方。结果, $ \mathbb D_p $ 很可能仅包含来自同一个市场的listing 。另一方面,由于随机的负样本采样,因此 $ \mathbb D_n $ 很可能包含大多数不是位于相同市场的listing, 这与 $ \mathbb D_p $ 不同。

    在每个step,对于给定的 central listing $ l $ ,正的上下文positive context 主要由与 $ l $ 相同市场中的 listing 组成,而负的上下文negative contex 主要由与 $ l $ 不同市场中的 listing 组成。我们发现这种不平衡会导致学到次优sub-optimal 的市场内within-market 相似性。为了解决这个问题,我们提出添加一组从 central listing 相同市场内随机采样的负样本 $ \mathbb D_{m_n} $ 。

    此时目标函数为:

    $ \arg\max_\theta \sum_{(l,c)\in \mathbb D_p} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_l^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(l,c)\in \mathbb D_n} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_l^\top \mathbf{\vec v}_{c}^\prime\right)}\\ + \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_l^\top \mathbf{\vec v}_{l_b}^\prime\right)} + \sum_{(l,c)\in \mathbb D_{m_n}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_l^\top \mathbf{\vec v}_{c}^\prime\right)} $

    这里是不是应该去掉 $ \mathbb D_n $ 比较好?感觉 $ \mathbb D_n $ 是 easy 负样本,因为是跨市场的,所以用户大概率对这些负样本不感兴趣。

    另外,这意味着非均匀的负采样:hard 负样本 vs easy 负样本。

  5. listing embedding 的冷启动Cold start listing embeddings :房东每天都会创建新的 listing,并在 Airbnb 上发布。此时,这些 listing 没有 embedding,因为它们没有出现在 click session $ \mathbb S $ 训练数据中。为了为新listing 创建 embedding,我们提出利用现有的 listing embedding

    创建 listing 后,房东需要提供有关 listing 的信息,例如位置location、价格pricelisting type 等等。我们使用新listing 的元数据meta-data 来查找3 个具有 embedding 的已有的listing,其中已有的 listing 需要满足以下条件:

    • 和新listing 距离很近(距离半径在 10 英里以内)。
    • 和新listing 具有相同的 listing type (如,Private Room )。
    • 和新listing 具有相同的价格区间(如 $20 ~ $25 一晚)。

    接下来我们使用这 3 个识别到的 embedding 的向量均值,从而作为新listingembedding 。使用这种技术,我们可以覆盖超过 98% 的新 listing

    基于 listing embedding 我们可以找到相似的 listing pair。反之,基于相似的 listing embedding 我们也可以得到 listing embedding

  6. listing embedding 检查 Examining Listing Embedding:为了评估通过 embedding 捕获了 listing 的哪些特征,我们检查了在 8 亿次click session 中训练的 $ d=32 $ 维 embedding

    • 首先,通过对学习的 embedding 执行 k-means 聚类,我们评估是否对地理位置相似性geographical similarity 进行了编码。

      下图展示了加利福利亚州的 100 个簇的结果,证明了来自相似位置similar locationlisting 是聚集在一起clustered together 的。我们发现这些簇对于重新评估re-evaluating 我们的旅游市场的定义非常有用。

    • 接下来,我们评估洛杉矶不同类型的listing 之间的平均余弦相似度(表1所示),以及不同不同价格范围的listing 之间的平均余弦相似度(表2所示)。

      从这些表中可以看出:与不同类型、不同价格范围的listing 之间的相似度相比,相同类型、相同价格范围的listing 之间的余弦相似度要高得多。

      因此,我们可以得出结论:这两个listing 特性characteristics 在学到的 embedding 中也得到了很好地编码。

    • 虽然有些listing 特性(例如价格)不需要学习,因为它们可以从listing meta-data 中直接获取,但是其它类型的listing characteristics(如结构architecture、风格style、体验feel )则很难抽取为 listing 特征。

      为了评估这些特性是否被embedding 捕获,我们可以检查listing embedding 空间中不同 architecture listingk 近邻 k-nearest neighbor

      下图给出了这样的一个例子,其中对于左侧的 listing,右侧给出了具有相同风格和结构的、最相似的 listing

      为了能够在 listing embedding 空间中进行快速、简单的搜索,我们开发了一个内部的相似度探索工具Similarity Exploration Tool ,如下图所示。

6.1.2 User-type Embedding & Listing-type Embedding

  1. 前面介绍的 listing embedding 使用click session 来训练,并非常善于寻找同一市场的 listing 之间的相似性。因此,它们适用于短期的 short-termsession 内的in-session 个性化,目的是在即时搜索会话immanent search session 期间向用户展示与他们点击的 listing 相似的 listing

    然而,除了in-session 个性化(它基于同一session 内刚刚发生的信号)之外,根据用户的长期历史记录中的信号进行个性化搜索也会很有用。例如,假设某个用户当前正在搜索洛杉矶的 listing,并且历史上曾经发过纽约和伦敦的预定 ,那么推荐与先前预定listing 相似的 listing 将很有用。

    点击个性化是短期的、基于点击的、单个市场的个性化,预定个性化是长期的、基于预定的、跨市场的个性化。

  2. 虽然一些跨市场cross-market 相似性在使用点击训练的 listing embedding 中被捕获,但是学习这种cross-market 相似性的更主要方式是给定用户的、随时间的预定listing 所构建的 session 中学习。

    具体而言,假设给定从 $ N $ 个用户获得的booking session 集合 $ \mathbb S_b $ ,其中每个booking session $ \mathbf s_b=\left(l_{b_1},\cdots,l_{b_M}\right) $ 被定义为用户 $ j $ 按时间顺序的一个预定listing 序列。

    尝试使用这种类型的数据来学习每个listing_idembedding $ \mathbf v_{l_{id}} $ 在很多方面都具有挑战性:

    • 首先,booking session 数据 $ \mathbb S_b $ 比click session 数据 $ \mathbb S $ 小得多,因为预定不是太频繁的事件。
    • 其次,很多用户历史上仅预定了一个listing,而我们无法从长度为 1session 中学习。
    • 第三,要从上下文信息中为任何实体 entity 学习有意义的 embedding,数据中至少需要该实体出现 5~10 次。而平台上的很多 listing_id 被预定的次数少于 5~10 次。
    • 最后,用户的两个连续预定之间可能会间隔很长的时间。在此期间,用户的偏好(例如价格price)可能会发生变化,例如由于用户的职业发生变化。

    为了在实践中解决这些非常常见的市场问题marketplace problem,我们建议在 listing_type 级别、而不是 listing_id 级别学习 embedding

    给定某个 listing_id 可用的元数据meta_data(例如位置location、价格pricelisting 类型listing type、容量capacity 、床位数number of beds 等 ),我们使用下表中定义的、基于规则的映射来确定其 listing_type (注: listing type 表示整租合租等固有属性,listing_type 是人工映射得到的)。

    例如,来自US 的一个整租 Entire Homelisting,它具有: 2 个人的 capacity1 张床、1 间卧室和1 间浴室、每晚平均价格为 60.8$ 、每位租客每晚平均价格为 29.3$5 条评论、五星占比100%100% 的新客接受率New Guest Accept Rate

    因此这个listing 将被映射到 :

    $ \text{listing_type} = US\_lt_1\_pn_3\_pg_3\_r_3\_5s_4\_c_2\_b_1\_bd_2\_bt_2\_nu_3 $

    buckets 以数据驱动的方式来确定,从而最大化每个listing_type bucket 的覆盖范围。

    listing_idlisting_type 的映射是多对一 manty-to-one 的映射,这意味着许多listing 将映射到相同的 listing_type

    这里通过人工规则对 listing 进行了聚类:具有相同属性的 listing 被划分到同一个簇cluster,然后模型下一步学习 cluster idembedding 。这里的规则由业务专家来指定,事关任务成败。

  3. 为了解决用户随时间变化的偏好,我们提出在与 listing_type embedding 相同的向量空间中学习 user_type embedding

    user_type 的确定方法与 listing_type 类似,即通过利用下表中定义的、有关用户及其历史预定的元数据metadata 来确定。

    例如,对于来自旧金山的、使用MacBook 笔记本电脑的用户,他使用英文配置setting、带有用户照片的完整资料、来自房东的平均83.4% 的租客五星好评级Guest 5 star rating 。用户历史进行了3 次预定,这些预定的平均统计数据为: 52.52$ 每晚、31.85$ 每个租客每晚、2.33 容量capacity8.24 个评论、76.1%listing 五星好评 Listing 5 star rating 。最终这个用户的user_type 为:

    $ \text{user_type} =SF\_lg_1\_dt_1\_fp_1\_pp_1\_nb_1\_ppn_2\_ppg_3\_c_2\_nr_3\_l5s_3\_g5s_3 $

    在生成用于训练embeddingbooking session 时,我们会计算user_type 直到最近一次预定。 对于正在进行首次预定的用户,user_type 是基于上表的前 5 行计算的,因为在预定时我们没有关于历史预定的先验信息。这很方便,因为基于前5 行的user_type 学到的 embedding 可以用于注销logged-out用户、以及没有历史预定的新用户的冷启动个性化cold-start personalization

    同样地,这里也是通过人工规则对用户进行了聚类,这里的规则由业务专家来指定,事关任务成败。

  4. 训练过程 Training Procedure:为了在同一个向量空间中学习 user_typelisting_typeembedding ,我们将 user_type 融合到 booking session 中。

    具体而言,我们使用来自 $ N $ 个用户的 $ N_b $ 个 booking session 构成集合 $ \mathbb S_b $ ,其中每个 session $ \mathbf s_{b} = \left(u_{\text{type}_1}l_{\text{type}_1},\cdots, u_{\text{type}_M}l_{\text{type}_M}\right)\in \mathbb S_b $ 定义为booking event (即 (user_type, listing_type) 元组)按时间顺序的序列 。

    注意,每个session 都是由同一个 user_id 进行预定,但是对于同一个 user_id,其 user_type 可能会随时间的推移而变化。这类似于同一个listinglisting_type 也会随着时间的推移而变化,因为它们会收到更多的预定。

    目标函数类似于listing embedding 的目标函数,其中需要更新的 center item 不是listing $ l $ ,而是 user_type $ u_t $ 或 listing_type $ l_t $ ,具体取决于滑动窗口中捕获的是哪一个。

    • 如果需要更新 user_typecenter_item $ u_t $ ,则我们优化以下目标函数:

      $ \arg\max_{\theta} \sum_{(u_t,c)\in \mathbb D_{\text{book}}} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_{u_t}^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(u_t,c)\in \mathbb D_{\text{neg}}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_{u_t}^\top \mathbf{\vec v}_c^\prime\right)} $

      其中:

      • $ \mathbb D_{\text{book}} $ 包含来自用户历史记录中、距离center item 窗口内的 user_typelisting_type,具体而言是关于center item 时间戳的最近过去near past、最近将来near future 的用户预定 。
      • $ \mathbb D_{\text{neg}} $ 包含作为负样本的随机采样的 user_type 或者 listing_type
    • 类似的,如果 central itemlisting_type $ l_t $ ,则我们优化以下目标函数:

      $ \arg\max_{\theta} \sum_{(l_t,c)\in \mathbb D_{\text{book}}} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_{l_t}^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(l_t,c)\in \mathbb D_{\text{neg}}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_{l_t}^\top \mathbf{\vec v}_c^\prime\right)} $

    更新 user_type 和更新 listing_type 有两点不同:

    a. input/output representation 不同:更新 user_type 时,user_type embedding 采用 input representation 的格式,而 listing_type embedding 采用 output representation 的格式。更新 listing_type 时,刚好相反。

    b. 负样本不同:更新 user_type 需要采样负的 listing,更新 listing_type 需要采样负的 user

    由于根据定义的 booking session 主要包含来自不同市场marketlisting,因此没有必要从相同市场的预定listing 中额外负采样(就像Adapting Training for Congregated Search 那样) 。

    下图给出了这个模型的图形化表示,其中central item 表示 user_type $ u_t $ ,并对其进行更新。

  5. 针对拒绝Rejection 的显式负样本Explicit Negatives for Rejections:与只反映房客偏好的点击不同,预定也反映了房东的偏好,因为房东会以接受房客预定、或者拒绝房客预定的形式给出明确的反馈。房东拒绝的原因包括:房客的guest star rating 较差、房客资料不完整或者为空、房客资料中没有照片等。这些特性是 user_type 定义的一部分。

    除了房客偏好信号之外,可以在训练期间利用房东拒绝host rejection 来将房东的偏好信号编码到 embedding 空间中。纳入拒绝信号的整体目的是:一些 listing_type 对没有预定 、个人资料不完整、guest star rating 低于平均水平的user_type 不太敏感,我们希望这些 listing_typeembeddinguser_typeembedding 在向量空间中更为紧密。这样,基于 embedding 相似性的推荐除了最大化预定机会之外,还可以减少将来的拒绝future rejection

    我们通过下面的方式将拒绝的使用形式化为显式的负样本。除了集合 $ \mathbb D_{\text{book}} $ 和 $ \mathbb D_{\text{neg}} $ 之外,我们还生成了一个涉及拒绝事件rejection eventuser_type 或者 listing_typepair 对 $ (u_t,l_t) $ 组成的集合 $ \mathbb D_{\text{rej}} $ 。

    如下图所示,我们特别关注这样的情况:同一个用户在房东拒绝(以减号标记)之后,成功booking 了另外一个 listing (以加号标记)。

    注意:我们仅仅把这类有 -+ 的房东拒绝作为显式负样本。

    新的优化目标可以表述为:

    • central itemuser_type $ u_t $ 的情况下,优化目标为:

      $ \arg\max_{\theta} \sum_{(u_t,c)\in \mathbb D_{\text{book}}} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_{u_t}^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(u_t,c)\in \mathbb D_{\text{neg}}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_{u_t}^\top \mathbf{\vec v}_c^\prime\right)}\\ + \sum_{(u_t,l_t)\in \mathbb D_{\text{rej}}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_{u_t}^\top \mathbf{\vec v}_{l_t}^\prime\right)} $
    • central itemlisting_type $ l_t $ 的情况下,优化目标为:

      $ \arg\max_{\theta} \sum_{(l_t,c)\in \mathbb D_{\text{book}}} \log \frac{1}{1+\exp\left(-\mathbf{\vec v}_{l_t}^\top \mathbf{\vec v}_c^\prime\right)}+\sum_{(l_t,c)\in \mathbb D_{\text{neg}}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_{l_t}^\top \mathbf{\vec v}_c^\prime\right)}\\ +\sum_{(l_t,u_t)\in \mathbb D_{\text{rej}}} \log \frac{1}{1+\exp\left(\mathbf{\vec v}_{l_t}^\top \mathbf{\vec v}_{u_t}^\prime\right)} $

  6. 给定所有 user_typelisting_type 学到的 embedding,我们可以根据用户当前的 user_type embedding 和候选listinglisting_type embedding 之间的余弦相似度,向用户推荐最相关的 listing

    例如,在下表中,我们展示了 user_type 为 $ SF\_lg_1\_dt_1\_f p_1\_pp_1\_nb_3\_ppn_5\_ppg_5\_c_4\_nr_3\_l5s_3\_g5s_3 $ 和美国的几种不同listing_type 之间的余弦相似性,其中这种类型的用户通常会预定高质量、宽敞、并且有很多好评的 listing 。可以看到:

    • 最匹配这些用户偏好的 listing type (即整租entire home 、很多好评、价格高于平均水平)具有较高的余弦相似性。
    • 而不匹配这些用户偏好的 listing type(即空间较小less space、较低价格、较少评论)具有较低的余弦相似性。

6.2 实验

  1. 这里我们首先介绍训练 Listing Embedding 以及其离线评估Offline Evaluation 的细节。

    然后,我们在Listing Page 上显示了将 Listing Embedding 用于相似Listing 推荐Similar Listing Recommendation 的在线实验结果Online Experiment Result

    最后,我们给出我们搜索排序模型Search Ranking Model 的背景知识,并描述如何使用 Listing EmbeddingListing Type & User Type Embedding 来实现搜索中的实时个性化Real-time Personalization 特征。

    embedding 的两个应用(相似Listing 推荐、搜索排序)都已经成功地投入生产。

6.2.1 Training Listing Embedding

  1. 对于listing embedding 的训练:

    • 我们从登录用户中获取所有的搜索,然后以 user id 为单位,将该用户点击的所有listing id 按时间顺序排序 。最终我们获得了 8 亿次click session
    • 随后,根据30 分钟的不活跃规则(即,如果用户两个相邻点击间隔超过30 分钟,则我们认为这是两个session ),我们将一个较大的 listing id 的序列拆分为多个序列。
    • 接下来,我们删除了偶发的和短暂的点击,即用户在 listing 页停留不到 30 秒的点击,并且仅保留由 2 次或者更多次点击组成的 session
    • 最后,通过删除用户id 列来匿名化session

    如前所述,click session 由探索session (exploratory session ) 和 booked session 组成。根据离线评估结果,我们在训练数据中对 booked session 进行了5 倍的过采样,从而得到了表现最佳的 listing embedding

    过采样等价于 booked session 的样本进行加权。

  2. 日常Daily 训练的配置:

    • 我们学习了 450 万个 Airbnblistinglisting embedding ,并使用下面介绍的离线评估技术调整了我们的训练数据实用性practicality 和参数。

    • 我们的训练数据在几个月内以滑动窗口的方式天级更新,方法是处理最近一天的search session,并将它们添加到数据集中,并从数据集中丢弃最早一天的search session

    • 我们为每个 listing_id 训练 embedding ,在训练之前随机初始化向量(每次使用相同的随机数种子)。

      我们发现,如果我们每天从头开始重新训练 listing embedding,而不是在现有向量上增量地连续训练,我们会获得更好的离线性能。

    • 天级别的day-to-day 向量差异不会在我们的模型中造成不一致discrepancy,因为在我们的应用中,我们使用余弦相似性作为主要信号,而不是实际的向量本身。即使向量随着时间变化,余弦相似性度量的含义及其范围也不会改变。

    • listing embedding 的维度设置为 $ d=32 $ ,因为我们发现:要在离线性能、以及为实时相似性计算目的而将向量存储在RAM 中所需内存之间进行 tradeoff

      上下文窗口大小设置为 $ m=5 $ 。我们对训练数据执行了 10 轮迭代。

    • 为了实现算法的聚集搜索的修改change,我们修改了原始的 word2vec 代码。

    • 训练使用了 MapReduce,其中 300mapper 读取数据,而单个 reducer 以多线程方式训练模型。

    • 端到端的天级数据生成和训练 pipeline 是使用 Airflow (Airbnb 的开源调度平台) 来实现的。

6.2.2 Offline Evaluation of Listing Embeddings

  1. 为了能够对优化函数、训练数据构造、超参数等方面的不同想法做出快速决策,我们需要一种快速比较不同 embedding 的方法。

    评估训练好的 embedding 的一种方法是:根据用户最近的点击来预测embedding 在推荐用户想要预定的listing 方面有多好。更具体而言,假设我们得到了最近点击的 listing 和需要排序的候选 listing ,候选中包含用户最终的预定 listing 。通过计算点击listing 和候选listingembedding 之间的余弦相似度,我们可以对候选listing 进行排序,并观察预定listing 的排序位置rank position 。出于评估的目的,我们的 baselineSearch Ranking model (它是采用 embedding 方案之前的线上模型,从而作为对比)给出的排名,如下图的 Search Ranking 曲线所示。

    注:这里评估的是预订 listing 在所有候选 listing 中的排序位置。如何生成候选 listing,论文并未给出。常见的做法是在全局 listing 中随机负采样,也可以在同一市场内的 listing 中随机负采样。

    下图我们展示了离线评估的结果。我们比较了 $ d=32 $ 的 embedding 的几个版本,看它们如何根据之前的点击来对预定 listing 进行排序。预定listing 的排名是针对导致预定的每次点击进行平均的,从预定前的17 次点击到预定前的最后一次点击,较低的值意味着较高的排名、较小的点击意味着较长的点击序列(last 表示预定前的所有点击,16 表示仅使用最久远的那个点击)。

    我们比较的 embedding 版本为:

    • d32:使用原始负采样训练的 embedding
  • d32 book:在负采样中使用预定作为全局上下文来训练的 embedding

    • d32 book+neg:在负采样中使用预定作为全局上下文、并在相同市场显式负采样来训练的 embedding

    可以看到:

    • 由于使用记忆特征memorization feature,随着点击次数的增加 Search Ranking模型效果更好。
    • 基于 embedding 相似性对 listing 进行重排re-ranking 是很有用的,尤其是在搜索漏斗search funnel 的早期阶段early stage
    • d32 book + neg 优于其它两个embedding 版本。

    最终这一类的实验结果图被用于做出关于超参数、数据构造等等的决策。

6.2.3 Similar Listings using Embeddings

  1. 每个 Aribnb 主页 listing page 包含Similar Listing 轮播,该轮播会推荐相似的、且相同日期可用的 listing 。在我们进行测试时,Similar Listing 轮播的现有算法是在给定listing 的相同location 调用主搜索排序模型main Search Ranking model,然后根据可用性availability、给定listing 的价格范围和listing type 来过滤。

    我们进行了 A/B test ,将现有的相似listing 算法和基于 embedding 的解决方案进行了比较。在基于 embedding 的解决方案中,相似listing 是通过在listing embedding 空间中找到 k 个最近邻k-nearest neighbor 来生成的。

    给定学到的 listing embedding ,通过计算给定listing $ l $ 与可用于同一日期(如果入住check-in日期、退房check-out日期已确定)的、同一市场内的所有listing 的向量 $ \mathbf{\vec v}_j $ 的余弦相似度,可以找到 listing $ l $ 的相似 listing 。相似度最高的 klisting 被检索为相似listing 。计算是在线执行的,并使用我们的分片架构sharded architecture 并行进行,其中部分embedding 存储在每台搜索机器search machine 上。

    A/B test 表明:基于 embedding 的解决方案导致 Similar Listing 轮播的点击率CTR 提高了 21% (如果listing page 输入了日期,则为 23%;如果未输入日期,则为20% )。并且在 Similar Listing 轮播中找到他们最终预定的 listing 的租客增加了 4.9%

    根据这些结果,我们将基于 embeddingSimilar Listing 部署到生产环境中。

6.2.4 Real time personalization in Search Ranking using Embeddings

  1. 背景:为了正式描述我们的搜索排序模型Search Ranking Model,这里介绍下背景。

    假设我们获得了有关每个搜索的训练数据 $ \mathbb D_s=(\mathbf{\vec x}_i,y_i),i=1,2,\cdots,K $ ,其中:

    • $ K $ 为搜索返回的 listing 数量。

    • $ \mathbf{\vec x}_i $ 为第 $ i $ 个结果listing 的特征向量。

      第 $ i $ 个listing 结果的特征向量 $ \mathbf{\vec x}_i $ 由listing 特征、用户特征、query 特征、以及交叉特征组成。

      • listing 特征是与listing 本身相关的特征,如每晚价格、listing type、房屋数量、拒绝率rejection rate 等。

      • query 特征是与发出的 query 相关的特征,如租客数量、停留时间length of stay 、提前多少天lead days 等。

      • 用户特征是与进行搜索的用户相关的特征,例如平均预定价格、租客评级等等。

      • 交叉特征是从以下两个或多个特征源 feature sourcelisting, user, query )中导出的特征。这类特征的例子包括:

        • query listing distancequery locationlisting location 之间的距离。
        • capacity fitquery 的租客数量和 listing capacity 之间的差异。
        • price differencelisting 价格和租客历史预定均价之间的差异。
        • rejection probability:房东拒绝这些 query 参数的概率。
        • 点击百分比click percentage :实时的 memorization 特征,它跟踪租客在特定listing 上的点击比例。注意,它不是点击率,而是点击分布。

        这里使用人工交叉特征,理论上 DNN 模型也能够自动学习这类交叉特征。但是人工交叉特征相当于提供了先验知识,有助于模型的泛化和更快的收敛。

      该模型使用大约 100 个特征。为简明起见,我们不一一列举。

    • $ y_i\in \{0,0.01,0.25,1,-0.4\} $ 为第 $ i $ 个结果listing 分配的标签label

      为了将标签分配给搜索结果中的特定listing,我们会在搜索发生后等待1 周以观察最终结果:

      • 如果listing 被预定,则 $ y_i=1 $ 。
      • 如果租客和房东联系单没有预定,则 $ y_i=0.25 $ 。
      • 如果房东拒绝了租客,则 $ y_i=-0.4 $ 。
      • 如果租客点击了 listing,则 $ y_i=0.01 $ 。
      • 如果租客仅是查看但未点击,则 $ y_i=0 $ 。

      这里的 label 配置相当 tricky,并没有理论指导,需要根据实验效果来调优。

    经过1 周的等待之后,集合 $ \mathbb D_s $ 也被缩短从而仅保留直到用户点击 $ K_c\le K $ 的最新结果的搜索结果。即 $ K_c $ 之后的搜索结果直接丢弃,(防止被窗口截断)。

    最后,为了形成数据集 $ \mathbb D = \bigcup_{s=1}^N \mathbb D_s $ ,我们仅保留包含至少一个 booking label 的 $ \mathbb D_s $ 集合。每次我们训练一个新的排序模型,我们都使用最近 30 天的数据。

    接下来,我们将问题形式化为 pairwise 回归regression 问题,以搜索标签search label 作为工具,并使用数据集 $ \mathbb D $ 来训练 GBDT 模型,而且使用经过修改以支持 Lambda Rankpackage 。我们将 $ \mathbb D $ 的 80% 用于训练、20% 用于测试,并在测试机上使用 NDCG (一个标准的排序指标)来离线评估不同的模型。

    最后,一旦模型被训练好,它就被用于搜索listing 的在线评分。用户 $ u $ 执行的搜索query $ q $ 返回的每个listing 的特征向量 $ \mathbf{\vec x}_i $ 所需的信号都是在线计算的,并且使用我们的分片架构sharded architecture 进行评分。给定所有分数,listing 以预估效用predicted utility 的降序向用户展示。

  2. Listing Embedding Features:向我们的搜索排序模型添加 embedding 特征的第一步是将 450 万个 embedding 加载到我们的搜索后端search backend,以便可以实时访问它们以进行特征计算和模型打分model scoring

    接下来,我们引入了几个用户短期short-term 历史行为记录,其中包括了最近两周的用户行为信息,并随着新的用户行为发生而实时更新。该逻辑是使用 Kafka 实现的。具体而言,对于每个 user_id,我们收集并维度(定期更新)以下 listing id 的集合:

    • $ \mathbb H_c $ clicked listing_ids :用户在过去两周内点击的 listing
    • $ \mathbb H_{l_c} $ long-clicked listing_ids:用户在过去两周内点击、且在 listing page 上停留了 60 秒以上的 listing
    • $ \mathbb H_s $ skipped listing_ids :用户在过去两周内跳过这些 listing 而点击了更低位置lower positionedlisting 。(因此这些 listing 可以视为负样本)。
    • $ \mathbb H_w $ wishlisted listing_ids:用户在过去两周内添加到愿望清单wishlist 中的 listing
    • $ \mathbb H_i $ inquired listing_ids:用户在过去两周内联系、但是没有预定的 listing
    • $ \mathbb H_b $ booked listing_ids:用户在过去两周内预定的 listing

    这些 listing_id 都是用户历史行为记录。

    我们进一步将每个短期历史行为记录 $ \mathbb H_* $ 划分为多个子集,每个子集包含来自同一个市场的 listing 。例如,如果用户点击了纽约和洛杉矶的 listing,则他们的 $ \mathbb H_c $ 集合将进一步划分为 $ \mathbb H_c(NY) $ 和 $ \mathbb H_c(LA) $ 。

    最后,我们定义embedding 特征,这些特征利用上述定义的集合和已经学到的 listing embedding 为每个候选 listing 产生得分score 。下表总结了这些特征(搜索排序中的 embedding 特征)。

    我们描述如何使用 $ \mathbb H_c $ 来计算 EmbClickSim 特征。使用相应的用户短期历史行为记录 $ \mathbb H_* $ ,我们以相同的方式计算上表顶部各行中的其它特征。

    这里计算的是:候选 listing 和用户历史行为的相似性。

    为了计算候选 listing $ l_i $ 的 EmbClickSim 特征,我们需要计算它的 listing embedding $ \mathbf{\vec v}_{l_i} $ 和 $ \mathbb H_c $ 中listingembedding 之间的余弦相似度。为此,我们首先计算 $ \mathbb H_c $ 的市场级别中心market-level centroidembedding 。为了说明这一点,我们假设 $ \mathbb H_c $ 包含 5 个来自纽约的 listing、以及3 个来自洛杉矶的 listing。这将需要通过平均每个市场的 listing idembedding 来计算两个 market-level centroid embedding ,一个用于纽约、一个用于洛杉矶。然后,EmbClickSim 被计算为 listing embedding $ \mathbf{\vec v}_{l_i} $ 和 $ \mathbb H_c $ 的market-level centroid embedding 之间的两个相似性中的最大值。具体而言,EmbClickSim 可以表述为:

    $ \text{EmbClickSim}\left(l_i,\mathbb H_c\right) = \max_{m\in \mathcal M}\cos\left(\mathbf{\vec v}_{l_i},\sum_{l_h\in \mathbb H_c(m) }\mathbf{\vec v}_{l_h}\right) $

    其中:

    • $ \mathcal M $ 为用户点击 listing 所属的市场的集合(去重)。
    • $ \mathbb H_c(m) $ 为用户在城市 $ m $ 点击listing 的集合。

    除了与所有用户点击的相似性之外,我们还添加了一个特征,用于衡量与最近一次长点击的相似性,即EmbLastLongClickSim。对于候选listing $ l_i $ ,通过找到其 embedding $ \mathbf{\vec v}_{l_i} $ 和来自 $ \mathbb H_{l_c} $ 的最近长点击 listing $ l_{\text{last}} $ 的 embedding 之间的余弦相似度,我们得到:

    $ \text{EmbLastLongClickSim}\left(l_i,\mathbb H_{l_c}\right) = \cos\left(\mathbf{\vec v}_{l_i},\mathbf{\vec v}_{l_{\text{last}}}\right) $
  3. User-type & Listing-type Embedding Features :我们遵循类似的过程来引入基于 user type embedding 的特征和 list type embedding 的特征。

    我们使用 5000 万个用户 booking session ,为 50 万个 user type50 万个 list type 训练了 embeddingembedding 的维度是 $ d=32 $ 维的,并且在booking session 上使用 $ m=5 $ 的滑动窗口来训练。user type embeddinglist type embedding 被加载到搜索机器 search machine 的内存中,这样我们就可以在线计算 type 相似性。

    为了计算候选 listing $ l_i $ 的UserTypeListingTypeSim 特征,我们简单地查找 $ l_i $ 的当前listing type $ l_t $ ,以及执行搜索的用户的当前user type $ u_t $ ,并计算它们的 embedding 之间的余弦相似度:

    $ \text{UserTypeListingTypeSim}\left(u_t,l_t\right) = \cos\left(\mathbf{\vec v}_{u_t},\mathbf{\vec v}_{l_t}\right) $
  4. 上述表格中的所有特征都记录了 30 天,因此可以将其添加到搜索排序训练集合 $ \mathbb D $ 中。特征的覆盖率(即具有特定特征的样本在 $ \mathbb D $ 中的占比)在下表中进行了报告。观察到基于用户点击的特征和基于用户skip 的特征具有最高的特征覆盖率。

    最后,我们训练了一个新的、添加了embedding 特征的 GBDT 搜索排序模型。表中显示了 embedding 特征的重要性(在 104 个特征中的排名)。排名靠前的特征是:

    • 与用户点击 listing 的相似性(EmbClickSim 特征,总体排名第5 )。
    • 与用户 skip listing 的相似性(EmbSkipSim 特征,总体排名第8)。

    20 个特征中有 5embedding 特征。不出所料,长期long-term 特征 UserTypeListingTypeSim (它使用所有历史的用户预定)的排名要好于短期short-term 特征EmbBookSim (仅考虑最近2 周的预定)。这也表明:基于历史预定的推荐更适合使用历史booking session 训练的 embedding,而不是使用历史click session 训练的 embedding

    这里将 EmbeddingGBDT 结合,事实上可以直接进行端到端的 DNN 学习。Embedding + GBDT 的优势是可解释性强。

  5. 为了评估模型是否学会了按照我们的意图使用特征,我们绘制了3embedding 特征的部分依赖性partial dependencyEmbClickSimEmbSkipSimUserTypeListTypeSim 。这些图给出了:如果我们固定目标特征(我们正在检查的特征)之外的所有特征的值,那么会对listing 的排序分ranking score 产生什么样的影响。

    • 在左侧的子图中,可以看到较大的 EmbClickSim 值(表示该listing 和用户最近点击的 listing 更相似)会导致较高的模型得分。
    • 在中间的子图中,可以看到较大的 EmbSkipSim 值(表示该 listing 和用户最近跳过的 listing 更相似)会导致更低的模型得分。
    • 在右侧的子图中,可以看到较大的 UserTypeListingTypeSim 值(表示该 listinglisting typeuser type 相似)会导致更高的模型得分。

  6. 在线实验结果Online Experiment Results Summary:我们进行了离线和在线的实验(A/B test)。

    首先我们比较了在相同数据上训练的两个搜索排序模型,它们分别带有embedding 和特征、以及不具备embedding 特征。在下表中,我们根据每个效用(曝光、点击、拒绝、预定)的贴现累计效用 Discounted Cumulative Utility: DCU 和总体归一化的贴现累计效用 Normalized Discounted Cumulative Utility:NDCU 来给出结果。可以看到:

    • 对于 NDCU,添加 embedding 特征导致了 2.27% 的提升。
    • 对于预定的 DCU,添加 embedding 特征导致了 2.58% 的提升。 这意味着预定 listing 在测试集中排名更高。
    • 对于拒绝的 DCU,添加 embedding 没有任何下降(DCU-0.4 持平),这意味着拒绝 listing 没有比对照组(不带embedding 特征的模型)的排名更高。

    从下表中观察到的事实、以及前述表格中embedding 特征在 GBDT 特征重要性中排名较高的事实、以及上图中发现的特征行为与我们直观预期相匹配的事实,足以让我们做出继续进行在线实验的决定。

    在在线实验中,我们看到了具有统计意义的预定增益booking gain,并且 embedding 特征也在投入到生产环境中。几个月后,我们进行了一次反向测试,其中我们试图移除 embedding 特征,结果导致负向的预定结果,这是实时 embedding 特征有效的另一个证明。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文