许久不见甚是想念,自从工作后就没有更新过博客,难得今天抽空把前两天看的一篇 Facebook 发表在 KDD2020 的一篇关于社交网络搜索中的 embedding 检索问题的工作来分享一下,干货很多,尤其是负样本的选取真的是切中痛点,推荐一读。
参考文献:
1. https://arxiv.org/pdf/2006.11632.pdf
2.https://mp.weixin.qq.com/s/VJSDSHW3CsY3b5Xx90FO2A
3.https://mp.weixin.qq.com/s/VJSDSHW3CsY3b5Xx90FO2A
摘要
与传统的网络搜索相比,诸如Facebook之类的社交网络中的搜索面临着不同的挑战:除了查询文本外,重要的是要考虑搜索者的上下文以提供相关结果。他们的社交图谱是上下文的组成部分,也是Facebook搜索的独特方面。尽管基于嵌入的检索(EBR)已在Web搜索引擎中应用了很多年,但Facebook搜索仍主要基于布尔匹配模型。在本文中,我们讨论了将EBR应用到Facebook搜索系统的技术。文中共介绍了三方面的经验:
-
提出了一套统一的 embedding 框架用于建模个性化搜索中的语义。
-
提出了基于经典的倒排索引进行在线 embedding 检索的系统。
-
讨论了整个个性化搜索系统中很多端对端的优化技巧,例如最近邻搜索调参经验、全链路优化等。
最后,在Facebook 垂直搜索场景下验证了本文方法的有效性,在线上 A/B 实验取得了显著的收益。
简介
从 query 中准确计算出用户的搜索意图以及准确表征文档的语义是非常困难的。之前的搜索算法主要还是通过关键词匹配的方式进行检索,但是对于字面不匹配但是语义相似的 case 基于关键词匹配的方法就不奏效了。而通过 embedding 可以建模句子之间的语义相似度,所以基于 embedding 的语义检索就应运而生了。
所谓 embedding 就是将高维稀疏的 id 映射成为一个低维稠密的向量,这样就可以在同一个向量空间中同时表示query 和候选集文档,从而进行譬如计算相似度等方面的操作。
一般来说,搜索主要包含检索和排序两个阶段。尽管 embedding 技术可以同时被应用在两个阶段,但相对来说应用在召回阶段可以发挥出更大的作用。简单来说,EBR 就是用 embedding 来表示 query 和 doc,然后将检索问题转化为一个在 Embedding 空间的最近邻搜索的问题。它要解决的问题是如何从千万个候选集中找到最相关的 topK 个,难点有如下的两个:一方面是如何构建千万级别的超大规模索引以及如何在线上进行服务;另一方面是如何在召回阶段同时考虑语义信息和关键词匹配信息。
一般而言,搜索引擎包括:召回层,旨在以低延迟和低计算量来检索一组相关文档(通常称为“检索(retrieval)”);以及精排层,其目标是通过更复杂的算法或模型将最想要的文档排在最前面,通常称为"排序(ranking)"。尽管可以将emebdding应用于这两个层,但是但相对来说应用在召回阶段可以发挥出更大的作用,因为它位于系统的底部,通常是瓶颈所在。简单来说,EBR 就是用 embedding 来表示 query 和 doc,然后将检索问题转化为一个在 Embedding 空间的最近邻搜索的问题。它要解决的问题是如何从千万个