返回介绍

数学基础

统计学习

深度学习

工具

Scala

二十五、DPSR [2020](检索)

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

  1. 近年来,在线购物平台(如 Ebay、沃尔玛、亚马逊、天猫、淘宝、京东)在人们的日常生活中越来越受欢迎。电商搜索帮助用户从数十亿商品中找到用户需要的东西,因此电商搜索是这些平台的重要组成部分,并且在所有渠道中贡献了最大比例的交易。例如,服务于数亿活跃用户的天猫、淘宝、京东等中国顶级电商平台,Gross Merchandise Volume: GMV 高达数千亿美元。在论文 《Towards Personalized and Semantic Retrieval: An End-to-End Solution for E-commerce Search via Embedding Learning》 中,作者将重点关注深度学习最近对电商搜索系统产生的巨大影响。下图给出了京东手机 App 上搜索的用户界面。

  2. 搜索系统的三个组件Three Components of Search System :下图展示了一个典型的电商搜索系统,它具有三个组件:query 处理query processing、候选检索candidate retrieval、排序ranking

    • query 处理将 query (例如 “爷爷的手机”)重写为可以由下游组件处理的 term-based representation (例如 [term 手机] AND [term 爷爷])。这个阶段通常包括词干化 tokenization、拼写纠正spelling correctionquery 扩展 query expansion、以及重写 rewriting
    • 候选检索使用离线构建的倒排索引inverted indexes ,根据 term matching 高效地检索候选 item 。这一步将 item 数量从数十亿减少到数十万,使得 fine ranking 变得可行。
    • ranking 根据相关性、预估转化率等因子对检索到的候选进行排序。生产系统可能具有级联的 ranking steps,其中从上游到下游依次应用从简单到复杂的 ranking 函数。

    在论文中,我们仅关注候选检索阶段,以实现更加个性化personalized 和语义化 semantic 的搜索结果,因为这个阶段在我们的搜索产品中贡献了最多的 bad cases 。根据我们的分析,JD.com 作为全球最大的电商搜索引擎之一,搜索流量的不满意案例 dissatisfaction cases 大约 20% 可以归结于这一阶段的失败。如何在 ranking 阶段处理这一点不在本文讨论范围内,但是将是我们未来的工作。

  3. 候选检索中的两个挑战Two Challenges in Candidate Retrieval :如何有效地检索更加个性化和语义相关的item 仍然是现代电商搜索引擎面临的主要挑战。

    • 语义检索问题Semantic Retrieval Problem :指的是传统的倒排索引无法检索语义相关、但是不包含queryexact termsitem 。正如《Semantic Matching in Search》所述,搜索系统最关键的挑战是 queryitem 之间的 term mismatch ,尤其是对于电商搜索,item 标题通常很短。

      传统的互联网搜索通常使用 query rewriting 来解决这个问题,它将原始 query 转换为另一个可能更好地代表搜索需求的 similar query 。但是,很难保证通过 middle man “中间人” (即重写的 query)来保持相同的搜索意图search intention,并且也不能保证包含不同 terms 的相关 item 可以通过有限的rewritten query 集合来检索到。

    • 个性化检索问题Personalized Retrieval Problem :指的是传统的倒排索引无法根据当前用户的性别、购买力等特征检索出不同的 item。例如,如果用户是女性,那么我们希望检索更多的女性 T-shirt ,反之亦然。

      一些基于规则的解决方案已经在我们的系统中使用了很多年,包括:为 item 建立 tag 索引,如购买力、性别等等,就像 token 进入倒排索引一样;为不同的用户组建立独立的索引。然而,以前的这些方法太过于人工设计hand-crafted ,因此很难满足更精巧subtle 的个性化需求。

  4. 论文的贡献:在论文中,作者提出了深度个性化和语义化的检索 Deep Personalized and Semantic Retrieval: DPSR 来解决前述的工业级电商搜索引擎中的两个挑战。论文的贡献可以总结如下:

    • 论文概述了由离线模型训练、离线索引、在线 serving 组成的完整 DPSRembedding 检索系统。作者分享了将基于神经网络的候选检索产品化为工业级电商搜索引擎的关键设计决策。
    • 论文开发了一种新颖的神经网络模型,该模型具有双塔架构、query 塔为 multi-head 设计、attention-based 损失函数、负采样方法、高效的训练算法和人工监督数据。所有这些对于训练表现最好的模型都是必不可少的。
    • 论文展示了作者在构建大规模深度检索训练系统方面所做的努力,其中论文定制化了现有的 TensorFlow API 以实现在线/离线一致性、输入数据存储、以及可扩展的分布式训练。论文还展示了作者在构建用于 embedding 检索的工业级在线 serving 系统方面所做的努力。
    • 论文进行了广泛的embedding 可视化、离线评估、在线 A/B test,结果表明论文的检索系统可以帮助找到语义相关的 item,并显著改善用户的在线搜索体验,尤其是对于传统搜索系统难以处理的长尾 query (转化率提升 10% )。

    2019 年以来,论文的 DPSR 系统已经成功部署在京东的搜索产品中。

  5. 相关工作:

    • 传统的候选检索Traditional Candidate Retrieval :对于候选检索,大多数研究都集中在学习 query rewrites 作为一种间接方法来弥合 querydoc 之间的vocabulary gap 。仅有少数的几种新的模型方法,包括矩阵分解的潜在语义索引 latent semantic indexing: LSI、概率模型的概率潜在语义索引 probabilistic latent semantic indexing: PLSI、自编码模型的语义哈希semantic hashing 。所有这些模型都是从 doc 中的单词共现中无监督学习的,没有任何监督的 label

      我们的方法和之前的方法不同,因为我们训练了一个监督模型来基于具有相关信号(即 click )的大规模数据集直接优化相关性度量relevance metrics (而不是优化单词共现)。

    • 基于深度学习的相关性模型Deep Learning Based Relevance Model:随着深度学习的成功,大量基于神经网络的模型被提出,以学习 querydoc 之间语义相关性的方式来改进传统的信息检索information retrieval: IR方法和 learning to rank: LTR 方法。

      有关语义匹配和基于深度神经网络的信息检索的全面综述,可以参考《Semantic Matching in Search》《An Introduction to Neural Information Retrieval》。特别是 DSSM 及其后续工作 CDSSM 开创了使用深度神经网络进行相关性评分的工作。最近,包括 DRMMDuet 在内的新模型得到了进一步发展,以将传统的信息检索lexical matching 信号(如 query term 重要性、exact matching )包含在神经网络中。然而,这个方向所提出的大部分工作都集中在 ranking 阶段,其优化目标和要求与我们在本文工作所关注的候选检索有很大不同。

      深度神经网络的双塔架构已经在现有的推荐工作中广泛采用,以进一步结合 item 特征。这种模型架构在自然语言处理中也被称作双编码器dual encoder 。这里我们提出了一个更高级的双塔模型,它由用于query 塔的 multi-head 和基于 soft 内积(而不是简单内积)的 attention 损失函数组成。

    • 搜索引擎中的 embedding 检索 Embedding Retrieval in Search Engine:近年来,embedding 检索技术已广泛应用于现代推荐系统和广告系统,但是尚未广泛应用于搜索引擎。我们发现了关于在搜索引擎中检索问题的一些工作,但是它们尚未被应用到工业生产系统中。据我们所知,我们是在工业搜索引擎系统中应用 embedding 检索的首批实践探索之一。

