论文阅读_基于嵌入的Facebook搜索

英文名称:Embedding-based Retrieval in Facebook Search
中文名称:基于嵌入式检索的Facebook搜索
时间:Wed, 29 Jul 2020 (v2)
地址:https://arxiv.org/abs/2006.11632
作者:Jui-Ting Huang, Ashish Sharma, Shuying Sun, Li Xia, David Zhang, Philip Pronin, Janani Padmanabhan, Giuseppe Ottaviano, Linjun Yang
机构:Facebook & Microsoft
出处:会议论文,第26届 ACM SIGKDD 知识发现和数据挖掘会议论文集
正文:8 页

读后感

Facebook 社交中的搜索与其它搜索不同,它可以基于上下文得到更多信息。

这里研究的是如何将传统搜索与基于向量的搜索结合在一起的具体方法。比较有启发的是提出的“统一嵌入模型”,在编码时加入了用户、上下文、位置等文本以外的信息,以便更好地定位和匹配。

另外,还考虑到每月活跃用户、最近发生的事件、热门页面和群组。并不一定要对所有内容做嵌入索引,多数时候人们更关注高频数据,这样确实可以提升效果。使用新方法和旧方法结合,解决不同用户需求,同时平衡资源占用,是实用的方法。

摘要

目标: 将嵌入式检索(EBR)应用于 Facebook 搜索系统的技术,以改进搜索结果的相关性。

方法: 介绍了用于个性化搜索的统一嵌入框架和基于倒排索引的嵌入式检索系统,并分享了端到端优化整个系统的各种技巧和经验,包括 ANN 参数调整和全栈优化。

结果: 在 Facebook 搜索的垂直领域上评估 EBR,在在线 A/B 实验中观察到显著的指标提升。

1 引言

解决与查询文本不完全匹配但能满足用户搜索意图的预期结果是一个具有挑战性的问题。而嵌入是一种将稀疏的 ID 向量表示为密集特征向量的方法,也称为语义嵌入,因为它通常能够学习语义。一旦学习了嵌入,它就可以用作查询和文档的表示,并应用于搜索引擎的各个阶段。

一般搜索引擎包括一个召回层,以低延迟和计算成本检索一组相关文档,也称为检索;以及一个精确层,以更复杂的算法或模型将最需要的文档排在顶部,也称为排序。嵌入在检索中的应用称为基于嵌入的检索,或简称 EBR。检索层需要处理数十亿或数万亿个文档。搜索引擎通常需要将基于嵌入的检索和基于术语匹配的检索结合起来,才能在检索层对文档进行评分。

在 Facebook 社交网络中的搜索,需要完全理解文本、用户和上下文。文章提出了统一嵌入,这是一个双侧模型,也称为又塔结构。其中一侧是包含查询文本、搜索者和上下文的搜索请求,另一侧是文档。从搜索者、查询、上下文和文档中提取特征。例如,网络上有很多 John Smith,但用户搜索时,更可能是他认识的 John Smith。

图片

2 模型

本文主要讨论对于检索的优化,可将召回率优化表述为一个基于查询和文档之间距离计算的排名问题。查询和文档通过神经网络模型编码为密集向量,并使用余弦相似度作为距离度量。

2.1 评价指标

作者设计了离线测试,对 10000 个搜索会话进行了采样,以收集用于评估的查询和目标结果集对。并报告了超过 10000 个会话的平均 recall@K。

2.2 损失函数

对于给定的三元组 ( ( ), +( ), −( )),其中 ( ) 是查询, +( ) 是关联的正文档, −( ) 是关联的负文档,三元组损失定义为:

图片

2.3 统一嵌入模型

作者提出了统一嵌入,在生成嵌入时不仅考虑了文本,还考虑了用户和上下文信息。

模型包括三个主要组件:查询编码器用于产生查询嵌入,文档编码器用于产生文档嵌入,以及相似性函数用于计算查询和文档之间的分数。默认情况下,这两个编码器和是独立的网络,但也可以选择共享部分参数。并选择余弦相似性作为相似性函数。

统一嵌入对文本、社交和其他有意义的上下文特征进行编码,以分别表示查询和文档。例如,对于查询端,可以包括搜索者的位置和用户的社交关系。而对于文档,以群组搜索为例,可以包括关于 Facebook 群组的聚合位置和社交集群。不同类型特征与文本结合的嵌入方法,详见特征工程章节。

