【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(下)

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(下)

【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)+https://developer.aliyun.com/article/1628914

3.3 课程训练

除了在第3.2节中描述的批内负例采样外,我们还设计了一个课程训练计划,其中双塔模型在第二阶段训练中被输入更难的负例,并在验证集上实现了超过1%的ROC AUC绝对增益(见表4)。

在训练的第一阶段,我们使用批内负例训练模型,并在验证集上的ROC AUC指标上通过早期停止让模型收敛。我们希望在第二阶段训练中给模型输入“更难的”负例。虽然传统上这意味着要运行一个单独的数据管道来找到难的负例,并将这个数据集输入模型,我们建议使用批次内的负例:我们像通常一样得到形状为(B * B)的余弦相似度矩阵。对于每一行,我们现在提取除了对角线分数之外的最高分数作为硬负样本;我们将其列索引表示为

image.png

这将有助于以格式(qi,di,dnqi)生成训练样本。我们探索了缩放的二元交叉熵损失(公式4)和边际排名损失(公式5),并观察到边际在0.1到0.2之间的边际排名损失效果最好。批内硬负例采样还减少了在寻找硬负例时额外的CPU使用以及维护另一个离线数据流水线的成本。最初,使用更难负例的课程训练效果不佳。通过实验,我们发现确保第一阶段训练收敛后再开始第二阶段训练至关重要

。此外,我们观察到在边际排名损失3中,reduction=sum比reduction=mean效果更好。


image.png image.png image.png image.png image.png

image.png


图3是多阶段训练的ROC AUC评估指标曲线之一,我们可以看到在第二阶段训练中ROC AUC的增长。

Note: 一开始使用困难负样本进行课程学习没有取得收益。通过实验发现,问题的关键在于必须先保证第一阶段收敛 ,然后才能开始执行第二阶段的课程学习 。除此之外,对所有样本对求总体的margin rank loss损失时,使用sum 来做reduce比用mean更好。

3.4 评估

在通过在线流量进行A/B测试之前,我们离线评估我们的模型候选,并基于批量召回@K、ROC AUC和KNN召回率和精确度选择最佳模型。

批量召回@K:此度量标准在训练期间容易计算,并且是模型优化最接近的指标,使我们能够快速迭代建模思路。

ROC AUC:在Facebook Marketplace,我们定期收集人类评级数据以评估搜索引擎的质量。人类评级评估是在公开可见的产品上进行的,查询数据在评估程序开始之前被去标识化和聚合。给定一组预先选定的搜索查询,通常有成千上万个,我们抓取搜索引擎的结果并发送给人类评估员进行评估:1表示满足查询搜索意图的相关文档,0表示不相关的。这为我们提供了一个带有标签的(查询,文档)对的评估数据集。有了推断出的查询和文档嵌入的余弦相似度作为分数,我们计算ROC AUC。ROC AUC在训练期间用作早期停止的验证指标,并且在模型训练后用作离线评估指标。人类评级数据帮助我们评估对相关性和搜索质量的潜在影响。

KNN召回@K:另一方面,我们通过KNN召回和精确度评估对在线参与度的潜在影响。KNN召回@K是一个离线评估指标,用于在训练模型后计算评估数据集。我们使用数周的在线参与数据(定义在3.2节中的in-conversation)来训练我们的模型,并在将来看不见的日子的数据上进行评估:给定一个经过训练的双塔模型和一个评估数据集,推断查询嵌入和文档嵌入。给定查询嵌入,我们使用Faiss(Johnson等人[16])K最近邻来检索文档嵌入空间中与N个相似的文档,并检查原始查询的真文档是否在检索到的前K个文档中。我们观察到KNN召回@K指标与基于嵌入的检索的在线性能密切相关。

3.5 加快模型推理

在Facebook,我们的系统需要处理大量的QPS并以闪电般的速度为我们庞大的用户群提供服务。搜索查询由用户实时请求,我们期望在几百毫秒内返回结果。查询侧模型需要足够快以满足系统要求。因此,我们对各种变压器架构进行了实验,以处理延迟和准确性之间的权衡。我们对查询塔中的两个XLM模型进行了实验:一个有2层,4个注意力头和128个句子嵌入维度,另一个有3个编码器层,4个注意力头和256个句子嵌入维度。我们发现前者的P99延迟为1.5ms,而后者的P99延迟为3.5ms,而性能提升很小。我们将查询序列长度限制在Marketplace搜索中所有查询长度的99百分位。我们使用了0.1的dropout和3倍句子嵌入维度的前馈嵌入维度。我们为所有实验使用了一个大小为150k的SentencePiece词汇表。文档塔模型对执行速度的要求较低,因为文档侧嵌入可以离线预先计算,或者在文档创建后近实时计算,然后输入到搜索系统后端。我们在第4节中分享了更多关于服务系统优化的细节。我们还利用Torch即时编译(JIT)来加速我们的推理。

