
论文地址:Embedding-based Retrieval in Facebook Search, KDD 2020
在脸书的场景下,不仅仅QU相关性非常重要,而且用户画像特征对于返回的搜索结果也非常重要。简单来说,这篇论文主要是说明脸书的个性化搜索技术。由于在本篇文章之前,脸书都是使用的布尔检索,因此本文也介绍了引入ANN后,脸书的整体框架以及系统上如何部署ANN。
简要讲一下,整个流程分为在线流程和离线流程。在线流程:Query处理 -> 召回 -> 排序。
离线流程:indexing,主要是生成URL的倒排索引、向量索引以及正排索引
为了解决个性化搜索,本文相对于上一篇文章的搜索系统做了很多改进。我们主要通过三个方面来介绍:数据、模型、优化算法。本文分别在这三个方面有如下一些改进:
2.1.1 数据来源
训练数据主要是通过数据挖掘的方式获取的。因为模型是使用的triplet loss (后文会介绍),所以需要有正样本和负样本。数据输入是 (Query,正样本,负样本)。
2.1.2 特征工程
文本特征:文中表示character粒度的n-gram模型要优于word粒度的n-gram模型。另外,文中表示,文本类特征主要可以用来解决两类问题:
地理特征:在上一篇文章中,我们也提到了地理位置特征的构建。当时我们分别说明了Query侧和URL侧的地理位置特征的构建方法。回顾一下,上一篇文章的Query侧地理位置特征构建分了两类 (隐式和显式),隐式Query就使用用户的地点作为地理特征的输入,显式Query就直接使用query中的地点作为地理特征的输入。URL的话,则是通过click query在离线处理中提取URL的地点。本篇文章也是分成Query侧和URL侧进行地理特征提取。
社交向量特征:由于脸书有很庞大的社交网络图,因此可以基于这张图为每个用户构建一个社交向量特征。这块具体方法没有讲,但是学术界中有很多成熟的Network Embedding的方法。需要的同学,可以去看相关论文或者综述。
2.2.1 模型评估
评估指标是构建模型之前的首要任务,因为模型的目标是希望能够最优化评估指标。下面给出的召回的评估指标和文中的不太一样,各位以本文的为主。论文中评估指标是存在一些问题的,比如上界不为1等。
召回的评估指标为: ,其中 表示当 时,值为1;否则,值为0.
评估方式:对10000个query使用KNN进行URL召回,然后计算 ,再平均。
2.2.2 损失函数
Triplet loss: ,其中算子 是距离函数, 是margin,一个可调参数,用于调参。
2.2.3 模型结构:Unified Embedding Model
将文本特征、地理特征、社交向量特征作为输入,输出QU相似度打分。
这个模型被称为双塔模型,又叫做Siamese Network。在下回中,我们会讨论这个模型和单塔模型的区别,并且会讲一个新的模型结构:Poly-encoder。这里只要知道脸书个性化搜索模型的结构为单塔模型,就足够了。
引入ANN模型有两个优势,一是经过embedding quantization后存储很小,二是可以很容易地与之前的召回兼容。本文在这里主要介绍了quantization方法以及旧召回系统兼容方法。
在脸书的quantization方法中,一共有两个主要部分:coarse quantization和product quantization。
在旧召回系统中,脸书所使用的的是布尔检索。此时的检索表达式为:
引入ANN召回后,检索表达式变为:
这里的nprobe表示考虑16个clustering center。在本文中,作者表示返回topK的效果不如返回radius内的效果。个人猜测可能是,topK末端的URL可能不在radius内,从而导致末端的低质URL被召回。
另外,由于ANN主要是解决模糊匹配的问题,并不能对所有Query都生效,因此作者对Query选择性地应用ANN召回方法。
为了进一步提升ANN召回的效果,文中最后提及了两个有效的方法:难样本挖掘和embedding集成。
难负样本挖掘:从Top101-500的召回数据抽样的效果最好;
难正样本挖掘:挖掘出没有被召回的正样本。(个人感觉,这种挖掘比较难,文中也没有提及如何去挖掘。)
在文中,作者讨论了召回与排序两个阶段的连接方式:并行 (weighted concatenation) 和 串行 (cascade model)。
注:在文中,作者表示召回阶段,模型只需要解决recall的问题;而在排序阶段,模型则是解决precision的问题。从这个角度来看,将max F1的问题转化成max recall 和 max precision的问题是一个很好的思路。
最后,推荐大家关注一下我的公众号:深度学习与NLP专栏。
