Facebook将EBR(embedding-based retrieval)与传统的Boolean matching结合。也讨论了不同的优化tricks,ANN调参等等。总体来看,信息量很大,非常值得学习的一篇论文。
以往search大多基于term matching,semantic matching是一个挑战(从语义的角度理解用户的搜索意图)。过去几年,深度学习取得了很大的成功,特征学习( embedding is a way to represent a sparse vector of ids as a dense feature vector)在很多领域十分有效。学习的embeddings可以用于query和documents的特征应用到搜索引擎的多阶段。
搜索引擎包含recall(a recall layer targeting to retrieve a set of relevant documents in low latency and computational cost, usually called retrieval)和precision(a precision layer targeting to rank the most desired documents on the top with more complex algorithms or models, usually called ranking),两层中都可以应用embeddings。
简言之,EBR使用embeddings代表query和document,将搜索的问题转化为向量空间内的NN(nearest neighbor)搜索问题。
EBR同时面临的两个问题,一是搜索的documents量级很大,二是将EBR融入到term matching together score。
Facebook的搜索比传统的搜索面临了不同的挑战,搜索时不仅要考虑query text,还包含了searcher的上下文信息,searcher的社交网络是上下文中比较重要的一部分,具体考虑有text,user,context。
双边模型:1.query text searcher context 2.document 3.离线验证评估
如果有效的构建训练任务呢?We investigated two different directions, hard mining to address the challenge of representing and learning retrieval tasks effectively, as well as ensemble embedding to divide the model in multiple stages where each stage has different recall and precision tradeoff.
有了model和embeddings后,直观上是做embeddings KNN,但是作者发现这并不是最优的选择:
Thereafter, we developed a hybrid retrieval framework to integrate embedding KNN and Boolean
matching together to score documents for retrieval.应用Faiss library 做向量quantization,然后与倒排索引结合构建搜索系统,这样做主要有两点好处:
搜索是一个整体,这段就不翻译了。Search is a multi-stage ranking system where retrieval is the first stage, followed by various stages of ranking and filtering models. To wholly optimize the system to return those new good results and suppress those new bad results in the end, we performed later-stage optimization. In particular, we incorporated embeddings into ranking layers and built a training data feedback loop to actively learn to identify those good and bad results from embedding-based retrieval.
以query对应的topk个结果 d 1 , d 2 , . . . , d k {d_1,d_2,...,d_k} d1,d2,...,dk模型的目标是最大化topk结果的召回率
结果数据可以是用户的点击或者用户的打分。
将上述的召回问题看做query和documents的余弦距离问题。
We propose to use triplet loss to approximate the recall objective to learn the neural network encoder, which is also called embedding model.
上述仅仅是将text embedding,还需要考虑用户的个性化需求,例如,用户搜索"John Smith",可能是想搜索他的朋友或者熟人。To model this problem, we propose unified embedding which considers not only text but also user and context information in deriving embeddings.
我们建议在整个索引中运行KNN搜索,使用recall@K
方程式定义的模型评估指标。对10000个搜索sessions进行抽样,收集评估集的query和目标结果集对,计算10000个sessions的 averagedrecall@K
。
D ( q ( i ) , d ( i ) ) = 1 − S ( Q , D ) D(q^{(i)},d^{(i)}) = 1- S(Q,D) D(q(i),d(i))=1−S(Q,D)
We found that tuning margin value is important – the optimal margin value varies a lot across different training tasks, and different margin values result in 5-10% KNN recall variance.
关于负样本的选择是关键,这里我把原文贴过来
We believe that using random samples to form negative pairs for the triplet loss can approximate the recall optimization task. The reason is as follows. If we sample n negatives for each one positive in the training data, the model will be optimizing for recall at top one position when the candidate pool size is n. Assuming the actual serving candidate pool size is N, we are approximately optimizing recall at top K ≈ N/n. In Section 2.4, we will verify this hypothesis and provide comparisons of different positive and negative label definitions.
主要就是这个图,两个encoder是独立的网络,但部分参数可能共享
正向和负向的数据定义是十分重要的。
在选择点击数据作为positive,negative的数据选择:
从实验结果来看随机样本明显优于非点击的曝光数据。我们认为这是因为这些负面因素偏向于hard cases,可能在一个或多个因素中匹配了query,但是索引中的大多数文档都是根本不匹配查询的 easy cases。如果所有的训练数据都是hard negative,会改变训练数据对实际检索任务的代表性,这可能会给学习的嵌入带来不小的偏差。
作者也尝试了不同的positive mining
结论:使用点击作为积极和随机作为消极可以提供一个合理的模型性能。
unified embedding比单纯的text embedding更有效
文本特征:通常采用基于character n-gram,相比于word n-gram有两点好处:
实验结果也表明character n-gram优于word n-gram,在字符三元组的基础上,补充了单词n-gram表示,这提供了较小但稳定的模型改进。但是,由于单词n-gram的基数通常非常高(例如,对于查询三元组为352M),因此需要使用哈希来减小嵌入查找表的大小。但即使存在hash冲突的缺点,添加单词n-ngrams仍然可以提供额外的收益。
对于一个Facebook实体,主要是人名或者非人的title,单纯使用文本特征训练的embeddings相比于term matching,更擅长以下两点:
位置特征。位置匹配在许多搜索场景中都是有利的,例如搜索本地业务/组/事件。为了使嵌入模型在生成输出嵌入时考虑位置,我们在查询和文档端特征中都添加了位置特征。对于查询端,我们提取了搜索者的城市、地区、国家和语言。对于文档端,我们添加了公开可用的信息,例如管理员标记的显式组位置。结合文本特征,该模型能够成功地学习查询和结果之间的隐式位置匹配。
为了利用丰富的Facebook社交图来改进统一的嵌入模型,我们训练了一个独立的嵌入模型来嵌入基于社交图的用户和实体。这有助于将综合社会图整合到一个统一的嵌入模型中。
我们在系统中部署了一种基于反向索引的近似近邻(ANN)搜索算法。有以下几点优势:
我们利用Faiss library对向量进行vector quantization,然后在现有的倒表扫描系统中实现了高效的神经网络搜索。
嵌入量化有两个主要部分,一个是粗量化,通常通过K-means算法将嵌入向量量化到粗簇中,另一个是乘积量化[8],它进行细粒度量化以有效计算嵌入距离。
我们需要调整几个重要参数:
我们建立了一个离线管道来有效地调整这些参数。此外,我们还需要进行在线实验,在离线调整的基础上从所选的候选对象中确定最终设置。
下面我们将分享我们从ANN tuning中学到的技巧和经验。
未完待续…
百度翻译还可以,贴在下面
利用深度学习研究的进展,在搜索检索中引入语义嵌入来解决语义匹配问题具有长远的意义。然而,由于建模困难、系统实现和跨栈优化的复杂性,这也是一个极具挑战性的问题,特别是对于大规模的个性化社交搜索引擎。本文提出了一种统一嵌入的社交搜索语义建模方法,并在一个经典的基于倒排索引的搜索系统中实现了基于嵌入的检索。这只是实现统一的嵌入模型和基于嵌入的检索系统的第一步。要使系统端到端的优化,使其在结果质量和系统性能方面表现良好,还有很长的路要走。我们介绍了我们在模型改进、服务算法调整和后期优化方面的经验。我们相信这将是一个宝贵的经验,帮助人们在真实的搜索引擎中更快地进行基于嵌入的检索。基于嵌入的检索技术在生产中的成功应用,为利用最新的语义嵌入学习技术提高检索质量打开了一扇大门。我们介绍了我们在这个方向上的第一步所取得的进展和收获,特别是在硬挖掘和嵌入集成方面。未来将有巨大的机会不断改进这一制度。未来,主要有两个方向要追求。一是深入。在建模方面,我们可以应用最新的高级模型,比如BERT[4],或者构建特定于任务的模型来解决特定的问题。我们可以在不同的阶段进行更深入的研究,包括服务算法优化和排名模型改进,以全栈失效分析为指导,找出不同栈中改进的机会。另一个是走向世界。我们可以利用预先训练好的文本嵌入模型来开发一个通用的文本嵌入子模型来应用于不同的任务。此外,我们可以开发一个跨所有用例的通用查询嵌入模型。