3.6 不同模态的融合

我们尝试了各种方法来混合不同的模态,例如文本模态和图像模态。默认方法是简单的注意力融合,如公式1所述。我们称这种方法为基线模态处理。梯度混合[26]是一种优化技术,用于在多模态设置中平衡不同模态,并减少对主导模态的过度拟合。在梯度混合中,我们训练M+1个模型:M个单模态模型和一个完整的多模态模型,其中M是模态的数量。我们为每个模型计算损失,并以估计的权重作为最终损失的加权和。背后的直觉是让模型即使在模态不出现时也能学习,使模型对稀疏输入特征更加稳健。我们通过一次保持一个塔具有全部模态,将梯度混合扩展到双塔架构。例如在图2中,我们说查询塔有m=2个模态:查询和国家;文档塔有n=3个模态:标题、描述和图像。然后我们得到以下公


image.png


模态是一个松散定义的术语。我们可以将每个输入特征通道视为一个单独的模态。那样的话,在图2中,查询塔有m=3个模态,文档塔有n=5个模态。我们也可以将相关特征组合在一起作为一个模态。例如,如果产品描述特征缺失,那么原始文本和描述字符三元组都不出现。我们可以将这两个特征组合在一起。然后,在文档塔中,我们只有n=3个模态:标题、描述和图像。我们在表1中分享了我们在梯度混合上的实验结果。我们没有观察到使用个体特征通道的梯度混合在离线指标上有统计上的显著改进,并且观察到分组特征梯度混合在ROC AUC上提供了+0.91%的性能提升,梯度混合仅在训练期间应用,并且在推理期间我们像往常一样运行完整的多模态模型。

3.7 模型可解释性

3.7.1 XLM编码器是否为查询塔增加价值? 一个常问的问题是,对于查询塔是否有用XLM编码器。有人可能会认为查询通常是短语,对于Marketplace来说,查询是头部沉重的(大部分流量由一小套查询主导)。直观地说,字符三元组可能已经足够代表查询了。我们使用注意力权重来探索这一问题的答案。在查询塔中,我们在查询字符三元组通道和查询XLM编码器通道之间有一个注意力机制。注意力权重(总和为1)在公式1中制定。我们提取这些注意力权重,并尝试解释模型更关注哪个特征。我们发现XLM编码器的平均注意力权重为0.64,而EmbeddingBagEncoder为0.36。当我们将注意力权重作为查询长度的函数进行绘制时,我们发现模型在查询长度小于5个字符时更关注字符三元组,但XLM编码器的权重在更长的查询中占主导地位。

3.7.2 特征重要性。 我们认为双塔模型更像是一个“搜索”问题,而不是一个“分类”问题。因此,我们提出了一种不同的方法来计算双塔模型的特征重要性,即在保持另一个不变的情况下,在塔内计算特征重要性。我们使用一种称为特征消融的特征重要性技术 - 其中每个输入特征被替换为基线(零张量,或来自其他随机训练点的特征值),并计算输出的变化。我们在表2中展示了特征重要性结果。正如我们所看到的,XLM在两个塔的所有文本特征中占主导地位。另一方面,字符三元组特征也提供了非常显著的增益。这与我们在第3.7节中的研究一致,即字符三元组特征对短查询的贡献最大。在文档塔中,我们使用了来自GrokNet [2]的预训练图像嵌入,这是Facebook最先进的图像识别系统。从表2中我们可以看到,图像模态为模型提供了重要的价值。此外,我们使用了深度集 [29] 融合多个产品的图像,它特别对于像车库销售这样在一个列表中出售多个产品的产品提供了额外的好处。

4. 系统架构