25.1 模型

  1. 在我们介绍细节之前,先展示以下我们的 embedding 检索系统的全貌。下图说明了我们的生产系统具有以下三个主要模块:

    • 离线模型训练Offline Model Training 模块:训练由 query embedding 模型(即 query 塔)和 item embedding 模型(即 item 塔)组成的双塔模型,分别用于在线 serving 和离线索引。

      这种双塔模型架构是一种谨慎且必要的设计,能够实现快速的在线 embedding 检索,具体细节在后面讨论。此外,我们在后面还讨论了我们优化离线训练系统的努力。

    • 离线索引Offline Indexing 模块:加载 item embedding 模型(即 item 塔),从 item 语料库中计算所有 item embedding,然后离线构建 embedding 索引以支持高效的在线 embedding 检索。

      由于不可能在数十亿个itemitem 语料库中进行全量搜索,因此我们采用了一种 state-of-the-art 的算法来来对稠密向量进行有效的最近邻搜索,从而为 query embedding 找到相似的 item embedding

    • Online Serving 模块:加载 query embedding 模型(即 query 塔)从而将任何用户输入的 query 文本转换为 query embedding,然后将其馈送到 item embedding 索引以检索 K 个相似 item

      注意,这个在线 serving 系统必须以几十毫秒的低延迟来构建。此外,它必须能够 scale 到每秒数十万次查询query per second: QPS ,并且能够灵活地对实验进行敏捷迭代。我们将在后面详细讨论我们为了构建这样一个在线 serving 系统所作的努力。

    这里将 User Profileembedding 进行 Concat,而 User History Events, Query Tokens, Item Title Tokensembedding 都是进行 Average,有两个原因:

    • 首先,User Profile 的字段数量是固定的,因此 embedding 拼接之后的长度是确定的。而 User History EventsQuery TokensItem Title Tokensembedding 数量是可变的,拼接之后的长度是可变的。
    • 其次,User Profile 的各字段是异质的,例如 “年龄” 和 “性别” 是不同的,它们的 embedding 难以直接相加;而 User History Eventembedding 是同质的,它们可以直接相加。
  2. 接下来我们逐步介绍 embedding learning 模型,按照双塔架构two tower architecturequery 塔的多头设计multi-head design 、注意力损失函数attentive loss function 、混合负采样hybrid negative sampling 、人工监督数据human supervision data 的顺序。所有这些对于训练我们的最佳表现的模型都是不可或缺的。