图片

|400

2.4 训练数据挖掘

对于正负样本的选择,文中比较了几种基于模型召回率的策略。

负样本方面,测试了随机采样和未点击的展示结果。使用未点击的展示结果作为负样本时,模型召回率显著下降。这是因为这些负样本偏向于与查询匹配的难案例,而大多数文档是不匹配的简单案例。

正样本方面,点击结果和展示结果都被测试。发现两者效果相似,添加展示数据并未带来额外提升。

因此,使用点击作为正样本、随机作为负样本。

3 特征工程

统一嵌入模型的优点之一是它可以合并文本以外的各种功能来提高性能。实验证明,当事件搜索从文本切换到统一嵌入时,召回率提高了 18%,组搜索的召回率提高了 16%。

文本特征:使用字符 n-gram 表示文本有两个主要优点。首先,它使词汇量更小,从而嵌入查找表更小且更易于学习。其次,它对查询和文档中的词汇外问题(例如拼写变化或错误)更具鲁棒性。实验表明,字符 n-gram 比词 n-gram 能产生更好的性能,但结合两者能进一步提高表现(召回率提升 1.5%)。Facebook 实体的主要文本特征来源于人名或标题,相比布尔术语匹配技术,嵌入模型在处理模糊匹配和可选词匹配方面表现更佳。

位置特征:位置匹配在许多搜索方案中都是有利的,例如搜索本地商家、群组或活动。在查询和文档端都添加了位置功能。对于查询端,我们提取了搜索者的城市、地区、国家和语言信息。对于文档端,实验中添加了公开可用的信息,例如管理员标记的显式组位置。结合文本特征,该模型能够成功学习查询和结果之间的隐式位置匹配。

社会关系特征:训练了一个单独的嵌入模型来嵌入基于社交图谱的用户和实体。这有助于将全面的社交图谱合并到统一的嵌入模型中。

4 服务

4.1 ANN

在系统中部署了基于倒排表的 ANN(近似近邻)搜索算法。首先,对嵌入向量的量化,使存储成本较低。其次,更容易集成到现有的基于倒排索引的检索系统中。使用 Faiss 库来量化向量,然后在现有的倒排表扫描系统中实现高效的神经网络搜索。

嵌入量化有两个主要组成部分:一种是粗量化,通常通过 K-means 算法将嵌入向量量化为粗簇;另一种是乘积量化,用于细粒度地进行嵌入距离的有效计算。

4.2 系统实施

在 Unicorn(高性能的 HTTP 服务器)中,实现了对 NN(最近邻)搜索的优质支持。Unicorn 使用术语包表示每个文档,这些术语是文档二进制属性的任意字符串,通常会被转换为命名空间。例如,居住在西雅图的用户 John 将具有术语 text:john 和 location:seattle。查询可以是基于这些术语的任何布尔表达式。

为了支持 NN 搜索,作者扩展了文档表示形式,使其支持嵌入。每个嵌入都有一个特定的字符串键,并增加了一个 (nn <key>:radius <radius>) 查询运算符。该运算符匹配指定半径内查询嵌入的所有文档。

在索引阶段,每个文档嵌入被量化为一个术语(代表其粗集群)和一个有效负载(代表量化后的残差)。在查询阶段,通过最接近的术语匹配文档,并检索有效负载以验证约束。

(小编说:这是四年前的文章,现在有更多针对向量查询的优化技术,此方法就不再展开了)

4.2.1 混合检索

通过将 (nn) 运算符作为布尔查询语言的一部分,可以支持混合检索表达式,任意组合嵌入和术语,以实现模糊匹配等功能。

(小编说:非稠密向量也有很多模糊匹配的方法,这里主要说明 NN 的使用场景)

4.2.2 模型服务

在双侧嵌入模型训练完成后,将其分解为查询嵌入模型和文档嵌入模型,并分别提供服务。对于查询嵌入,将模型部署在在线推理服务中,以实现实时推理。对于文档嵌入,使用 Spark 进行离线批量推理,然后将生成的嵌入与其它元数据一起发布到正向索引中。此外,还进行了额外的嵌入量化,包括粗量化和 PQ,以将其发布到倒排索引中。

4.3 查询和索引选择