我们现在描述了Que2Search的系统架构,这是Facebook部署的大规模产品理解系统,用于Marketplace。Que2Search已投入生产,并旨在实时创建的产品上运行。模型推理在称为Predictor的机器云中计算。Predictor提供了部署模型的功能,并提供了一个API来调用模型与一组输入特征。Predictor是一个云服务,可以根据需要进行扩展。给定对Predictor的调用,查询嵌入在1.5毫秒的P99内计算,文档嵌入在7毫秒内计算。我们使用Unicorn存储产品嵌入,连同其他产品索引,用于搜索检索和排名。文档侧模型服务。在产品创建和更新时,将对Predictor进行异步调用,以生成其产品嵌入,并将嵌入向量实时更新到搜索索引中,以准备产品进行检索和排名。换句话说,当搜索查询发出时,产品嵌入已经被预先计算并索引,这使得在许多产品候选中计算查询产品相似度变得可行。此外,Unicorn进一步聚类和量化[16]嵌入空间以加速计算。我们的基础设施还支持向后填充旧产品的嵌入。在部署了新模型之后,通常在24小时内将嵌入回填到足够数量的文档的搜索索引中,以进行实验。查询时间模型服务。在推理时,查询流程遵循调用我们的后端自然语言理解服务(NLP服务)的路径,该服务实时调用Predictor服务。NLP服务将嵌入缓存在内存中以加快服务响应速度,并节省Predictor计算。然后查询嵌入被传递给Unicorn搜索引擎后端进行产品检索。Unicorn搜索引擎能够进行近似最近邻(ANN)检索和布尔约束,这意味着我们可以,例如,要求检索与查询最相关/匹配的产品,同时要求产品在用户指定位置的50英里半径内,以及其他传统术语匹配表达式。结果然后传回几个排名阶段。我们在所有排名阶段使用两塔模型产生的余弦相似度分数作为排名特征。

5. 消融研究

我们进行了线下消融研究,以确认每一步的有效性。我们的基线模型[14]使用深度和宽度架构,并在产品的文本属性上应用字符三元组特征;该模型已在生产中部署,并取得了生产收益。在表3中,我们分享了比较新模型和功能添加的消融研究结果。我们看到,添加基于XLM/XLM-R的原始文本特征转换器显著提高了批量Recall@1(参见第3.4节)。类似的影响来自图像特征,我们应用了多达五个产品图像的深度集合融合[29]。文本转换器和图像特征每个都提供了独立的值;文本转换器和图像特征的联合引入使批量Recall@1相对提高了9.23%。与连接融合相比,塔模态上的简单注意力融合(公式1)提高了0.15%;在产品文本字段上使用共享XLM-R编码器提供了额外的0.18%改进(见表3)。Que2Search双塔模型还在人类评级数据集上显著提高了ROC AUC。评估结果如表4所示。图像和文本特征都提供了额外的价值,其中原始文本的XLM编码器贡献最大,ROC AUC绝对提高了2.1%。第二大贡献者来自课程训练,ROC AUC提高了0.8%绝对值(参见第3.3节)。XLM模块与其他模型部分的不同学习率(参见第3.1节)有助于进一步提高质量,相对提高了1%。在文档塔中添加分类任务头(参见第3.1节)在ROC AUC上提供了0.61%的相对改进。使用分组特征的梯度混合(参见第3.7节)使模型对模态缺失的情况更加鲁棒,并在ROC AUC上提供了额外的0.91%相对改进。总之,Que2Search比现有的Facebook产品理解系统在绝对ROC AUC上提高了5%以上。

6. 部署经验

我们在Facebook Marketplace上部署了Que2Search,每天处理数以亿计的产品搜索。此外,我们通过将其作为Facebook Marketplace的Embedding-based Retrieval和排名栈的一个有机组成部分进行集成,通过各种优化在精度、召回率、CPU使用量和延迟方面实现了可扩展性。在线A/B测试表明,Que2Search使搜索产品参与度增加了4%以上,其中约2.8%来自语义检索,1.24%来自排名。表5显示了不同技术对搜索产品参与度增益的更详细分解。

6.1 基于嵌入的检索

随着Que2Search的引入,我们能够使用Unicorn的原生支持进行更多基于语义的检索(EBR)。更具体地说,如第4节所述,我们将查询塔模型部署到NLP服务以实时生成查询嵌入,并将产品塔模型部署在异步更新路径上,以便在产品创建和更新时更新Unicorn索引。当用户发出产品搜索时,其搜索查询将被转换为嵌入向量,以在产品嵌入空间中执行ANN搜索,使用Unicorn的NN-operator检索余弦距离在阈值内的产品作为结果。

6.2 检索没有万能钥匙

注意到我们将Que2Search作为整个Marketplace搜索检索的一个有机组成部分进行部署,而不是将其作为唯一的搜索检索手段。整个检索过程的其他关键组件包括与ANN搜索语义并行的传统基于标记的检索,以及其他可能的约束,如位置、社交[13]和产品类别。这是使用Unicorn的查询语言[8]无缝完成的(即,ANN和基于标记的检索在OR下组织,约束被分组到一个高级别的AND中)。从经验上,我们发现将EBR视为解决语义匹配的组件是有益的,而不是将其视为解决所有检索问题的唯一解决方案。以下是几个原因:

