Bing搜索核心技术BitFunnel原理
导语 从90年代中期开始,人们普遍认识,对于内容索引来说,文件签名技术比反向链接效果更差。最近几年必应搜索引擎开发与部署了一套基于位分割的标签索引。这种索引(也称BitFunnel)替代了之前的基于反向索引的生产系统。这项转移背后驱动的因素是反向链接需要运转存储代价。本篇内容将讲述这项算法上的创新发明,改变传统上在云计算框架上被认为无法使用的技术。BitFunnel算法直接解决四项基础位分割块签名的限制。同时,算法的映射进入集群提供了避免和其他签名联系的代价。这里会先展示这些创新产生了比传统位分割签名的更显著的效率提升,然后将会进行BitFunnel与分块化Elias-Fano索引,MG4J,和Lucene等的对比。本文根据论文《BitFunnel: Revisiting Signatures for Search》和Bing团队实践分享视频,对BitFunnel原理进行分析解读。
问题背景
假设我们一篇非常短的文档:内容仅仅“big brown dog”这三个单词,我们可以用固定长度的位向量对这组单词进行编码,也称固定长度的位向量为文档签名或者布隆过滤器。简单样例这里采取了十六位长度的位向量来进行操作,当然,在Bing系统上不会用这么短的位向量,往往使用五千个以上的来进行表示。一开始,位向量全都是空的,因为还没有进行数据的加载操作。
布隆过滤器初始化会设置哈稀函数的种数,哈稀函数是为了让文档单词对应到位向量的固定位置上。这里我使用了三种不同的哈稀函数来映射。映射结果如下:
从上图可知,每个单词都对应着位向量上面的三个位置上置1,然后我们得到了这份简易文档的文档签名,假如我们要搜索“cat”单词在不在这份文档里面,我们只需要查询“cat”单词经过哈稀函数映射出来的三个位置上是否都为1就可以进行判定了,很明显,有一个不为1,所以“cat”单词并不在这份文档里面。
当我们搜索"big“单词时,我们会发现三个位置均置为1,那么我们可以判定“big”是这份文档的可能成员。如下图所示:
细心的你肯定注意到这里用了可能两个字,为什么是可能成员呢?下图是我们搜索的是“house”单词的结果:
我们会发现这个单词的所有映射位置也都是1,但实际上我们知道文档里并没有“house”单词,这个存在的原因是因为有哈稀函数映射碰撞的存在,导致其他的位置也有相对应的1在文档里面补充了没有为1的情况,这也是我们为什么要用多种哈稀映射函数的原因,能够降低这种错误率。
基于这样的结构我们,假设我们存储有十六篇文档:A-P,依次建立了签名,那么有搜索需求:Query文档(包含多个单词)进来,通过下列查询就可以得到可能匹配文档:
这样的思路无疑是非常直观简单且容易实现的,但是在网络中存储的那些网页,基本需要几千位长度的位向量去表示,如果我们每一篇文档都这样去查询匹配,假设我们有N篇文章,用了P个位的文档签名标记,我们的计算机CPU每次处理的位数为64位,那么查询一篇文章需要花费的代价就是 N*(P/64)单位时间。
这样的代价无疑是非常高昂的,因为现在文章的数量和长度乘积无疑是一个天文数字。一个非常巧妙的办法就是将这个矩阵反转过来,行列倒置,那么我们的存储由N*P行列矩阵就变成了P*N,很显然,P远远小于N。那么,我们的查询文档Query对应的只需要去匹配其中位为1的对应的文档的行向量即可,过程如下:
从上图流程可以看出,对应的只需要查询对应为1的位向量行数的文章的情况就可以了,假设真实中查询的文档Query的为1位数是W位,在现实查询中,W往往是少数几个单词去查询,W远远小于P,对应列进行并运算,结果为1则该篇位置可能匹配,这样查询速度就大大提升。但是,还有一个问题就是现实中 N 的数量也非常庞大。
那么这点如何处理呢?这就引进了今天要讲的重点算法:BitFunnel。
BitFunnel发明
等级行
那么,让我们试试搜索一下“treacherous movies”是怎么进行查询的:
如果我们采用BitFunnel的方式来处理,那么,查询量Q可以用(带宽/总量)表示,引入这样的概念就可以讲之前硬盘和DDR4换一种计算方式,用每秒查询带宽量以及每美金每秒查询带宽量来表示之间能力差别,结果如下:
处理错误率
参考附录:
Bing搜索核心技术BitFunnel原理相关推荐
- 千亿级照片,毫秒间匹配最佳结果,微软开源Bing搜索背后的关键算法
[导读]随着互联网的普及,搜索成为人们最常用的基本功能之一,但这背后的秘密是什么呢?近日,微软公司介绍了他们是其如何应对用户搜索习惯的改变,并开源了支撑 Bing 搜索背后的算法. 作者 | Char ...
- 【新鲜出炉】快手推荐算法 bing搜索 面经
转载自小小挖掘机 快手推荐算法: 一面 : 1.在另外一个公司实习相关,大概问了 20分钟,还是讲了很多东西的.从产品形态问到日活.每天的点击展示量,再到工作的具体内容,还有工程上的问题. 2.XGB ...
- 开发者周刊:英特尔再爆重大芯片漏洞;微软开源Bing搜索关键算法;Facebook联合创始人呼吁拆分Facebook
开发者周刊:只为传递"有趣/有用"的开发者内容,点击订阅! 本周热门项目 GitHub推出软件包托管服务Package Registry 本周,GitHub 再下一城,推出自己的软 ...
- 如何将bing搜索页面以HTML Mashup的方式嵌入到SAP C4C页面
创建一个HTML mashup,port binding选择Lead Info: 在Mashup编辑页面里,指定type为url,输入bing搜索的网址,将查询参数绑定到LeadID上: 用key u ...
- SAP CRM One Order 根据联系人姓名搜索的实现原理
本文介绍SAP CRM One Order 根据联系人姓名搜索的实现原理 要获取更多Jerry的原创文章,请关注公众号"汪子熙":
- 微软开源Bing搜索背后的关键算法
微软今天宣布开源了一项 Bing 搜索背后的关键算法 -- SPTAG,它使 Bing 能够快速将搜索结果返回给用户. 仅在几年前,网络搜索很简单,用户输入几个关键词然后浏览结果页面.现如今,这些用户 ...
- 千亿级照片,毫秒间匹配最佳结果,微软开源 Bing 搜索背后的关键算法
作者 | Charlie Waldburger 译者 | 刘畅 责编 | 一一 出品 | AI科技大本营(id:rgznai100) [导读]随着互联网的普及,搜索成为人们最常用的基本功能之一,但这背 ...
- 千亿级照片,毫秒间匹配最佳结果,微软开源 Bing 搜索背后的关键算法!
随着互联网的普及,搜索成为人们最常用的基本功能之一,但这背后的秘密是什么呢?近日,微软公司介绍了他们是其如何应对用户搜索习惯的改变,并开源了支撑 Bing 搜索背后的算法. 作者 | Charlie ...
- 关于微软Bing搜索语言无法更改的问题
一(在Chrome浏览器打开Bing网页的解决方案) 首先我们会发现,bing网页打开后是英文的(这个不局限于Chrome浏览器,在别的浏览器,不管是桌面或者移动端设备默认的都是English),在解 ...
最新文章
- 如果当前没有拿得出手的简历,也别慌,努力的话最多两年情况就能改变
- Python 技术篇 - 文件的读取和写入
- mit risc-v 资料
- k8s serviceaccount pod亲和性 污点
- Linux 用户篇——用户管理的配置文件
- android手机解除root,手机显示被root什么意思(手机root怎么解除)
- java设置按钮调用问题_按钮相关问题:尝试在空对象引用上调用虚方法
- idea如何打开pom引用依赖_idea 怎么引入在pom.xml的jar
- oracle pl/sql 游标,Oracle PL/SQL 关于游标的介绍
- 戴机械手表有哪些事情就不能做了?
- JavaScript或MyEclipse—如何解决js文件导入到MyEclipse工程后出错?
- AODV协议代码详述
- 头条小程序服务器设置,今日头条小程序怎么开发?如何注册申请
- Java实现观察者模式
- mtk flashtools工具回读镜像文件system.img
- oracle jdbc驱动jar包下载,oracle各个版本所需要的ojdbc jar驱动包以及版本对应关系...
- 阅读文献Performance Gains in V2X Experiments Using Distributed Simulation in the Veins Framework
- GlobalSign证书有哪些基本好处
- win11如何开启电脑高性能模式?
- 众昂矿业:萤石的简介及其应用
热门文章
- Python 第十一章 常用第三方模块
- struts2重定向
- 【黑金视频连载】FPGA NIOSII视频教程(11)--系统时钟实验
- CodeForces - 1553E Permutation Shift(暴力+置换群求环)
- POJ - 2230 Watchcow(欧拉图)
- CH - 0601 Genius ACM(倍增+归并排序)
- python各种数据类型的常用方法_python的基本数据类型:列表的方法
- python两数求和_Python两数相加实现
- setiosflags(ios::fixed)和setprecision()
- python中的单继承,多继承和mro顺序