25.1.1 双塔架构

  1. 如上图的离线模型训练模块所示,模型由 query 塔 $ Q $ 和 item 塔 $ S $ 组成。对于给定的 query $ q $ 和item $ s $ ,模型的输出得分为:

    $ f\left(q, s\right) = G\left(Q\left(q\right),S\left(s\right)\right) $

    其中:

    • $ Q\left(q\right)\in \mathbb R^{m\times d} $ 表示 $ d $ 维空间中 queryquery 塔的 $ m $ 个输出embedding
    • $ S\left(s\right)\in \mathbb R^{n\times d} $ 表示 $ d $ 维空间中 itemitem 塔的 $ n $ 个输出 embedding
    • 评分函数 $ G(\cdot,\cdot) $ 计算 queryitem 之间的最终得分。

    研究者和从业人员通常让 query 塔 $ Q $ 和 item 塔 $ S $ 都输出一个单一的 embedding,即 $ m=1 $ 和 $ n=1 $ ,并选择内积作为评分函数,即:

    $ G\left(Q\left(q\right),S\left(s\right)\right) = Q\left(q\right)^\top S\left(s\right) $

    这种最简单的设置在很多应用中已经被证明是成功的。

  2. 这种双塔架构的关键设计原则是:在模型训练之后,使得 query embeddingitem embedding 相互独立。所以我们可以分别独立地计算它们。所有的 item embedding 都可以离线计算,以便为在线快速最近邻搜索构建 item embedding index,并且可以在线计算 query embedding 以处理所有可能的用户 query

    即使 embedding 是独立计算的,由于 query 塔和 item 塔之间简单的内积交互,理论上 query embeddingitem embedding 仍然在相同的几何空间中。因此,为给定的 query embedding 找到 K 个最近邻的 item ,等效于最小化给定 queryKquery-item pair 对的损失。

  3. 在下面的部分中,我们将介绍一个新颖设计的 query 塔 $ Q $ 和一个交互函数 $ G $ ,从而达到出色的、且可解释的检索结果。

    由于 item representation 通常很直接明了,我们仍然简单地保持 item 塔 $ S $ 不变。item 塔 $ S $ 将所有 item 特征拼接起来作为输入层,然后通过多层感知机 MLP (采用 ReLU)来输出单个 itemembedding,最后归一化为与 query embedding 相同的长度,如上图离线模型训练模块右侧所示。类似的 MLP 结构可以在以前的工作中找到。

25.1.2 Multi-head 的 Query 塔

  1. 如上图中离线训练模块的左侧所示,query 塔和 item 塔有两个不同之处:

    • 一个投影层projection layer ,将一个输入的稠密 representation 投影为 $ K $ 个稠密的representation 。这里的另一个选择是使用 $ K $ 个独立的 embedding 集合,但是它需要更大的模型规模。在实践中,我们选择投影层来实现类似的效果,但是模型规模要小得多。

    • $ K $ 个独立的encoding MLP,每个 MLP 独立输出一个 query embedding,它们可能会捕获 query 的不同意图。我们将这 $ K $ 个输出 embedding 称作multi-head representation

      这些 multiple query embeddingsquery 的意图提供了丰富的 representation。通常,我们在实践中发现:这可以为多义词 query (如 apple)捕获不同的语义含义,为商品 query (如 cellphone)捕获不同的流行品牌,为品牌query (如 Samsung )捕获不同的商品。

  2. 值得一提的是,encoding 层可以使用任何更强大的神经网络,如 RNN 和其它 state-of-the-arttransformer-based 模型。在一项独立的离线研究中,我们使用这些高级模型取得了相似或者稍好一些的结果。但是我们要强调的是,简单的 MLP 更适合于我们的工业级生产建模系统,因为它对离线训练和在线 serving 都更加高效,这意味着我们能够向模型训练馈送更多的数据(因为MLP 的计算效率高),并部署更少的机器来serving 模型。