-(1)尽管Que2Search具有位置感知能力,但在ANN搜索中很难指定明确的位置约束,这对于像Facebook Marketplace这样的本地商务搜索引擎至关重要

  • (2)ANN搜索无法处理用户选定的过滤器,这是任何商务搜索引擎的关键功能
  • (3)由于性能问题,ANN搜索很难做到穷尽,而基于标记的检索提供了一种廉价的替代方案,可以更全面地覆盖简单案例。

6.3 精度、召回率、CPU使用量和延迟

在部署Que2Search时,需要优化的维度包括精度、召回率、CPU使用量和延迟。在Unicorn的NN-operator方面,它们可以转化为两个超参数 - n_prob和raduis。由于Unicorn采用聚类和产品量化方法[14, 16],要扫描的簇的数量决定了ANN搜索的穷尽程度,由n_prob控制。通常,扫描的簇越多,精度越高,但CPU使用量也越大。当扫描到一个产品时,会计算其与查询向量的余弦距离。然后raduis参数控制阈值以确定是否检索此产品。尽管可以使用在线A/B测试对超参数进行网格搜索,但我们希望最小化用户影响,尤其是在参数选择不当时会降低用户体验。因此,我们使用黄金查询集来模拟检索,以减少在线A/B测试前的合理良好候选数量。黄金集包括使用分层抽样的搜索查询对Marketplace搜索进行抓取的搜索结果。我们还要求评估员判断结果是否相关。有了这个黄金集,我们可以模拟使用不同的raduis的检索,并通过检查返回的相关数量来确定检索的侵略性。然而,在线A/B测试仍然至关重要,因为除了需要衡量真正的用户参与度外,有时CPU使用量和延迟很难准确模拟,因为它们与用户行为密切相关。

6.4 优化连续分页

关于用户行为如何影响CPU使用量度量的一个关键观察是围绕连续分页的,这是指用户不断滚动搜索结果页面以触发更多检索请求,以便可以展示更多产品。显然,如果用户对顶部结果(等同于,第一个检索请求提供了很好的精度)感到满意,我们将节省CPU使用量,因为任何随后的请求将不需要被触发。然而,我们也知道,用户对第一个请求的延迟非常敏感 - 如果在一段时间内没有显示结果,整个搜索可能会被放弃。这意味着我们不能为了精度而使第一个请求过于昂贵。总结来说,连续分页可以作为权衡精度、召回率和CPU使用量的杠杆,但受到延迟等限制的约束。有了这个观察,我们为第一个请求启用了保守的n_prob和raduis配置的EBR,以便我们可以保持对延迟的高门槛,并使随后请求中的EBR更加昂贵,以进一步优化参与度。基于在线A/B测试结果,我们发现这种动态ANN配置与始终保持相同配置相比,产生了相同的参与度增益,但大大减少了CPU使用周期和延迟。实际上,如果没有这种优化,我们可能无法在生产中启用Que2Search,因为延迟问题。

Note: 首页请求,翻页不触发查询,需要结合查询缓存技术。

Note: 这里一个有价值的经验: 作者采用了动态ANN参数的方式,第一个请求的时候关注性能,弱化准召,可以调整n_prob,radius实现;后续翻页的请求的时候,则可以在一定时延约束下,更关注准召。

6.5 搜索排序

根据表4,我们知道双塔模型的查询-产品余弦相似度分数是人类评级数据集的良好预测指标。鉴于在检索阶段就可以得到相似度分数,我们也将其暴露给搜索排序以进一步利用Que2Search。Facebook Marketplace的搜索排名遵循两阶段计划,在该计划中,轻量级GBDT排序器在各个索引服务器实例上运行,以从每个分片中选择最佳结果,更昂贵的DLRM类模型用于进一步选择最佳结果。为了在排序中利用Que2Search,我们简单地将分数添加到两个阶段的排序中。我们检查了特征重要性,并发现余弦距离特征在两个阶段都是最重要的,并且在线A/B测试表明,这种简单的特征添加产生了统计上显著的参与度改进,如表5所示。

Note: 向量化召回的算分应用到后续的排序链路,提升排序模型效果。

6.6 失败的教训

