在诸如Facebook等社交网络中进行搜索所面临的挑战与传统网页搜索不同:除了查询文本外,还需考虑搜索者的上下文以提供相关结果。用户的社交图谱是这一上下文的组成部分,也是Facebook搜索的独特之处。尽管基于嵌入的检索(EBR)已在网页搜索引擎中应用多年,但Facebook搜索此前仍主要基于布尔匹配模型。
本文中,我们探讨了将EBR应用于Facebook搜索系统的技术。我们提出了统一嵌入框架,用于建模个性化搜索的语义嵌入;并设计了基于倒排索引的典型搜索系统中支持EBR的服务架构。此外,我们分享了以下端到端系统优化的实践经验:
我们还针对建模中的两个高级议题(如难例挖掘与集成嵌入)展开研究,最终通过在线A/B实验验证了EBR在Facebook搜索垂直领域的显著指标提升。本文的实践经验可为搜索引擎中开发基于嵌入的检索系统提供参考。
搜索引擎一直是帮助人们访问在线海量信息的重要工具。过去几十年中,各种技术得到了发展,以提升搜索质量,特别是在包括 Bing 和 Google 在内的网络搜索引擎中。由于从查询文本中准确计算搜索意图并表示文档的语义含义较为困难,搜索技术主要依赖于各种词项匹配方法[1],这些方法在关键词匹配能够解决的情况下表现良好。然而,对于语义匹配[12]——即处理与查询文本不完全匹配但能满足用户搜索意图的结果——仍然是一个具有挑战性的问题。
近年来,深度学习在语音识别、计算机视觉和自然语言理解[10]领域取得了重大进展。其中,嵌入(embedding),也称为表z征学习(representation learning),已被证明是促成这些成功的重要技术[2]。本质上,嵌入是一种将稀疏的 ID 向量表示为密集特征向量的方法,因其通常能够学习语义而被称为语义嵌入。一旦嵌入被学习,它可以作为查询和文档的表示,应用于搜索引擎的各个阶段。由于该技术在计算机视觉和推荐系统等其他领域取得了巨大成功,它已成为信息检索社区和搜索引擎行业研究的活跃主题,被视为下一代搜索技术[13]。
一般来说,搜索引擎包括一个召回层(recall layer),其目标是以低延迟和低计算成本检索相关文档,通常称为检索(retrieval),以及一个精度层(precision layer),其目标是通过更复杂的算法或模型将最符合用户需求的文件排在最前面,通常称为排名(ranking)。虽然嵌入可以应用于两个层,但它在召回层通常有更多机会发挥作用,因为这是系统的最底层,常常是瓶颈。嵌入在检索中的应用被称为基于嵌入的检索(embedding-based retrieval 或 EBR)。简而言之,基于嵌入的检索是一种使用嵌入表示查询和文档的技术,然后将检索问题转化为嵌入空间中的最近邻(nearest neighbor, NN)搜索问题。
在搜索引擎中,EBR 是一个具有挑战性的问题,因为考虑的数据规模巨大。与通常每会话处理数百个文档的排名层不同,召回层需要处理搜索引擎索引中的数十亿甚至数万亿个文档。巨大的规模对嵌入的训练和服务的挑战巨大。其次,与计算机视觉任务中的基于嵌入的检索不同,搜索引擎通常需要在召回层同时结合基于嵌入的检索和基于词项匹配的检索来为文档评分。
作为社交搜索引擎,Facebook 搜索相比传统搜索引擎具有独特挑战。在 Facebook 搜索中,搜索意图不仅取决于查询文本,还受发出查询的用户及其上下文的重大影响。因此,Facebook 搜索中的基于嵌入的检索并非信息检索社区积极研究的文本嵌入问题[13]。相反,它是一个更复杂的问题,需要综合理解文本、用户和上下文。
为了在 Facebook 搜索中部署基于嵌入的检索,我们开发了解决建模、服务和全栈优化的方法。在建模方面,我们提出了统一嵌入(unified embedding),这是一个双边模型,其中一方是包含查询文本、搜索者和上下文的搜索请求,另一方是文档。为了有效训练模型,我们开发了从搜索日志中挖掘训练数据并从搜索者、查询、上下文和文档中提取特征的方法。为了实现快速模型迭代,我们采用了一个离线评估集上的召回指标来比较模型。
为搜索引擎构建检索模型具有其独特的挑战,例如如何为模型构建一个具有代表性的训练任务以有效且高效地学习。我们探索了两个方向:困难样本挖掘(hard mining)以解决代表性学习和检索任务的有效性挑战,以及嵌入集成(ensemble embedding),通过将模型分成多个阶段来实现不同阶段的召回和精度权衡。
在模型开发之后,我们需要开发方法来在检索堆栈中有效且高效地服务模型。虽然将现有检索和嵌入 KNN 的候选结果组合起来的系统构建起来很简单,但我们发现这并不理想,因为有几个原因:1) 我们的初步实验显示其性能成本巨大;2) 由于双重索引的存在,维护成本高;3) 两个候选集可能存在显著重叠,使整体效率低下。因此,我们开发了一个混合检索框架,将嵌入 KNN 和布尔匹配(Boolean matching)集成在一起,为检索评分文档。为此,我们使用了 Faiss [9] 库进行嵌入向量的量化,并将其与基于倒排索引的检索集成,构建了一个混合检索系统。除了解决上述挑战外,该系统具有两大优势:1) 它实现了嵌入和词项匹配的联合优化,以解决搜索检索问题;2) 它支持受词项匹配约束的嵌入 KNN,不仅有助于解决系统性能成本问题,还提高了嵌入 KNN 结果的精度。
搜索是一个多阶段排名系统,其中检索是第一阶段,随后是各种排名和过滤模型。为了全面优化系统以返回新的好结果并抑制新的坏结果,我们进行了后期优化。特别是,我们将嵌入整合到排名层,并建立了一个训练数据反馈循环,主动学习识别基于嵌入检索的良好和不良结果。图 1 是基于嵌入的检索系统的示意图。我们在 Facebook 搜索的垂直领域上评估了 EBR,线上 A/B 实验中观察到显著的指标提升。
本文结构如下。我们从建模开始,在第 2 节和第 3 节中介绍我们的损失函数、模型架构、训练数据和特征工程解决方案。接下来,我们在第 4 节讨论模型服务和系统实现的细节。我们在第 5 节讨论我们开发的后期优化技术,以充分发挥基于嵌入检索的端到端潜力。最后,我们在第 6 节致力于选定的高级建模技术主题,并在第 7 节得出结论。
我们将搜索检索任务表述为一个召回率优化问题。具体来说,给定一个搜索查询,其目标结果集 T = {t1, t2, ... tN},以及模型返回的前 K 个结果 {d1, d2, ... dK},我们希望通过前 K 个结果最大化召回率。
我们希望通过前 K 个结果最大化召回率。目标结果是基于特定标准与给定查询相关的文档。例如,这些结果可能是用户点击的结果,或根据人工评分判定的相关文档。
我们将召回率优化表述为一个基于查询与文档之间计算距离的排序问题。查询和文档通过神经网络模型编码为密集向量,我们使用余弦相似度作为距离度量。我们提出使用三元组损失 [14] 来近似召回率目标,以训练神经网络编码器,也称为嵌入模型。
虽然语义嵌入在信息检索中通常被表述为文本嵌入问题,但对于 Facebook 搜索来说这是不够的。Facebook 搜索是一个个性化搜索引擎,不仅考虑文本查询,还考虑搜索者的信息以及搜索任务中的上下文,以满足用户个性化的信息需求。以人员搜索为例,虽然 Facebook 上可能有数千个名为“John Smith”的用户 profile,但用户用“John Smith”查询搜索的实际目标很可能是他们的朋友或熟人。为了建模这个问题,我们提出了统一嵌入方法,该方法在生成嵌入时不仅考虑文本,还考虑用户和上下文信息。
虽然我们的最终目标是通过在线 A/B 测试实现端到端的质量改进,但在进行在线实验之前,开发离线指标以快速评估模型质量并隔离复杂在线实验设置中的问题非常重要。我们提议在整个索引中运行 KNN 搜索,然后使用方程 1 中定义的 recall@K 作为模型评估指标。具体来说,我们采样了 10,000 个搜索会话,收集查询和目标结果集对作为评估集,并报告了 10,000 个会话的平均 recall@K。
其中 (D(u, v)) 是向量 (u) 和 (v) 之间的距离度量,(m) 是正样本对与负样本对之间强制执行的间隔(margin),(N) 是从训练集中选取的三元组总数。这一损失函数的直觉是将正样本对与负样本对通过一个距离间隔分隔开来。我们发现调整间隔值非常重要——最优间隔值在不同的训练任务中差异很大,不同的间隔值会导致 5-10% 的 KNN 召回率变化。
我们认为,使用随机样本形成负样本对来构建三元组损失可以近似召回率优化任务。原因如下。如果我们在训练数据中为每个正样本采样 (n) 个负样本,模型将在候选池大小为 (n) 时优化首位(top one)的召回率。假设实际服务中的候选池大小为 (N),我们近似优化的是 top K≈N/nK \approx N/nK \approx N/n的召回率。在第 2.4 节中,我们将验证这一假设,并提供不同正样本和负样本标签定义的比较。
为了学习优化三元组损失的嵌入,我们的模型包含三个主要组件:查询编码器 EQ=f(Q),它生成查询嵌入;文档编码器 ED=g(D),它生成文档嵌入;以及相似性函数 S(EQ,ED),它生成查询 (Q) 和文档 (D) 之间的得分。编码器是一个神经网络,将输入转化为低维密集向量,也称为嵌入。在我们的模型中,这两个编码器 f(⋅) 和 g(⋅) 默认是两个独立的网络,但可以选择共享部分参数。至于相似性函数,我们选择了余弦相似性,因为它是嵌入学习中常用的方法之一 [7]:
因此,在方程 2 中使用的损失函数的距离定义为余弦距离,即 1−cos(EQ,ED)。
编码器的输入是统一嵌入模型与传统文本嵌入模型的区别所在。统一嵌入模型编码文本、社交和其他有意义的上下文特征,分别表示查询和文档。例如,对于查询端,我们可以包括搜索者的位置及其社交关系;而对于文档端,以 Facebook 群组搜索为例,我们可以包括关于群组的聚合位置和社交集群信息。
大多数特征是高基数的分类特征,可以是独热(one-hot)或多热(multi-hot)向量。对于每个分类特征,会插入一个嵌入查找层来学习并输出其密集向量表示,然后再输入到编码器中。对于多热向量,会对多个嵌入进行加权组合,以生成最终的特征级嵌入。图 2 展示了我们的统一嵌入模型架构,我们将在第 3 节中进一步讨论特征工程。
在搜索排名系统中为检索任务定义正样本和负样本标签是一个非 trivial 的问题。在此,我们基于模型召回率指标比较了几种选择。对于负样本,我们在初步研究中尝试了以下两种负样本选项,同时以点击作为正样本:
• 随机样本:对于每个查询,我们从文档池中随机采样文档作为负样本。 • 未点击的曝光:对于每个查询,我们在同一会话中随机采样那些曝光但未被点击的结果作为负样本。
使用未点击曝光作为负样本训练的模型,其模型召回率显著低于使用随机负样本的模型:在人物嵌入模型中,召回率绝对下降了 55%。我们认为这是因为这些负样本偏向于“困难案例”,它们可能在某些或多个因素上与查询匹配,而索引中的大多数文档是“简单案例”,完全不匹配查询。如果所有负样本都是这类困难负样本,会改变训练数据对真实检索任务的代表性,可能会对学习到的嵌入引入非 trivial 的偏差。
我们还实验了挖掘正样本的不同方法,并得到了以下有趣的发现: • 点击:直观上,使用点击的结果作为正样本是合理的,因为点击表明用户反馈该结果很可能匹配他们的搜索意图。 • 曝光:这个想法是将检索视为对排序器的近似,但执行速度更快。因此,我们希望设计检索模型,学习返回与排序器高排名的结果相同的集合。从这个意义上讲,所有展示或曝光给用户的结果对检索模型的学习来说都是同等正样本。
我们的实验结果显示,这两种定义的效果相当;基于点击和基于曝光训练的模型,在数据量相同的情况下,召回率相似。此外,我们尝试用基于曝光的数据增强基于点击的训练数据,但并未观察到比仅基于点击的模型有额外的提升。这表明添加曝光数据并未提供额外价值,模型也没有因训练数据量的增加而受益。
上述研究表明,使用点击作为正样本和随机样本作为负样本可以提供合理的模型性能。在此基础上,我们进一步探索了困难挖掘策略,以提高模型区分相似结果的能力。我们将在第 6.1 节中提供更多细节。
统一嵌入模型的一个优势在于,它可以结合文本以外的各种特征来提升模型性能。我们在不同领域中一致观察到,统一嵌入比文本嵌入更有效。例如,将事件搜索从文本嵌入切换到统一嵌入时,召回率提高了 18%;对于群组搜索,召回率提高了 16%。统一嵌入的有效性高度依赖于识别和构建信息丰富的特征的成功。表 1 显示了在群组嵌入模型中(以文本特征为基准)逐一添加每个新特征类别所带来的增量改进。在本节中,我们将讨论几个对模型主要改进贡献显著的重要特征。
文本特征。字符 n-gram [7] 是表示文本嵌入的常用方法。相比词 n-gram,它的优势有两方面。首先,由于其词汇量有限,嵌入查找表的大小较小,可以在训练期间更有效地学习。其次,子词表示对查询端(例如拼写变体或错误)和文档端(由于 Facebook 内容库存庞大)遇到的词汇外问题具有鲁棒性。我们比较了使用字符 n-gram 和词 n-gram 训练的模型,发现前者能生成更好的模型。然而,在字符三元组的基础上,额外包含词 n-gram 表示还能提供小幅但一致的模型改进(召回率提升 1.5%)。需要注意的是,由于词 n-gram 的基数通常非常高(例如查询三元组为 3.52 亿),需要使用哈希来减小嵌入查找表的大小。但即使存在哈希冲突的缺点,添加词 n-gram 仍然带来了额外的收益。
对于 Facebook 实体,提取文本特征的主要字段是人物实体的名称或非人物实体的标题。相比布尔词匹配技术,我们发现仅使用文本特征训练的嵌入特别擅长处理以下两种场景: • 模糊文本匹配。例如,模型能够学会将查询“kacis creations”与“Kasie’s creations”页面匹配,而基于词的匹配无法做到。 • 可选化。对于查询“mini cooper nw”,模型可以通过丢弃“nw”作为可选词,学会检索到预期的群组“Mini cooper owner/drivers club”。
位置特征。位置匹配在许多搜索场景中具有优势,例如搜索本地商家、群组或事件。为了让嵌入模型在生成输出嵌入时考虑位置,我们在查询端和文档端特征中添加了位置特征。对于查询端,我们提取了搜索者的城市、地区、国家和语言。对于文档端,我们添加了公开可用的信息,例如管理员标记的明确群组位置。结合文本特征,模型能够成功学习查询与结果之间的隐式位置匹配。表 2 显示了群组搜索中基于文本嵌入模型与文本+位置嵌入模型返回的前几个相似文档的并列比较。我们可以看到,带有位置特征的模型能够学会将位置信号融合到嵌入中,将与来自肯塔基州路易斯维尔搜索者位置相同的文档排名更高。
社交嵌入特征。为了利用丰富的 Facebook 社交图谱改进统一嵌入模型,我们训练了一个单独的嵌入模型,基于社交图谱嵌入用户和实体。这有助于将全面的社交图谱信息整合到统一嵌入模型中,否则该模型可能无法完全获取社交图谱信息。
4.1 ANN
我们将基于倒排索引的 ANN(近似最近邻)搜索算法部署到我们的系统中,因为它具有以下优势。首先,由于嵌入向量的量化,它具有较小的存储成本。其次,它更容易集成到基于倒排索引的现有检索系统中。我们使用了 Faiss 库 [9] 来量化向量,然后在现有的倒排表扫描系统中实现了高效的最近邻搜索。
嵌入量化有两个主要组成部分:一是粗量化,通常通过 K-means 算法将嵌入向量量化为粗略的簇;二是乘积量化 [8],它进行细粒度量化,以实现嵌入距离的高效计算。我们需要调整几个重要参数:
我们构建了一个离线管道来高效调整这些参数。此外,我们需要运行在线实验,从离线调优选出的候选配置中确定最终设置。下面我们将分享从 ANN 调优中获得的技巧和经验教训。
根据扫描文档数量调整召回率:最初,我们比较了在相同 num_cluster 和 nprobe 设置下不同粗量化算法的召回率。然而,通过更多数据分析,我们发现簇是不平衡的,特别是 IMI 算法——大约一半的簇只有少量样本。这会导致在相同的 num_cluster 和 nprobe 设置下扫描的文档数量不同。因此,我们采用了扫描文档数量作为更好的指标来近似 ANN 调优中的性能影响,如图 3 所示。我们使用 1-recall@10 来测量 ANN 准确性,这是从精确 KNN 搜索中获得的前 10 个 ANN 搜索结果的平均召回率。
在模型发生非 trivial 变化时调整 ANN 参数:我们观察到 ANN 性能与模型特性相关。例如,当我们使用基于未点击曝光训练的模型结合集成技术时,发现虽然模型的召回率优于基线,但对两者应用量化后,召回率比基线更差。每当模型训练任务发生非 trivial 变化时(例如添加更多困难负样本),都应考虑调整 ANN 参数。
始终尝试 OPQ:在应用量化之前转换数据通常是有用的。我们实验了 PCA 和 OPQ [5] 来转换数据,并观察到 OPQ 通常更有效,如表 3 和图 3 所示。OPQ 的一个注意事项是:由于它对嵌入进行了旋转,我们可能还需要重新调整 num_cluster 和 nprobe,以保持相似的文档扫描范围。
选择 pq_bytes 为 d/4:乘积量化器将向量压缩为 x 字节代码。x 的选择与嵌入向量的维度 (d) 相关。较大的 x 会提高搜索准确性,但会增加内存和延迟成本。根据经验结果,我们发现当 x>d/4x时,准确性的提升有限。在线调整 nprobe、num_clusters 和 pq_bytes 以了解真实性能影响:虽然离线调优 ANN 算法和参数以理解性能与召回率的权衡很重要,但我们发现在线部署多种 ANN 算法和参数配置,可以更好地了解基于嵌入的检索对真实系统性能的影响。这对于确定容量预算和缩小离线调优的参数搜索范围非常重要。
为了将基于嵌入的检索集成到我们的服务堆栈中,我们在 Unicorn [3](Facebook 大多数搜索产品所依赖的检索引擎)中实现了对最近邻(NN)搜索的一流支持。Unicorn 将每个文档表示为一组术语,这些术语是表达文档二进制属性的任意字符串,通常按照语义进行命名空间划分。例如,居住在西雅图的用户 John 将具有术语 text:john 和 location:seattle。术语可以附带有效载荷。
查询可以是术语上的任何布尔表达式。例如,以下查询将返回名称中包含“john”和“smithe”且居住在西雅图或门洛帕克的所有人:
(and (or (term location:seattle)
(term location:menlo_park))
(and (term text:john)
(term text:smithe)))
复制
为了支持 NN,我们扩展了文档表示形式,使其包括嵌入,每个嵌入都有一个给定的字符串键,并添加了一个 (nn <key> :radius <radius>) 查询操作符,该操作符匹配所有 <key> 嵌入与查询嵌入距离在指定半径内的文档。
在索引时,每个文档嵌入都会被量化为一个术语(表示其粗略簇)和一个有效载荷(表示量化残差)。在查询时,(nn) 会被内部重写为与查询嵌入最近的粗略簇(探针)相关联的术语的 (or) 操作,对于匹配的文档,会检索术语有效载荷以验证半径约束。探针数量可以通过附加属性 :nprobe 指定。通过使用现有原语实现 NN 支持,而不是编写单独的系统,我们继承了现有系统的所有功能,例如实时更新、高效的查询规划和执行,以及对多跳查询的支持(参见 [3])。后者允许我们支持 top-K NN 查询,即不是通过半径匹配,而是选择与查询最近的 K 个文档,然后评估查询的其余部分。然而,通过实验研究,我们发现半径模式可以更好地平衡系统性能和结果质量。一个可能的原因是,半径模式支持受限的 NN 搜索(受匹配表达式的其他部分约束),而 top-K 模式提供了一个更宽松的操作,需要扫描整个索引以获得 top-K 结果。因此,我们在当前生产环境中使用基于半径的匹配。
4.2.1 混合检索: 通过将 (nn) 操作符作为我们布尔查询语言的一部分,我们现在可以支持混合检索表达式,任意组合嵌入和术语。这可用于基于模型的模糊匹配,可以改进拼写变体、可选化等问题,同时重用并受益于检索表达式的其他部分。例如,假设一个拼写错误的查询“john smithe”正在寻找西雅图或门洛帕克的一个名叫“john smith”的人,检索表达式将类似于上述内容。
该表达式将无法检索到目标用户,因为术语 text:smithe 无法匹配该文档。我们可以通过 (nn) 操作符为此表达式添加模糊匹配:
(and (or (term location:seattle)
(term location:menlo_park))
(or (and (term text:john)
(term text:smithe))
(nn model-141795009 :radius 0.24 :nprobe 16)))
复制
其中 model-141795009 是嵌入的键。在这种情况下,如果查询(john smithe)嵌入与文档(john smith)嵌入之间的余弦距离小于 0.24,则目标用户将被检索到。
4.2.2 模型服务: 我们以以下方式部署了嵌入模型。在双边嵌入模型训练完成后,我们将模型分解为查询嵌入模型和文档嵌入模型,然后分别部署这两个模型。对于查询嵌入,我们将模型部署在一个在线嵌入推理服务中进行实时推理。对于文档,我们使用 Spark 在离线批处理中进行模型推理,然后将生成的嵌入与其他元数据一起发布到正向索引中。我们还进行了额外的嵌入量化,包括粗量化和乘积量化(PQ),以将其发布到倒排索引中。
为了提高嵌入式检索(EBR)的效率和质量,我们进行了查询和索引选择。我们应用了查询选择技术,以克服过度触发、巨大的容量成本和垃圾内容增加等问题。对于某些查询,我们没有触发 EBR,因为 EBR 在这些查询上的表现较差且无法提供额外价值,例如搜索者寻找之前搜索并点击过的特定目标的简单查询,或者与嵌入模型训练目标明显不同的查询意图。在索引方面,我们进行了索引选择以加快搜索速度。例如,我们仅选择了月活跃用户、近期事件、人气页面和群组。
Facebook 的搜索排名是一个复杂的多阶段排名系统,其中每个阶段逐步优化前一阶段的结果。在这个系统的最底层是检索层,应用了基于嵌入(embedding)的检索技术。检索层的结果随后被一系列排名层进行排序和过滤。每个阶段的模型应针对前一阶段返回的结果分布进行优化。然而,由于当前的排名阶段是为现有的检索场景设计的,这可能导致基于嵌入的检索返回的新结果被现有排名器(rankers)以次优方式排序。为了解决这一问题,我们提出了两种方法:
基于嵌入的检索需要广泛的研究,以持续提升其性能。我们调查了嵌入建模的两个重要领域:困难挖掘和嵌入集成,以继续推进基于嵌入的检索解决方案的最新技术水平。
检索任务的数据空间在文本、语义和社交匹配程度上具有多样化的数据分布,设计一个训练数据集,使嵌入模型能在这样的空间上高效且有效地学习非常重要。为此,困难挖掘是一个主要方向,也是嵌入学习的一个活跃研究领域。然而,大多数研究来自计算机视觉领域,且针对分类任务 [6, 14, 16, 17],而搜索检索没有“类别”的概念,因此是一个独特的问题,现有的技术并不一定适用。在这个方向上,我们将解决方案分为两部分:困难负样本挖掘和困难正样本挖掘。
6.1.1 困难负样本挖掘(HNM)在分析我们用于人物搜索的嵌入模型时,我们发现给定查询后嵌入返回的前 K 个结果通常具有相同的名称,而模型并不总能将目标结果排在其他结果之前,尽管社交特征已经存在。这促使我们相信,模型尚未能正确利用社交特征,很可能是因为负训练数据过于简单——它们是随机样本,通常具有不同的名称。为了使模型更好地区分相似结果,我们可以在训练中使用嵌入空间中更接近正样本的样本作为困难负样本。
在线困难负样本挖掘:由于模型训练基于小批量更新,可以在每个批次中以动态但高效的方式选择困难负样本。每个批次包含 (n) 个正样本对 {(q(i),d+(i))}i=1n。然后,对于每个查询 q(i)q^{(i),我们使用所有其他正样本文档 {d+(1),...,d+(j),...,d+(n)∣j≠i}形成一个小的文档池,并选择相似性得分最高的文档作为最困难的负样本,以创建训练三元组。启用在线困难负样本挖掘是我们模型改进的一个主要贡献。它在所有领域中显著且一致地提高了嵌入模型的质量:人物搜索召回率提高 8.38%;群组搜索召回率提高 7%;事件搜索召回率提高 5.33%。我们还观察到,最优设置是每个正样本最多使用两个困难负样本。使用超过两个困难负样本会开始降低模型质量。
在线困难负样本挖掘的一个局限性是,从随机样本中获得任何困难负样本的概率可能较低,因此无法生成足够困难的负样本。接下来,我们将探讨如何基于整个结果池生成更困难的负样本,也称为离线困难负样本挖掘。
离线困难负样本挖掘:离线困难负样本挖掘的步骤如下:
我们进行了广泛的实验,比较了离线困难负样本挖掘和在线困难负样本挖掘。一个可能看似违反直觉的发现是,仅使用困难负样本训练的模型无法超越使用随机负样本训练的模型。进一步分析表明,“困难”模型更注重非文本特征,但在文本匹配方面表现不如“简单”模型。因此,我们调整了采样策略,最终生成了一个能够超越在线 HNM 模型的模型。
第一个洞察是关于困难选择策略。我们发现使用最困难的样本并不是最佳策略。我们比较了从不同排名位置采样的效果,发现从排名 101-500 采样获得了最佳模型召回率。第二个洞察是关于检索任务优化。我们的假设是,训练数据中简单负样本的存在仍然是必要的,因为检索模型需要在包含混合难度级别的数据输入空间上运行,其中大部分是非常简单的负样本。因此,我们探索了几种将随机负样本与困难负样本结合的方法,包括从简单模型进行迁移学习。根据我们的实证研究,以下两种技术显示出最高的有效性:
最后但同样重要的是,在训练数据中为每个数据点详尽计算 KNN 非常耗时,由于计算资源有限,总模型训练时间会变得不现实。为离线困难负样本挖掘算法提供高效的前 K 生成非常重要。近似最近邻搜索在这里是一个实用的解决方案,可以显著减少总计算时间。此外,在一个随机分片上运行 ANN 搜索就足以生成有效的困难负样本,因为我们在训练中仅依赖半困难负样本。
6.1.2 困难正样本挖掘:我们的基线嵌入模型使用点击或曝光作为正样本,这是现有生产环境已经可以返回的。为了最大化基于嵌入的检索的补充收益,一个方向是识别生产环境尚未成功检索但属于正样本的新结果。为此,我们从搜索者的活动日志中挖掘失败搜索会话的潜在目标结果。我们发现,以这种方式挖掘的正样本有助于模型训练。仅使用困难正样本训练的模型可以达到与点击训练数据相似的模型召回率水平,而数据量仅为其 4%。通过将困难正样本与曝光结合作为训练数据,可以进一步提高模型召回率。
我们从困难负样本挖掘(HNM)实验中得知,简单样本和困难样本对于嵌入式检索(EBR)模型训练都很重要——我们需要困难样本来提高模型的精确度,但简单样本对于表示检索空间也同样重要。使用随机负样本训练的模型模拟了检索数据分布,并针对非常大的 (K) 值优化了召回率,但当 (K) 较小时,其在 top (K) 的精确度较差。另一方面,优化精确度的模型(例如,使用未点击曝光作为负样本或离线困难负样本训练的模型)擅长对较小的候选集进行排名,但在检索任务中表现不佳。因此,我们提出通过多阶段方法组合不同难度级别训练的模型,其中第一阶段模型专注于召回率,第二阶段模型则专注于区分第一阶段模型返回的更相似的结果。我们与 [18] 中的级联嵌入训练理念一致,该方法以级联方式集成了一组不同难度级别训练的模型。我们探索了不同形式的集成嵌入,包括加权连接和级联模型,并发现两者都有效。
由于不同模型为(查询,文档)对提供了不同的余弦相似性得分,我们使用余弦相似性的加权和作为度量标准来定义该对的接近程度。具体来说,给定一组模型 {M1,⋯ ,Mn}及其对应的权重 α1,⋯ ,αn>0,对于任意查询 (Q) 和文档 (D),我们定义 (Q) 和 (D) 之间的加权集成相似性得分 Sw(Q,D)为:
其中 VQ,i, 1≤i≤n1 表示模型 MiM_i 对查询 (Q) 的向量表示,UD,i ,1≤i≤n1 表示模型 MiM_i 对文档 (D) 的向量表示。为了服务目的,我们需要将多个嵌入向量集成成单一表示,分别用于查询端和文档端,以满足上述度量属性。我们可以证明,对标准化向量的一侧应用加权乘法即可满足需求。具体来说,我们按以下方式构造查询向量和文档向量:
显然,EQ 和 ED之间的余弦相似性与 Sw(Q,D)S_w(Q, D)成正比。
根据上述内容,我们以第 4 节中描述的相同方式部署了集成嵌入。权重的选择是基于经验的,可以根据评估数据集上的性能来确定。我们探索了第二阶段嵌入模型的几种模型选项。实验表明,使用未点击曝光训练的模型取得了最佳的 kNN 召回率(比基线模型提高了 4.39% 的召回率)。然而,在应用嵌入量化时,与单一模型相比,它的准确性损失更大,因此在线部署时的实际收益减少。我们发现,为了在嵌入量化后获得最佳召回率,最佳策略是将一个相对简单的模型与离线困难负样本挖掘模型进行集成,其中训练负样本的难度级别已被修改和调整。这个集成候选模型在离线时的模型改进略低,但在在线时能够实现显著的召回率提升。
级联模型:与加权集成的并行组合不同,级联模型以串行方式在第一阶段模型的输出上运行第二阶段模型。我们比较了不同的第二阶段模型选项。我们发现,使用未点击曝光训练的模型并不是一个好的候选;总体改进远小于加权集成方法。此外,随着第二阶段模型需要重新排名的结果数量增加,收益逐渐减少。然而,使用离线困难负样本模型作为第二阶段模型,相比基线实现了 3.4% 的召回率提升。它更适合作为级联模型的候选,因为离线 HNM 的训练数据正是基于第一阶段模型的输出构建的。
此外,我们探索了另一种级联模型组合。我们观察到,虽然统一嵌入总体上比文本嵌入具有更高的模型召回率,但由于其关注点转向社交和位置匹配,它产生了新的文本匹配失败。为了增强模型的文本匹配能力,从而提高模型的精确度,我们采用了级联策略:先使用文本嵌入预选文本匹配的候选,然后使用统一嵌入模型重新排名结果,以返回最终的前几个候选。这种方法相比单独使用统一嵌入模型,在在线环境中取得了显著的改进。
将语义嵌入(semantic embeddings)引入搜索检索中具有长期的好处,可以通过利用深度学习研究的进展来解决语义匹配问题。然而,这也是一个极具挑战性的问题,原因包括建模难度、系统实现以及跨堆栈优化的复杂性,特别是在大规模个性化社交搜索引擎中。在本文中,我们介绍了我们在社交搜索中建模语义的统一嵌入(unified embedding)方法,以及在基于经典倒排索引的搜索系统中实现基于嵌入的检索。
实现统一嵌入模型和基于嵌入的检索系统只是第一步。要实现系统端到端的优化,使其在结果质量和系统性能方面表现良好,仍有很长的路要走。我们分享了我们在模型改进、服务算法调整和后期优化方面的经验。我们相信,这些经验将为人们在实际搜索引擎中更快地引入基于嵌入的检索提供宝贵的参考。在生产环境中成功部署基于嵌入的检索为通过利用最新的语义嵌入学习技术持续改进检索质量打开了一扇门。我们介绍了我们在这一方向上的第一步进展和经验教训,特别是在困难样本挖掘(hard mining)和嵌入集成(embedding ensemble)方面。
未来有巨大的机会持续改进系统。未来有两个主要方向可以追求。一方面是深入(go deep)。在建模方面,我们可以应用最新的高级模型,如 BERT [4],或构建特定任务的模型来解决特定问题片段。我们可以在不同阶段深入研究,包括服务算法调整和排名模型改进,通过全栈失败分析(full-stack failure analysis)指导,识别不同堆栈中的改进机会。另一方面是通用的(go universal)。我们可以利用预训练的文本嵌入模型开发一个通用的文本嵌入子模型,应用于不同任务。此外,我们可以开发一个适用于所有用例的通用查询嵌入模型。
[1] Ricardo Baeza-Yates and Berthier Ribeiro-Neto. 2011. Modern Information Retrieval: The Concepts and Technology behind Search (2nd ed.). Addison-Wesley Publishing Company, USA.
[2] Y. Bengio, A. Courville, and P. Vincent. 2013. Representation Learning: A Review and New Perspectives. IEEE Transactions on Pattern Analysis and Machine Intelligence 35, 8 (Aug 2013), 1798–1828.
[3] Michael Curtiss, Iain Becker, Tudor Bosman, Sergey Doroshenko, Lucian Grijincu, Tom Jackson, Sandhya Kunnatur, Soren Lassen, Philip Pronin, Sriram Sankar, Guanghao Shen, Gintaras Woss, Chao Yang, and Ning Zhang. 2013. Unicorn: a system for searching the social graph. Proceedings of the VLDB Endowment 6, 11,1150–1161.
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2018. BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding. CoRR abs/1810.04805 (2018). arXiv:1810.04805 http://arxiv.org/abs/1810.04805
[5] Tiezheng Ge, Kaiming He, Qifa Ke, and Jian Sun. 2013. Optimized Product Quantization for Approximate Nearest Neighbor Search. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR).
[6] Alexander Hermans, Lucas Beyer, and Bastian Leibe. 2017. In Defense of the Triplet Loss for Person Re-Identification. CoRR abs/1703.07737 (2017). arXiv:1703.07737 http://arxiv.org/abs/1703.07737
[7] Po-Sen Huang, Xiaodong He, Jianfeng Gao, Li Deng, Alex Acero, and Larry Heck. 2013. Learning Deep Structured Semantic Models for Web Search Using Clickthrough Data. In Proceedings of the 22nd ACM International Conference on Information and Knowledge Management (CIKM âĂŹ13). Association for Computing Machinery, New York, NY, USA, 2333âĂŞ2338.
[8] Herve Jegou, Matthijs Douze, and Cordelia Schmid. 2011. Product Quantizationfor Nearest Neighbor Search. IEEE Trans. Pattern Anal. Mach. Intell. 33, 1 (Jan.2011), 117âĂŞ128.
[9] Jeff Johnson, Matthijs Douze, and Hervé Jégou. 2017. Billion-scale similarity search with GPUs. arXiv preprint arXiv:1702.08734 (2017).
[10] Yann LeCun, Yoshua Bengio, and Geoffrey E. Hinton. 2015. Deep learning. Nature 521, 7553 (2015), 436–444.
[11] Victor Lempitsky. 2012. The Inverted Multi-Index. In Proceedings of the 2012 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (CVPR âĂŹ12). IEEE Computer Society, USA, 3069âĂŞ3076.
[12] Hang Li and Jun Xu. 2014. Semantic Matching in Search. Now Publishers Inc. Hanover, MA, USA.
[13] Bhaskar Mitra and Nick Craswell. 2018. An Introduction to Neural Information Retrieval. Foundations and TrendsÂő in Information Retrieval 13, 1 (December 2018), 1–126.
[14] Florian Schroff, Dmitry Kalenichenko, and James Philbin. 2015. FaceNet: A unified embedding for face recognition and clustering.. In CVPR. IEEE Computer Society, 815–823. http://dblp.uni-trier.de/db/conf/cvpr/cvpr2015.html#SchroffKP15
[15] Josef Sivic and Andrew Zisserman. 2003. Video Google: A Text Retrieval Approach to Object Matching in Videos. In Proceedings of the Ninth IEEE International Conference on Computer Vision - Volume 2 (ICCV âĂŹ03). IEEE Computer Society, USA, 1470.
[16] Hyun Oh Song, Yu Xiang, Stefanie Jegelka, and Silvio Savarese. 2015. Deep Metric Learning via Lifted Structured Feature Embedding. CoRR abs/1511.06452 (2015). arXiv:1511.06452 http://arxiv.org/abs/1511.06452
[17] Chao-Yuan Wu, R. Manmatha, Alexander J. Smola, and Philipp Krähenbühl. 2017. Sampling Matters in Deep Embedding Learning. CoRR abs/1706.07567 (2017). arXiv:1706.07567 http://arxiv.org/abs/1706.07567
[18] Yuhui Yuan, Kuiyuan Yang, and Chao Zhang. 2017. Hard-Aware Deeply Cascaded Embedding. In The IEEE International Conference on Computer Vision (ICCV).
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。