25.1.3 Attention 损失函数

  1. 除了单个 embedding 和内积 setup 之外,这里我们为multiple query embeddings 开发了一种更通用的形式。我们将query 塔 $ Q(q) $ 的 $ m $ 个输出简写为 $ \{\mathbf{\vec e}_1,\cdots,\mathbf{\vec e}_m\} $ ,其中 $ \mathbf{\vec e}_i\in \mathbb R^d $ ,item 塔 $ S(s) $ 只有一个输出为 $ \mathbf{\vec g}\in \mathbb R^d $ 。那么queryitem 之间的 soft 内积可以定义为:

    $ G(Q(q),S(s)) = \sum_{i=1}^m w_i\times \mathbf{\vec e}_i^\top \mathbf{\vec g} $

    这个评分函数基本上是 query embeddingitem embedding 之间所有内积的加权和。权重 $ w_i $ 是从同一组内积的 softmax 计算而来:

    $ w_i = \frac{\exp\left(\mathbf{\vec e}_i^\top \mathbf{\vec g}/\beta\right)}{\sum_{j=1}^m \exp\left(\mathbf{\vec e}_j^\top \mathbf{\vec g}/\beta\right)} $

    其中 $ \beta $ 为 softmax 的温度超参数。

    • 注意, $ \beta $ 越高,则注意力权重就越均匀。

      • 如果 $ \beta\rightarrow 0 $ ,那么上述评分函数等价于选择最大的内积,即: $ \max_i \mathbf{\vec e}_i^\top \mathbf{\vec g} $ 。
      • 如果 $ \beta\rightarrow \infty $ ,那么上述评分函数等价于 embedding 内积的均值。
    • 当 $ m=1 $ 时,上述评分函数退化为传统的embedding 内积形式。

    这种 multi-headmulti-head attention 有几点不同:

    • 首先,这里item 只有一个 head,而 multi-head attention 中的 item 有的 $ m $ 个 head
    • 其次,这里内积采用不同 head 的加权和来计算,而 multi-head attention 中的内积就是直接 sum 而计算。

    因此这里 multi-head 的物理意义为:计算 query 的不同意图和 item 的相似度,然后对于相似度进行加权和。相似度越大的意图,其权重越大。

  2. 典型的工业点击日志数据集通常只包含 queryitem 的点击 pair 对。这些 pair 对通常都是相关的,因此可以被视为正样本。除此之外,我们还需要通过各种采样技术收集负样本,这将在后面详细讨论。我们将所有训练样本的集合 $ \mathcal D $ 定义为:

    $ \mathcal D = \left\{\left(q_i,s_i^+,\mathcal N_i\right)\mid i,r\left(q_i,s_i^+\right)=1,r\left(q_i,s_j^-\right)=0,\forall s_j^-\in \mathcal N_i\right\} $

    其中每个训练样本是一个三元组,由 query $ q_i $ 、 query 相关的 postive item $ s_i^+ $ 、以及一个negative item 集合 $ \mathcal N_i $ 组成。其中 $ r(q_i,s_i^+)=1 $ 且 $ \mathcal N_i $ 中的每个 item $ s_j^- $ 都和 query 无关(即 $ r(q_i,s_j^-) = 0 $ ) , $ r(\cdot,\cdot) $ label 信息。

    然后我们在训练集 $ \mathcal D $ 上使用带 margin $ \delta $ 的 hinge 损失函数:

    $ \mathcal L(\mathcal D) = \sum_{(q_i,s_i^+,\mathcal N_i)\in \mathcal D}\sum_{s_j^-\in \mathcal N_i} \max\left(0,\delta-f\left(q_i,s_i^+\right) + f\left(q_i,s_j^-\right)\right) $

    这要求 postive item 评分比 negative item 评分至少高出 $ \delta $ 。

    注意,该注意力损失函数仅适用于离线训练。在在线检索期间,每个 query head 检索相同数量的 item,然后将所有 item 根据它们与被检索 head 的内积得分进行排序和截断。