部署Que2Search以提高搜索质量是一个试错过程,我们遇到了很多最初看起来违反直觉的现象。精确度很重要:精确度显然在各种机器学习任务中都非常重要,但我们不能仅用召回率作为搜索检索设置中的唯一标准,这一点不太直观。换句话说,我们发现放宽ANN搜索的阈值可能会产生更糟的结果,尽管理论上,它不应该影响检索到的总的好结果的数量。进一步分析表明,这是由于检索和排名模型之间的不一致性 - 我们的排名模型无法处理通过更宽松的阈值检索到的噪声结果。提高多阶段模型之间的一致性本身是一个研究课题[5, 28],我们不会在这里详细说明。最终,我们只是进行了在线和离线的参数扫描,以确定最佳阈值。相关性不够:提高检索和排名模型之间一致性的一个简单方法是简单地使用双塔模型的余弦相似度作为排名分数。这种方法的一个好处是,它保证了所有由于更宽松的阈值而检索到的结果都可以排在底部。实际上,我们通过将基于GBDT的第一阶段模型替换为余弦相似度进行了实验,尽管我们发现NDCG的相关性有了显著提高,但在线参与度却大幅下降。这可能是因为双塔模型是被训练来优化查询-产品相似性,而不是优化参与度,而GBDT模型更注重参与度。尽管可以将参与度特征添加到双塔模型中,但这不是一个微不足道的扩展,因为我们的许多重要参与度特征是基于搜索者和产品信号的手工调整的密集特征,这违反了双塔模型的独立/后期融合属性。

Note: 在召回环节,离线的Precision同样很重要 。召排不一致性,对最终的转化效果有影响。

Note: 做召回模型,只保证相关性远远不够,需要关注多种指标!!!

7. 结论

我们介绍了构建一个全面的查询和产品理解系统Que2Search的方法。我们介绍了多任务和多模

态训练的创新思想,以学习查询和产品表示。通过Que2Search,我们实现了超过5%的绝对离线相关性改进和超过4%的在线参与度提升。我们分享了在搜索用例中调整和部署基于BERT的查询理解模型的经验,并实现了99百分位的1.5毫秒推理时间。

文章主要参考文献:

  1. Huang et al. [14]:介绍了Facebook搜索中的Embedding-based Retrieval方法。
  2. Lample and Conneau [17]:提出了XLM编码器,用于跨语言的文本特征转换。
  3. Conneau et al. [7]:XLM-R,适应BERT方法于多语言应用。
  4. Bell et al. [2]:提出了GrokNet,用于产品图像理解。
  5. Zaheer et al. [29]:提出了Deep Sets,用于处理多模态数据。

后记

如果您对我的博客内容感兴趣,欢迎三连击(点赞,关注和评论),我将持续为您带来计算机人工智能前沿技术(尤其是AI相关的大语言模型,深度学习,计算机视觉相关方向)最新学术论文及工程实践方面的内容分享,助力您更快更准更系统地了解 AI前沿技术

目录
相关文章
|
2月前
|
机器学习/深度学习 存储 自然语言处理
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)
36 0
|
iOS开发
|
前端开发 JavaScript 容器
【React高级技术】合成事件以及 Test Utilities测试框架在Facebook内部进行测试
【React高级技术】合成事件以及 Test Utilities测试框架在Facebook内部进行测试
|
算法 vr&ar
拒绝晕眩呕吐,Facebook 公布 VR 全景视频稳定技术
VR 晕动症是一个一直未能很好解决的问题,除了硬件方面未能取得突破外,软件部分也是一个原因,特别是 VR 全景视频,如果使用手持式的全景相机拍摄,画面的抖动会进一步加速 VR 晕动症的产生。
216 0
拒绝晕眩呕吐,Facebook 公布 VR 全景视频稳定技术
|
SQL 机器学习/深度学习 人工智能
顶尖架构师能从Google、Facebook、Netflix等公司学到哪些技术?
  架构设计到底是做什么?每个人都有不同的答案,毕竟在不同的时间,不同的系统层级,不同的需求背景上,架构设计的任务都有所不同。那么换另外一个问题,如何成为顶尖的架构师?   先使用程序员的拆分技能:成就优秀需要划分两个阶段,先成为普通的架构师,然后再想办法成就优秀。   虽然 2022 年已经过了六分之一,但我们的新年也就刚开始,常言道种树最好的时间是十年前,其次是现在,学习架构也是一样,希望以下的学习小结可以给你帮助。
204 0
|
机器学习/深度学习 人工智能 大数据
|
机器学习/深度学习 算法 决策智能
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
214 0
下一篇
DataWorks