毕业作品是做网站的答辩会问什么,网络公司网站制作岗位职责,深圳工业设计公司排行榜,做网站微信朋友圈应该怎么发星标/置顶小屋#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 可盐可甜兔子酱导读#xff1a;今天分享一下 Facebook 发表在 KDD2020 的一篇关于社交网络搜索中的 embedding 检索问题的工作#xff0c;干货很多#xff0c;推荐一读。论文题目#xff1… 星标/置顶小屋带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 可盐可甜兔子酱导读今天分享一下 Facebook 发表在 KDD2020 的一篇关于社交网络搜索中的 embedding 检索问题的工作干货很多推荐一读。论文题目Embedding-based Retrieval in Facebook Search论文链接https://arxiv.org/abs/2006.11632Arxiv访问慢的小伙伴也可以在【夕小瑶的卖萌屋】订阅号后台回复关键词【0731】下载论文PDF~相对于传统的网页搜索社交网络中的搜索问题不仅需要关注输入 query 的信息还需要考虑用户的上下文信息在 Facebook 搜索场景中用户的社交图网络便是这种上下文信息中非常重要的一部分。怎么把各式各样的信息进行融合呢虽然语义检索技术Embedding-based RetrievalEBR在传统的搜索引擎中得到了广泛应用但是 Facebook 搜索之前主要还是使用布尔匹配模型本文就来谈谈如何将 Embedding 检索技术应用在 Facebook 搜索场景中。文中共介绍了三方面的经验提出了一套统一的 embedding 框架用于建模个性化搜索中的语义提出了基于经典的倒排索引进行在线 embedding 检索的系统讨论了整个个性化搜索系统中很多端对端的优化技巧例如最近邻搜索调参经验、全链路优化等最后在Facebook 垂直搜索场景下验证了本文方法的有效性在线上 A/B 实验取得了显著的收益。背景从 query 中准确计算出用户的搜索意图以及准确表征文档的语义是非常困难的。之前的搜索算法主要还是通过关键词匹配的方式进行检索但是对于字面不匹配但是语义相似的 case 基于关键词匹配的方法就不奏效了。而通过 embedding 可以建模句子之间的语义相似度所以基于 embedding 的语义检索就应运而生了。所谓 embedding 就是将高维稀疏的 id 映射成为一个低维稠密的向量这样就可以在同一个向量空间中同时表示query 和候选集文档从而进行譬如计算相似度等方面的操作。一般来说搜索主要包含检索和排序两个阶段。尽管 embedding 技术可以同时被应用在两个阶段但相对来说应用在召回阶段可以发挥出更大的作用。简单来说EBR 就是用 embedding 来表示 query 和 doc然后将检索问题转化为一个在 Embedding 空间的最近邻搜索的问题。它要解决的问题是如何从千万个候选集中找到最相关的 topK 个难点有如下的两个一方面是如何构建千万级别的超大规模索引以及如何在线上进行服务另一方面是如何在召回阶段同时考虑语义信息和关键词匹配信息。本文从三个方面详细讲述了在 Facebook 搜索中应用 Embedding 检索技术遇到的挑战modeling: 本文提出了一套统一的 Embedding 模型框架 也就是经典的双塔结构一侧是抽取用户侧 query 特征另一侧则是抽取 document 侧的特征。serving: 为了优化系统检索和排序的综合效果Facebook 提出了将 EBR 的 embedding 作为特征整合进 ranking 模型中以及创建了一套数据反馈机制以便更好地识别和利用 EBR 的召回结果。full-stack optimization: 针对实际的搜索效果优化提出了多个实用的 tricks。系统建模本文将搜索引擎中的检索任务建模为一个召回优化问题。从离线指标的角度我们希望最大化 topK 返回结果的recall 指标。给定一个 query以及期望被检索到的目标文档集合 TT 中包含的文档可以来自用户的点击数据也可以是经过人工筛选排序后的文档我们的优化目标则是 recallK。继而我们把召回优化问题建模成 query 和 doc 之间基于距离的排序问题把 query 和 doc 同时表示成低维稠密的向量通过计算向量空间中的距离衡量它们之间的相似度或相关度本文中我们采用 cosine 距离。但是在 Facebook 个性化检索场景下仅仅计算 query 本身与候选文档的相似性是远远不够的我们同时要考虑用户的上下文信息比如他关注的人他的关注话题等等才能帮用户找到他真实的最想要的结果。为了实现这个目标本文提出了统一嵌入模型即Unified Embedding Model。Unified Embedding Model的思路相对来说比较简单沿用了经典的双塔结构包括三个部分query encoderdocument encoder 以及 similarity function。两个encoder是互相独立的也可以共享一部分网络参数左边是 user 的塔右边是 document 的塔但是 Unified Embedding Model 的 encoder 的输入是和传统的输入不同的user 塔的输入包括用户的检索 query以及用户位置、用户社交关系等上下文特征document 塔的输入包括文档本身以及文档的 group 信息等上下文特征模型结构详见下图所示。其中大部分的特征都是类别型特征进行 one-hot 或者 multi-hot 的向量化连续型特征则是直接输入到各自的塔中。在模型训练的损失函数上本文定义了一个三元组损失函数使得负例比正例相对 query 的距离尽可能的远。在使用三元组损失函数的情况下使用随机采样的负样本可以近似求解召回优化问题。对于训练 embedding 语义召回模型来说如何定义正负样本对于模型的效果至关重要。点击样本作为正样本这个没有疑问针对负样本我们采用了如下的两种的策略进行试验。随机负样本随机从文档库中采样 document 作为负样本曝光但未点击样本随机采样在同一个 session 中曝光但未点击的样本作为负样本本文发现前者作为负样本的效果要明显好于后者原因是前者可以有效消除负样本偏差。另外本文还进行了一组把曝光但是未点击的样本作为正样本的实验实验结果表明并没有带来额外的收益。特征工程Unified Embedding Model 架构的一个最明显的优势是可以任意加入各种各样的上下文特征。我们都知道 Facebook 推出的工业界实战论文都比较注重特征工程Unified Embedding 大体上采用了如下三个方面的特征Text featuresText Embedding 采用 char n-gram相对于 word n-gram 有两方面的优势一是有限的词典char embedding table 会比较小训练更高效二是不会有 OOV 问题subword 可以有效解决拼写错误以及单词的多种变体引入的 OOV 问题。Location features位置特征对于搜索引擎的很多场景是非常重要的因此本文在 query 和 document 侧的都加入了 location 的特征。Social Embedding features为了有效利用 Facebook 社交网络中的丰富信息本文额外地训练了一个社交网络的 Graph Embedding然后将这个预训练的 Embedding 作为特征输入到模型当中。在线Serving前面的章节讲如何进行离线建模以及特征工程这一节主要讲如何进行在线实时检索Facebook 采用了自家的 Faiss 库进行线上近似最近邻搜索approximate nearest neighbor search ANN。具体地他们在实际系统中部署了一套基于倒排索引的 ANN 搜索算法首先利用自家的 Faiss 库创建向量索引然后对索引表进行高效的最近邻检索。对 embedding 进行量化可以有效节省存储开销同时可以方便地集成到现有的检索系统当中。一个 query 可以表示为基于 term 的布尔表达式譬如 john 和 smithe 住在 seattle 或者 menlo_park 可以用下面的布尔表达式来表示。在实际使用中在 document 的布尔表示基础上加上了 document embedding 的索引。Embedding model 离线训练完成后通过 spark 构建候选文档集 document 的索引当用户请求过来时query 的 embedding 在线计算进行 topK 召回。针对全量的候选文档集进行索引是非常耗存储和费时的所以本文在构建索引的时候只选择了月活用户近期事件热门的事件以及热门 group。大部分公司在构建索引的时候也都会采取这样的策略很多长时间不活跃的可以不构建索引。Full-stack优化Facebook 的搜索引擎可以看作是一个复杂的多阶段的排序系统检索是排序之前的流程检索得到的结果需要经过排序层的过滤和 ranking我们可以将检索过程召回的分数也就是向量的相似度作为 ranking 阶段的一个特征通过 ranking 模型进行统一排序。由于现有的排序算法是基于已有的检索算法的特点设计的所以对于基于 embedding 召回的结果自然是被次优处理的为了解决这个问题作者提出了两个方法Embedding as ranking feature: 将检索这一步骤得到的 embedding similarity 作为接下来排序的输入特征实验证明余弦相似度的效果要优于其他相似度特征。Training data feedback loop: 基于 embedding 的语义召回的结果存在召回高但是精度低的问题所以本文就采用了对召回结果进行人工标注的方法对每个query召回的结果进行标注区分相关结果和不相关结果然后用标注后的数据重新训练模型从而提升模型精度。人工大法好基于 embedding 的语义召回模型需要更加深入的分析才能不断提升性能Facebook 给出了其中可以提升的重要方向一个是 Hard Mining另一个是 Embedding Ensemble。具体地有以下几个方法Hard Negative Mining 文章发现很多时候同语义召回的结果大部分都是相似的而且没有区分度最相似的结果往往还排不到前面这些就是之前的训练样本太简单了导致模型学习的不够充分。所以本文把那些和 positive sample 很近的样本作为负样本去训练这样模型就能学到这种困难样本的区分信息。Online hard negative mining 模型是采用mini-batch的方式进行参数更新的对batch中每个positive pair (q_i, d_i)利用除 d_i 以外的其他正例文档组成一个文档集从中选择最相近的文档作为困难负例 hard negative sample通过这种方式构造的三元组数据 可以使模型效果提升非常明显同时也注意到了每个 positive pair最多只能有两个 hard negative sample不然模型的效果会下降。Offline hard negative mining 首先针对每个 query 召回 topK 个结果然后选择一些 hard negative samples 进行重新训练重复整个过程。同时根据经验负例样本的比例是 easy : hard100:1。Hard positive mining 模型采用了用户点击的样本为正样本这一部分样本是现有系统已经可以召回的相对简单样本但是还有一些用户未点击但是也能被认为是正样本的样本。作者从用户日志中挖掘出潜在的困难正样本具体如何挖掘文章没有提及发现训练数据量只有原来 4% 的情况下可以得到和原来相近的召回率如果把这些困难正例和用户点击数据一起训练说不定有更好的效果。Embedding Ensemble 简单样本和困难样本对训练 EBR 模型都很重要简单样本可以让模型快速学习到数据分布特点困难样本可以提升模型的 precision所以采用不同难度的正负样本训练出来的模型各有优势如何对这些模型进行融合以提升性能呢第一种方案是 Weighted Concatenation通过对不同模型计算的相似度 score 进行加权平均作为最终相似度值采用加权融合的模型对于单模型而言有 4.39% 的提升。第二种方案是 Cascade Mode模型以串行方式在第一阶段模型的输出上运行第二阶段模型。采用串行的方式模型也有 3.4% 的提升。总得来说这是一篇浓浓工业风的文章虽然没有特别fancy的方法但是系统级的优化方案上很值得大家学习。 文末福利 后台回复关键词【入群】加入卖萌屋NLP/IR/Rec与求职讨论群有顶会审稿人、大厂研究员、知乎大V和妹纸等你来撩哦~ 关注星标 带你解锁最前沿的NLP、搜索与推荐技术参考文献[1] Embedding-based Retrieval in Facebook Search [2] https://zhuanlan.zhihu.com/p/152570715