25.1.4 负样本

  1. 训练深度模型需要大量的数据。我们探索点击日志,它代表用户的隐式相关反馈 implicit relevance feedback 并由 query 及其点击 item 组成,从而训练我们的 embedding 检索模型。直观地,我们可以假设:如果item 在给定的 query 条件下被点击,那么该 itemquery 相关,至少是部分相关。

    形式地,我们可以将点击日志视为只有正样本的数据集的特例。那么如何有效地收集负样本是这里的一个关键问题。在我们的实践中,我们采用了一种混合方法,该方法混合了两种负样本来源,包括随机负样本和 batch 负样本。

  2. 随机负样本Random Negatives :随机负样本集合 $ \mathcal N_i^\text{rand} $ 在所有候选 item 中均匀采样。

    形式上,给定所有 $ N $ 个可用 item 的集合,我们从均匀分布 $ j\sim \text{Uniform}(1,N) $ 中随机抽取一个整数,并将item 集合中第 $ j $ 个元素放入到随机负样本集合 $ \mathcal N_i^\text{rand} $ 中。然而,如果我们直接应用这种均匀采样,则计算成本将非常高,因为每个负样本都必须经过 item 塔,更不用说对这些负样本进行采样并获取其特征的成本了。为了在保持效果的同时最小化计算成本,我们对一个 batch 中的所有训练样本使用相同的随机负样本集合。在实践中,我们发现结果与使用纯随机负样本的结果相似,但是前者训练速度要快得多。

  3. batch 负样本Batch Negatives :将 batchquery 的正样本视为其它 query 的负样本,从而得到 batch 负样本集合 $ \mathcal N_i^\text{batch} $ 。具体而言,对于一个训练 batch

    $ \mathcal B = \left\{\left(q_i,s_i^+,\mathcal N_i\right)\mid i\right\} $

    我们可以为第 $ i $ 个样本收集负样本为:

    $ \mathcal N_i^\text{batch} = \left\{s_k^-\mid k\ne i,1\le k\le |\mathcal B|\right\} $

    我们可以看到 batch 负样本基本上是根据数据集中 item 频率来采样的。这些随机生成的 query-item pair 对不太可能偶然相关。具体而言,偶然相关的可能性等于两个随机抽取的点击日志具有彼此相关的 item 。给定一个包含数亿个点击日志的数据集,这个可能性在训练准确性accuracy 方面基本上可以忽略不计。

    此外,上述batch 负样本的主要优点是 item embedding 计算的复用。在 batch 中每个 item embedding 有一次作为正样本、有 $ |\mathcal B| -1 $ 次作为负样本,但是只需要一次特征提取及只需要一次 item 塔的前向计算。

  4. 混合比例Mixing Ratio:最终的完整负样本集合 $ \mathcal N_i $ 是上述两个负样本集合的并集:

    $ \mathcal N_i = \mathcal N_i^\text{rand}\cup \mathcal N_i^\text{batch} $

    在我们的电商搜索检索实践中,我们发现混合比例参数 $ 0\le \alpha \le 1 $ 对于负样本集合的组成通常很有用。形式上,我们采用 $ \alpha $ 比例的随机负样本、 $ (1-\alpha) $ 比例的batch 负样本。

    我们发现 $ \alpha $ 的值与从模型中检索到的 item 的流行度popularity 高度相关(参考实验部分),因此对在线指标影响很大。直观地,我们可以看到混合比例 $ \alpha $ 决定了负样本中的 item 分布,从均匀分布( $ \alpha = 1 $ )到实际 item 频率的分布( $ \alpha = 0 $ )。通过这种方式,该模型倾向于为较大的 $ \alpha $ 检索到更多流行的 item,因为流行的 item 在随机负样本中出现的频率,相对于在 batch 负样本中出现的频率更低。

    如果均匀采样,则所有item 成为负样本的概率都是相同的。如果 batch 内负采样,则热门item 成为负样本的概率更高,这使得模型检索到热门item 的概率更低。

  5. 我们在DPSR 训练算法中总结了带有 batch 负采样和随机负采样的完整训练算法。

    每个训练 step 的计算复杂度为 $ O(b^2) $ ,即 batch size $ b $ 的二次方。 因为batch 负样本需要在 batch 中需要为每个 query 和每个 item embeddingpair 对之间计算内积。在实践中,由于 batch size 通常很小(如 64 或者 128),因此二次效应实际上比其它计算成本(如特征提取、梯度计算等)小得多。事实上,由于 batch 负样本对每个 item 塔输出的有效利用,总的收敛速度实际上更快。

  6. DPSR 训练算法:

    • 输入:

      • postive 数据集 $ \mathcal D^+ $
      • batch size $ b $
      • 最大迭代step $ T $
      • 混合比例 $ \alpha $
    • 输出:训练好的 query 塔 $ Q $ 、item 塔 $ S $

    • 算法步骤:

      迭代 $ t=1,\cdots,T $ ,迭代步骤为:

      • 采样一个 batch 的 $ b $ 个样本 $ \mathcal B\sube \mathcal D^+ $ 。
      • 为这个 batch 随机采样一组负样本 $ \mathcal N^\text{rand} $ 。注意, $ \mathcal B $ 中的每个正样本都共享这组相同的负样本。
      • query 塔计算 query head embeddings $ Q(q) $ 。
      • batch $ \mathcal B $ 以及随机负样本集合 $ \mathcal N^\text{rand} $ 内每个 item $ s $ 计算 item embeddings $ S(s) $ 。
      • 计算损失函数 $ \mathcal L(\mathcal B) $ ,其中包含了 batch 负样本集合 $ \mathcal N^\text{batch} $ 。
      • 通过反向传播更新 query 塔 $ Q $ 和 item 塔 $ S $ 。

      返回训练好的 query 塔 $ Q $ 、item 塔 $ S $ 。

25.1.5 人工监督信息

  1. 除了使用点击日志数据之外,我们的模型还能够利用额外的人工监督来进一步纠正极端 case,结合先验知识并提高其性能。人工监督来自三个来源:

    • 大多数跳过的 item 可以从在线日志中自动收集,这些 item 和相关的 query 可以用作负样本。

      即曝光但是未点击的 item 可以视为负样本。

    • 可以基于领域知识收集人工生成的数据作为人工负样本和人工正样本。例如:

  • “手机保护套” 被生成为query “手机”的负样本,因为它们虽然字面上共享相似的产品词”手机“,但是语义上有着显著差异。

    • iPhone 11 被生成为 query “最新大屏 iphone” 的正样本。

    基于人工规则来自动生成正样本和负样本。

  • 人工label 和上报的 bad case 通常用于训练相关性模型。我们将它们作为样本包含在训练数据集中。

这些人工监督数据可以作为正样本和负样本输入到模型中。

这些人工监督数据可以配置更高的样本权重,从而使得模型更关注这些 “特殊” 的样本。

25.2 Embedding 检索系统

  1. 我们采用 TensorFlow 作为我们训练和在线 serving 的框架,因为它已经被广泛应用于学术界和工业界。尤其是TensorFlow 具有以下优点:训练之前预先建立静态图、训练速度快、训练与在线 serving 无缝集成。

    我们基于 TensorFlow 的高级 API Estimator 构建了我们的系统。为了确保最佳性能和系统的一致性,我们还做出了巨大努力来简化现有的 Tensorflow package 和工业级深度学习系统。