为了提高 EBR 的效率和质量,文中对查询和索引进行了优化。但并不是对所有用户数据和所有查询都应用上述技术,以减少资源占用。例如,只对每月活跃用户、最近发生的事件、热门页面和群组进行索引;过滤掉之前查询过的、简单的查询,或者不需要向量查询的内容。

5 优化

Facebook 的搜索排名是一个复杂的多阶段系统,包含检索和排序两个独立步骤。如果只针对检索进行优化,可能会与后续的排序阶段不匹配,从而无法生成最优结果。为改善这一问题,可以使用以下两种方法:

  • 将嵌入作为排序特征:利用查询和结果嵌入之间的余弦相似度作为排序特征,从而提高排序器的表现。

  • 训练数据反馈循环:记录基于嵌入检索得到的结果,并结合人工评分数据重新训练模型,以提升检索的精确度。

6 高级主题

这里主要讨论了难样本对模型效果的影响,相对小众,略……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman设置请求间自动保存返回参数,方便后续请求调用,减少复制粘贴

postman中常常出现&#xff1a;有两个请求&#xff0c;一个请求首先获取验证码或者token&#xff0c;再由得到的验证码或token编写body发送另一个请求。如何设置两个请求间自动关联相关数据呢&#xff1f; 通过环境存储全局变量 现在有两个请求如下图&#xff0c;生成验证码是…

如何将Hive表的分区字段插入PG表对应的时间戳字段?

文章目录 1、背景描述2、场景分析 1、背景描述 数据仓库的建设通常是为业务和决策服务的。在数仓开发的应用层阶段&#xff0c;BI可以直接从主题层/业务层取数&#xff0c;而前端需要根据具体的作图需求通过后端查询数据库 作图的指标需要根据主题层/业务层做查询计算&#xf…

保姆教程教你如何使用数据集运行ORB-SLAM3

链接: 自学SLAM&#xff08;2&#xff09;—保姆教程教你如何使用自己的视频运行ORB-SLAM2 这篇文章是详细教怎么运行ORB-SLAM2的&#xff0c;那么下来我们就看看怎么运行ORB-SLAM3 理论上ORB-SLAM2的环境也是可以跑ORB-SLAM3的&#xff0c;因为我之前试过&#xff0c;编译成功…

最佳学习率和Batch Size缩放中的激增现象

前言 《Surge Phenomenon in Optimal Learning Rate and Batch Size Scaling》原文地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文&#xff0c;并对其进行了中文翻译。还有部分最佳示例教程。如果有帮助到大家&a…

Linux源码-进程描述符

Linux操作系统引入了PCB(Process Control Block,进程控制块)结构。PCB是Linux操作系统识别进程的通道。 创建进程时&#xff0c;首先会创建PCB&#xff0c;根据PCB中的信息对进程实施有效管理。当进程终止后&#xff0c;Linux操作系统会释放对应的PCB资源。 PCB的数据结构是s…

2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第二部分】

上一篇文章&#xff1a;2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第一部分】_尘封的CPU的博客-CSDN博客最近回顾了Java B组的试题&#xff0c;深有感触&#xff1a;脑子长时间不用会锈住&#xff0c;很可怕。兄弟们&#xff0c;都给我从被窝里爬起来&#xff0c;赶…

解决error Error: certificate has expired问题

安装环境遇到下面问题&#xff1a; 产生原因&#xff1a;可能是开了服务器代理访问导致ssl安全证书失效 解决办法&#xff1a; 在终端输入以下命令&#xff1a; yarn config set "strict-ssl" false -g

3ds Max导出fbx贴图问题简单记录

1.前言 工作中发现3ds Max导出的fbx在其它软件&#xff08;Autodesk viewer&#xff0c;blender&#xff0c;navisworks&#xff0c;FBXReview等&#xff09;中丢失了部分贴图&#xff0c;但导出的fbx用3ds Max打开却正常显示。 fbx格式使用范围较广&#xff0c;很多常见的三…

Milvus【部署 01】向量数据库Milvus在Linux环境下的在线+离线安装

向量数据库Milvus在Linux环境下的在线离线安装 1.千问简介2.在线安装2.离线安装 1.千问简介 Milvus 是一款专为处理高维向量数据设计的开源云原生数据库&#xff0c;旨在满足海量向量数据的实时召回需求。它由 Zilliz 公司开发并维护&#xff0c;基于Apache许可证2.0版本发布。…