25.2.1 训练系统优化

  1. 在线和离线的一致性Consistency Between Online and Offline:构建机器学习系统的常见挑战之一是保证离线和在线的一致性。典型的不一致通常发生在特征计算阶段,尤其是在离线特征预处理和在线 serving 系统中使用两个独立的编程脚本时。

    在我们的系统中,最脆弱的部分是文本 tokenization,它在数据预处理、模型训练、在线 serving 中进行了三次。意识到这一点,我们用 C++ 实现了一个unique tokenizer ,并用一个非常轻量的 Python SWIG 接口包装它以进行离线数据 vocabulary 计算,并使用 TensorFlow C++ 自定义运算符进行离线训练和在线 serving 。因此,可以保证相同的 tokenizer 代码贯穿原始数据预处理、模型训练、在线预测。

  2. 压缩的输入数据格式Compressed Input Data Format:工业搜索和推荐训练系统的典型数据格式通常由三种类型的特征组成:用户特征(例如 query、性别、地域)、item 特征(例如流行度popularity)、user-item 交互特征(例如,item 是否被用户看到)。由于训练数据存储所有 user-item 交互 pair 对,因此原始输入数据会多次重复用户特征和 item 特征,这会导致数百 TB 的磁盘空间占用、更多的数据传输时间、更慢的训练速度。

    为了解决这个问题,我们自定义了 TensorFlow Dataset 来从三个独立的文件中组装训练样本:一个用户特征文件、一个 item 特征文件、一个包含 query, user id , item id 的交互文件。用户特征文件、item 特征文件首先作为特征 lookup 字典被加载到内存中,然后交互文件在训练step 中迭代,迭代时从内存读取并添加了用户特征和 item 特征。通过这种优化,我们成功地将训练数据的规模减少为原始大小的 10%

    在典型的工业级系统中,用户规模在亿级、item 规模在千万级,因此将用户特征文件、item 特征文件加载到内存中是个瓶颈。一个解决方案是采用内存数据库,如 redis ,但是这会增加系统的复杂度(需要维护一套 redis 集群,以及处理 redis 请求失败的 case )。

  3. 可扩展的分布式训练 Scalable Distributed Training:在具有参数服务器 parameter servers 的分布式训练场景中,常见的瓶颈之一是网络带宽。工业界大部分大型机网络带宽是 10G bits,对于大型深度学习模型而言远远不够。我们观察到,现有的 TensorFlow Estimator 实现在处理 embedding 聚合(例如 embeddingsum)时没有得到足够的优化,因此在增加一些 worker 时网络带宽很快成为瓶颈。

    为了进一步提高训练速度,我们改进了 TensorFlow 官方实现中的 embedding 聚合操作,将 embedding 聚合操作移到参数服务器中,而不是在 worker 中。因此对于每个 embedding 聚合,在参数服务器和 worker 之间只需要传输一个 embedding,而不是数十个embedding。因此,网络带宽显著降低,分布式训练系统可以扩展到五倍以上的机器。

25.2.2 在线 Serving 系统

  1. DPSR 在线 serving 系统的概述如下图所示。该系统由两个新颖的部分组成:一个是 TensorFlow Servable 模型、另一个是模型sharding 代理。

  2. One Servable ModelDPSR 的简单实现可以由两个独立的部分组成:query embedding 计算和最近邻查找。如果没有精心的设计,可以简单地为它们构建两个独立的在线服务。然而,从以下两个方面来看,这不是最优的系统设计:

    • 它引入了管理 query embedding 模型和 item embedding 索引之间映射的复杂性,如果发生映射错误,那么将完全导致系统故障。
    • 它需要两次网络往返(一次计算 query embedding、一次搜索最近邻)来计算给定 query 文本的最近邻。

    为了克服这些问题,我们通过 TensorFlow Servable 框架采取了一种更优化的方法。在该框架中,我们可以将两个部分统一到一个模型中。如上图所示,这两个部分可以封装到一个 Servable 中。query embedding 直接从 query embedding model 发送到 item embedding 索引,通过计算机内存而不是计算机网络。

    这里将 Query Embedding ModuleEmbedding Indexes 部署在一起。对于规模在千万级的 item,其 Embedding Indexes 可能单机内存无法处理。例如,假设embedding size = 128embedding 为双精度浮点,那么 1 千万 item 需要消耗 9.5 GB 内存。

  3. 模型分片 Model Sharding:系统的进一步扩展需要同时支持数百个 DPSR 模型在线,用于不同的检索任务、以及各种模型的 A/B test 。然而,一个由 query embedding 模型和一个 item embedding 索引组成的 servable 模型通常需要数十 GB 的内存。因此,将所有模型存储在单台机器的内存中变得不可行,我们必须构建一个系统来支持为数百个 DPSR 模型的 serving

    我们通过一个代理模块来解决这个问题,这个代理模块的作用是将模型预估请求定向到一个保持相应模型的model server,如上图所示。这个基础设施不仅是为 DPSR 设计的,而且是作为一个通用系统来支持我们搜索产品的所有深度学习模型。

25.3 实验

  1. 在本节中,我们首先利用 t-SNE 可视化 embedding 结果,以便我们可以直观地了解模型的工作原理。然后我们和不同方法进行比较来评估离线效果。接下来我们报告了我们的搜索产品中的在线 A/B test 结果。最后我们报告了 DPSR 系统的离线索引和在线 serving 耗时,以证明其效率,这在工业环境中至关重要。

  2. 我们的生产 DPSR 模型是在 60 天用户点击日志的数据集上训练的,其中包含 56 亿次 session。我们在 548-cores 机器的集群中进行分布式训练,共启动了 40worker5 个参数服务器。

    我们使用了 margin 参数 $ \delta =0.1 $ 、Adam 优化器、学习率 0.01batch size $ b=64 $ 、embedding 维度 $ d = 64 $ 。训练大约 4 亿step 收敛,耗时约 55 个小时。

25.3.1 Embedding 可视化

  1. Embedding Topology :为了直观了解我们的 embedding 检索模型是如何工作的,我们展示了从我们平台中最热门的 33 个类目中选择的高频item 的二维 t-SNE 坐标。如下图所示,我们可以看到 item embedding 的结构非常明确和直观。

    基本上,我们可以看到:

    • 与电子产品相关的类目(如手机、笔记本电脑、平板电脑、耳机、显示器)都很好地放置在图的左侧。
    • 与家电相关的类目(如冰箱、平板电视、空调、洗衣机)都放置在图的左下方。
    • 与食品相关的类目(如零食、速食、饼干、奶粉)都放置在右下方。
    • 与清洁和美容相关的类目(如洗面奶、洗发水)都放置在右侧。
    • 与衣服相关的类目(如鞋子、跑鞋、毛衣、羽绒服)都放置在右上方。

    总体而言,这种合理且直观的 embedding 拓扑反映了所提出的模型能够很好地学习 item 语义,从而使得 query embedding 能够检索相关 item

  2. Multi-Head 消歧:在下图中,我们还计算了从 10 个商品类目中选择的高频 item 的二维 t-SNE 坐标,以此说明在 query 塔中使用multi-head 的效果。我们在这里使用两个多义词query 作为示例,即 'apple''cellphone',这两个词也在我们平台的 top-10 query 中。

    • 在图 (b) 中,我们可以看到 query 'apple' 的两个 head 分别检索了 iPhone/Macbookapple fruit
    • 在图 c 中,我们可以看到 query 'cellphone' 的两个 head 分别检索了两个最受欢迎的品牌:华为和小米。

    这些都显示了不同的 head 能够聚焦于不同的潜在用户意图。相比之下,图 (a) 中的 single-head 模型不适用于手机类别,其中 iPhone 构成了远离其它手机的另一个cluster。这可能是由于最上面的 query 'apple' 的歧义性ambiguity

  3. 语义匹配 Semantic Matching:为了更好地理解我们提出的模型是如何执行的,我们在下表展示了我们的检索产品中的几个 good cases。可以看到:通过学习一些单词的语义,DPSR 令人惊讶地能够连接bridging query 和相关的 item 。例如:大童和 3-6 岁、自由泳器材和划臂等等。

    此外,DPSR 能够纠正 query 中的拼写错误,如 v 女包 和 LV女包、ovivo手机和 vivo 手机。部分原因是我们利用了 token vocabulary 的英文字母三元组。我们还观察到类似的汉字错字纠正,主要是从用户点击和 n-gram embedding 中学到的。