ASUS华硕A豆14笔记本电脑I421EAYB,I421EQYB_ADOL14EA工厂模式原厂Win11系统安装包下载

适用型号&#xff1a;ADOL14EA笔记本I421EAYB、I421EQYB 链接&#xff1a;https://pan.baidu.com/s/1krU8m_lbApyUfZQo5E4cCQ?pwd0ewl 提取码&#xff1a;0ewl 华硕原装WIN11系统工厂安装包&#xff0c;带有MyASUS WinRE RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系…

Linux上安装JDK,Java起飞,开启编程之旅

在Linux环境下搭建Java开发平台&#xff0c;是许多开发者入门Java世界的第一步。Java的跨平台特性使得在Linux上安装JDK尤为重要&#xff0c;它不仅能为Linux开发者提供更广阔的应用场景&#xff0c;也是探索Java强大功能的起点。 接下来&#xff0c;让我们一起在Linux中完成J…

【SpringMVC】_SpringMVC实现留言墙

目录 1. 需求分析 2. 接口定义 2.1 提交留言 2.2 获取全部留言 3. 响应数据 4. 服务器代码 4.1 MessageInfo 文件 4.2 MessageController 文件 5. 前端页面代码 5. 运行测试 1. 需求分析 实现如下页面&#xff1a; 1、输入留言信息&#xff0c;点击提交后&#xff0…

使用腾讯云服务器从0搭建个人网站,超简单图文教程

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com整理使用腾讯云服务器建站教程&#xff0c;…

NPOI入门指南:轻松操作Excel文件的.NET库

目录 引言 一、NPOI概述 二、NPOI的主要用途 三、安装NPOI库 四、NPOI基本使用 六、性能优化和内存管理 七、常见问题与解决方案 八、结论 附录 引言 Excel文件作为数据处理的重要工具&#xff0c;广泛应用于各种场景。然而&#xff0c;在没有安装Microsoft Office的…

llama.cpp

https://github.com/echonoshy/cgft-llm 【大模型量化】- Llama.cpp轻量化模型部署及量化_哔哩哔哩_bilibili github.com/ggerganov/llama.cpp cd ~/code/llama.cpp/build_cuda/bin ./quantize --allow-requantize /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama…

海尔智家:科技优秀是一种习惯

海尔智家&#xff1a;科技优秀是一种习惯 2024-06-28 15:19代锡海 6月24日&#xff0c;2023年度国家科学技术奖正式揭晓。海尔智家“温湿氧磁多维精准控制家用保鲜电器技术创新与产业化”项目荣获国家科学技术进步奖&#xff0c;成为家电行业唯一牵头获奖企业。 很多人说&…

分布式kettle调度管理平台简介

介绍 Kettle&#xff08;也称为Pentaho Data Integration&#xff09;是一款开源的ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;由Pentaho&#xff08;现为Hitachi Vantara&#xff09;开发和维护。它提供了一套强大的数据集成和转换功能&#xff0c…

【C++】类、静态、枚举、重载、多态、继承、重写、虚函数

五、类 面向对象编程是一个巨大的编程范式。C中的类class就是基于对象的程序设计。 我们可以用类来定义一个新的类型&#xff0c;这些新类型就可以像内置类型一样使用。 内置类型颗粒度太太小&#xff0c;现实需求又非常复杂&#xff0c;这就需要我们把内置类型适度的进行拼搭…

源码学习:文件描述符

在进程描述学习中&#xff0c;扯到了max_fds&#xff0c;接着就联想到了日常运维中常见的ulimit参数、sysctl内核参数&#xff0c;原来以为max_fds与这些个关联性比较强&#xff0c;但经过一早上折腾以后&#xff0c;发现其实还是有一些差距的。但是在学习过程中&#xff0c;却…

【C++】数组、字符串

六、数组、字符串 讨论数组离不开指针&#xff0c;指针基本上就是数组的一切的基础&#xff0c;数组和指针的相关内容参考我的C系列博文&#xff1a;【C语言学习笔记】四、指针_通过变量名访问内存单元中的数据缺点-CSDN博客【C语言学习笔记】三、数组-CSDN博客 1、数组就是&…