25.3.2 离线评估

  1. 评估指标:我们使用以下离线指标来评估检索方法。

    • Top-k 定义为在给定 queryN 个(我们使用 N = 1024 )随机 item 中,相关的 itemtop-k 检索结果中的概率。这个 top-k 值是通过平均 20 万个随机 query 来计算的。更高的 top-k 表示更好的检索质量,即命中率 hit rate
    • AUC 是在一个独立的数据集中计算的,其中人工标记了 query-item 相关性。label 为相关的、不相关的,然后 embedding 内积或者任何相关性得分(BM2.5)可以被视为预估分。更高的 AUC 代表更好的检索相关性。
    • time 是在 48-cores CPU 机器上从 query 文本到 1500 万个 item 中最相关的 1000item 的总检索时间。该指标决定了一种方法能否应用于工业级检索系统。通常,cutoff 时间是 50ms,但是最好是 20ms
  2. baseline 方法:我们将 DPSRBM2.5DSSMbaseline 进行了比较。

    • BM2.5:是一种基于倒排索引关键词匹配的经典信息检索方法,它使用启发式方法根据 term 频率和逆文档频率对文档进行评分。我们比较了 BM2.5 的两个版本:仅 unigram、同时包含 unigrambigram (记作 BM2.5-u&b)。
    • DSSM:是一个经典的深度学习模型,为 ranking 而不是检索而设计。我们仍然将它作为 baseline 进行比较。

    另外我们还对比了 DPSR 的几个变体:

    • DPSR 是指我们模型的普通版本,没有任何用户特征。
    • DPSR-p 指的是我们模型的basic 个性化的版本,包含额外的用户画像特征,如购买力、性别等。
    • DPSR-h 指的是我们模型的完整个性化版本,包含用户画像和用户历史 event
  3. DPSR 和上述 baseline 方法的比较结果如下表所示,可以看到:

    • BM2.5 作为一种经典方法表现出了良好的检索质量,但是从 1500 万个 item 中检索需要 1 分多钟,这意味着将其用于在线检索不太现实。
    • 将曝光未点击 item 作为负样本进行采样的 DSSMtop-kMRRAUC 等指标上表现最差。这主要是因为 DSSM 针对 ranking 任务进行优化,而 ranking 任务是与检索任务截然不同的任务。因此,我们可以得出结论:仅使用曝光未点击的 item 作为负样本并不能训练检索模型。
    • 普通版本的 DPSRbaseline 方法和其它个性化的 DPSR 版本中具有最高的 AUC 得分,这表明纯语义 DPSR 可以获得最高的检索相关性。
    • basic 个性化版本的 DPSR-p 方法的结果表明:用户画像特征有助于改善普通版本的检索质量指标(top-k),但是在相关性方面有所折衷。
    • 完整个性化版本的 DPSR-h 在所有模型中具有最佳检索质量指标(top-k),这表明可以从用户历史事件中提取大量信号。

    注意:个性化的模型通过权衡相关性指标(AUC)来提高检索质量指标(top-k),这是合理的。因为检索质量除了相关性之外还包含更多因素,如item 流行度、个性化等。

  4. 下图说明了随机负样本和 batch 负样本的混合比率 $ \alpha $ 影响检索到的 item 流行度。可以看到:

    • 负采样中的随机负样本越多,检索到的热门 item 就越多(Popularity 指标)。
    • 但是太多的随机负样本(例如 $ \alpha = 1.0 $ ) 将损害检索到的 item 的相关性(AUC 指标)。

    因此,我们可以将 $ \alpha $ 参数视为检索流行度popularity 和相关性relevancy 之间的 tradeoff。在实践中我们发现适当的 $ \alpha=0.5 $ 或 $ \alpha =0.75 $ 将有助于显著提升在线指标。

25.3.3 在线 A/B test

  1. DPSR 被设计为我们搜索系统中的一个关键组件,以改善整体用户体验。因此,我们将重点放在 DPSR 作为附加检索方法,从而对搜索系统的整体改进上。

    • 在对照组(baseline)中,包含我们当前生产系统中可用的所有候选item,这些item 通过启用了 query rewritten 的基于倒排索引的方法进行检索。
    • 在对实验组(DPSR)中,除了 baseline 中的候选item 之外,还从我们的 DPSR 系统中检索了最多 1000 个候选 item

    对照组和实验组都通过相同的 ranking 组件和业务逻辑。在这里,我们强调我们的生产系统是一个强大的 baseline 来进行比较,因为这个系统已经经过数百名工程师和科学家多年的优化,并应用了最先进的 query rewriting 和文档处理方法来优化候选 item 的生成。

    我们首先对检索到的 item 的相关性进行了人工评估。具体而言,给定相同的 500 个长尾 query ,我们要求人工评估员分别为来自于 baseline 系统、DPSR 系统的结果来标记相关性。标记结果分为三个类别:差bad、一般 fair、完美 perfect

    评估结果如下表所示,可以看到:DPSR 减少了大约 6%bad case 从而提高了搜索相关性。这证明了深度检索系统在处理 difficult 或者 unsatisfiedquery 时特别有效,这些 query 通常需要语义匹配。

  2. 然后我们使用标准的 A/B test,在两周内对整个站点流量的 10% 进行了在线实验。为了保护商业机密,我们只报告了相对的提升,实验结果如下表所示:

    • DPSR 检索改进了电商搜索中所有核心业务指标,包括用户转化率user conversation rate: UCVRgross merchandise value: GMVquery rewrite rate: QRRquery 重写率,这被认为是搜索满意度的一个很好的指标)。
    • 我们还观察到 query 塔的 2-head 版本和个性化版本(记作 1-head-p13n)都改进了没有任何用户特征的 1-head query 塔的普通版本。
    • 特别地,我们观察到改进主要来自长尾 query,这对于传统搜索引擎而言通常很难。

25.3.4 效率

  1. 我们在下表中展示了我们的离线索引构建和在线最近邻搜索的效率,不包括 query embedding 计算。我们报告了使用 NVIDIA Tesla P40 GPUIntel 64-core CPU 配置下索引和搜索 1500 万个 item 所消耗的时间。

    结果表明 DPSR 可以在 CPU 上在 10ms 内检索候选 item,并且可以从 GPU 中受益:索引时间消耗减少 85%、搜索延迟减少 92%query per second: QPS 吞吐量提高 14 倍。

  2. 我们在下表中报告了使用上述相同 CPUGPU 机器的整体模型 serving 性能。从 query 文本到 1000 个最近邻的总延迟可以在 15ms ~ 20ms 内完成,这甚至可以与标准倒排索引的检索相媲美。

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

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

发布评论

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