当前位置: 首页 > 编程日记 > 正文

千亿级照片,毫秒间匹配最佳结果,微软开源Bing搜索背后的关键算法

【导读】随着互联网的普及,搜索成为人们最常用的基本功能之一,但这背后的秘密是什么呢?近日,微软公司介绍了他们是其如何应对用户搜索习惯的改变,并开源了支撑 Bing 搜索背后的算法。

作者 | Charlie Waldburger

译者 | 刘畅

责编 | 一一

出品 | AI科技大本营(id:rgznai100)

搜索需求的改变

以前的网页搜索功能十分简单,用户输入几个词,就会返回一系列相应的结果页面。如今,这些用户可能会用手机拍照并将其放入搜索框或使用智能助手来提问,并不需要亲自触摸设备。他们可能会直接输入一个问题,并期待一个对应的回复,而不仅仅是给出多个可能答案的网页列表。

搜索需求的改变对于以往基于索引系统,依赖关键字匹配给出搜索结果的传统搜索引擎是一个挑战。

“关键词搜索算法会在人们提出问题或拍照并询问搜索系统'这是什么?' 时失效”,微软 Bing 搜索和 AI 团队的项目经理 Rangan Majumder 说到。

当然,紧跟用户的搜索偏好并不是新鲜事,自从网络搜索功能出现以来,这一直是一场博弈。但现在,由于人工智能的发展,包括微软在人工智能方向取得进步,越来越容易满足这些不断变化的需求。

“人工智能正在使我们的产品更加符合人的思考习惯,”Majumder 说, “但在以前人们不得不思考,'当我使用计算机进行搜索时,如何输入才能得到自己想要的结果?'”

微软已经制作完成了最先进的人工智能工具之一,并已经在 GitHub 上开源,它还将通过微软的 AI 实验室发布这些工具的用户示例技术和介绍视频

链接

https://www.ailab.microsoft.com/vectorsearchexperiment)

这种被称为空间分治树与图(Space Partition Tree And Graph, SPTAG)的算法,允许用户利用深度学习模型来在毫秒内搜索数十亿条信息(或称矢量)。反过来,这意味着他们可以更快地向用户提供更匹配的结果。

矢量搜索相较于关键字搜索,可以更容易的按照内容得到搜索结果。例如,如果用户键入“巴黎铁塔有多高?”Bing 可以返回一个自然语言结果告诉用户艾菲尔铁塔是 1,063 英尺,即使“搜索查询”中没有出现“Eiffel”这个词,而“tall”这个词也不会出现在结果中。

微软将矢量搜索应用于 Bing 搜索引擎,该技术可以帮助 Bing 更好地理解数十亿网络搜索背后的意图,并在数十亿网页中找到最匹配的结果。

使用矢量进行更好的搜索

矢量的本质上是单词、图像像素或其他数据点的数字表示,它有助于捕获某条数据实际的意义。由于深度学习技术的进步,微软认为可以开始使用这些向量来理解和表示搜索意图。一旦将数据点分配给某条数据,就可以排列或映射这些向量,其中排列地靠前的数字表示相似性。这些近端结果会显示给用户,从而提升搜索结果。当公司工程师注意到用户搜索模式有异常趋势时,Bing 使用的矢量搜索背后的技术就会启动。

“在分析我们的日志时,团队发现搜索查询字符越来越长,”Majumder 说。这表明用户提出了更多问题,对于之前的搜索问题进行更多解释,对关键字搜索的体验不佳,或者在描述抽象事物时“试图像计算机一样思考”。这些对用户来说都是不自然和不方便的。

通过 Bing 搜索,矢量化工作已经扩展到搜索引擎中超过 1500 亿条数据,来提升传统关键字匹配算法的效果,主要包括单个单词、字符、网页代码段、完整查询和其他媒体信息。一旦用户进行搜索后,Bing 可以扫描索引向量并提供最佳的匹配结果。矢量分配使用深度学习技术进行训练,然后持续改进。模型会在搜索后考虑用户最终点击的输入,以便更好地理解搜索的含义。

微软专家表示,虽然矢量化媒体和搜索数据的想法并不新鲜,但最近才有可能在大规模搜索引擎(如 Bing)上使用它。“Bing 每天会处理数十亿个文档,现在的想法是我们可以将这些条目表示为向量,并在 1000 亿个以上的大规模索引中进行搜索,以便在 5 毫秒内找到最匹配结果。”微软 Bing 团队程序经理 Jeffrey Zhu 表示。

为了更直观的描述这一点,Majumder 详细解释道:一堆可以延伸到月球的 1500 亿张的名片中,眨眼之间,可在使用了 SPTAG 算法的 Bing 搜索里一个接一个地找到 10 张不同的名片。

搜索算法 SPTAG 及项目简介

该项目库假设使用向量来表示样本,并且可以使用 L2 距离或余弦距离来比较向量。为查询返回的向量是与查询向量具有最小 L2 距离或余弦距离的向量。

SPTAG 提供两种方法:kd-tree 和相关邻域图(SPTAG-KDT)与平衡 k-means 树和相关邻域图(SPTAG-BKT)。 SPTAG-KDT 在索引构建成本上更便宜,而 SPTAG-BKT 在高维数据中的搜索精度方面更好。

算法流程

SPTAG 的灵感来自 NGS 方法[WangL12]。 它包含两个基本模块:索引构建器和搜索器。 RNG 建立在 k 近邻图[WangWZTG12,WangWJLZZH14]上,用于提高连接度。平衡的 k 均值树是用于替换 kd 树,以避免在高维向量中,kd 树对距离估计不准确带来的束缚。搜索首先在空间分治树中搜索,以找到可以在 RNG 中开始搜索的若干种子数,然后迭代地在树和图中进行搜索。

强调

最新更新:支持在线矢量删除和插入

分布式服务:在多台计算机上搜索

构建

  • 环境配置

640?wx_fmt=png

  • 安装

640?wx_fmt=png

它将在代码目录中生成一个 Release 文件夹,其中包含所有构建目标。

640?wx_fmt=png

它将在构建目录中生成 SPTAGLib.sln。 在 Visual Studio(至少 2015 年版本)中编译ALL_BUILD 项目将生成一个包含所有构建目标的 Release 目录。

验证

运行 Release 文件夹中的 test(或 Test.exe)以验证所有测试。

未来

将矢量用于视觉、音频搜索

Bing 团队表示,他们希望开源产品以用于企业或面向消费者的应用程序,从而识别基于音频片段的语言或者用于图像繁多的服务,例如让人们拍摄鲜花等照片的应用程序,然后确定它是什么类型的花。对于这类应用,缓慢或不相关的搜索体验容易失去用户。

“甚至需要几秒钟的搜索都会使应用程序无法使用,”Majumder 指出。该团队还希望研究人员和学者能够利用它来探索其他领域的搜索突破。“我们才开始在这个深度上探索矢量搜索的真正可能性”。

原文地址:

https://blogs.microsoft.com/ai/bing-vector-search/ 

https://github.com/microsoft/SPTAG


5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。

更多重磅嘉宾请识别海报二维码查看。目前会议8折预售票抢购中,点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。

640?wx_fmt=jpeg

推荐阅读

  • 商汤“变法”:推中小学AI教材,mini自驾车,要打造AI时代的「清明上河图」

  • 转行AI成为技术大牛,你需要理解这两项技术!

  • 干货 | 超实用的PyTorch常用代码段合集

  • 直接上手!不容错过的Visual Studio Code十大扩展组件

  • Rust今天4岁啦, 为什么越来越多的知名项目用Rust来开发?

  • 英特尔再爆重大芯片漏洞,苹果谷歌微软相继中招!

  • 刺激!华为程序员年薪200万 ?真相让人心酸!

  • 腾讯面试:一条SQL语句执行得很慢的原因有哪些?

  • 程序员专属小情话,哎呦,不错哦!| 程序员有话说

  • 普通家庭走出信息学才子,抱病参赛夺世界信奥亚军 | 人物志

相关文章:

【Qt】Qt再学习(五):HTTP Example(HTTP下载文件的示例)

1、简介 此示例演示一个简单的HTTP客户端如何从远程主机获取文件。 2、说明 QUrl:url抽象类 QUrl::fromUserInput:从QString转换成QUrl QNetworkAccessManager:网络访问API围绕一个QNetworkAccessManager对象构造,该对象保存其发送的请求的通用配置和设置。创建QNetwork…

面对互联网一线大厂,这些技术你需要了解!

2019 年 5 月 26 - 27 日,由中国 IT 社区 CSDN 与数字经济人才发展中心联合主办的第一届 CTA 核心技术及应用峰会将在杭州国际博览中心召开。近 500 名开发者将齐聚于此,共同交流探讨机器学习和知识图谱的技术及行业落地趋势。会议将聚焦机器学习和知识图…

Android定制:修改开机启动画面

转自:https://blog.csdn.net/godiors_163/article/details/72529210 引言 Android系统在按下开机键之后就会进入启动流程,这个过程本身需要一些时间,而面向用户的往往是厂商定制的一些宣传用的比较绚丽的启动画面。我们在定制自己的系统时&am…

盛大游戏卷入“沙巴克”商标之争

4月12日上午消息,沸沸扬扬的“沙巴克”商标之争再次升级,盛大游戏(微博)也被卷入其中。美国咖啡连锁企业星巴克以“商标侵权”为由将国家商标评审委告上法庭,认为其批准的“沙巴克”商标和“星巴克”近似,要求法庭复审。[/p][p23,…

iOS开发经验总结

在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑)。 一、 iPhone Size 二、 给navigation Bar 设置 title 颜色 123UIColor *whiteColor [UIColor whiteColor];NSDictionary *dic [NSDictionary dictionaryWit…

焦虑的 BAT、不安的编程语言,揭秘程序员技术圈生存现状!

【编者按】在迭代不休的技术圈中,仅在过去的一个月期间,我们见证了有史以来第一张黑洞照片的诞生;经历了为让人义愤填膺的 996;思考了作为程序员的年龄之槛;膜拜了技术大神的成长历程;追逐了如编程语言、人…

【Qt】Qt再学习(六):Qt中JSON保存和加载的示例

1、简介 该示例演示如何保存和加载JSON格式文件,涉及到的类有:QJsonDocument, QJsonObject and QJsonArray. 2、说明 2.1 QJsonDocument QJsonDocument类提供了一种读取和写入JSON文档的方法。 使用QJsonDocument::fromJson()将JSON文档从其基于文本…

H3C ER3260通过Console口重装软件修复路由器

公司在用的H3C ER3260路由器突然罢工,所有LAN、WAN口均无反应,但加电正常,初步判断硬件应该是好的,联系维修要价500,新买一个2000,于是决定自己修下看。 通过配置线连接Console口恢复出厂设置,不…

【Qt】Qt再学习(七):QLocalServer、QLocalSocket

1、QLocalServer QLocalServer类提供基于本地套接字的服务器。 简单的使用方法:首先创建本地服务器并监听 QLocalServer* server = new QLocalServer(this);server->listen("HelloWorld");当有客户端连接时,触发QLocalServer::newConnection信号,在槽函数中处…

百度宣布:搜索业务总裁向海龙离职,另回购10亿美元股份

整理 | 一一出品 | AI科技大本营(ID:rgznai100)5 月 17 日,百度公布 2019 年第一季度未经审计的财务报告。本季度百度营收 241 亿元(约合35.9亿美元),同比增长15%,不计入此前宣布的资产剥离交易…

Oracle SQL高级编程——分析函数(窗口函数)全面讲解

Oracle SQL高级编程——分析函数(窗口函数)全面讲解注:本文来源于:《Oracle SQL高级编程——分析函数(窗口函数)全面讲解》概述分析函数是以一定的方法在一个与当前行相关的结果子集中进行计算,…

学习html5系列之比较典型的div滥用

在做网站过程过比较典型的div滥用,在很多网站中都可看到如下比较典型的div滥用情况。 div滥用情况: 网站首页新闻中心网站案例产品中心在线招聘联系我们优化后可实现相同效果: 网站首页新闻中心建站套餐产品中心关于我们联系我们 最上面的代码…

【Qt】Qt再学习(八):Media Player(Qt实现多媒体播放器)

1、简介 Media Player演示了一个简单的多媒体播放器,该播放器可以使用各种编解码器播放音频和/或视频文件。 涉及到的类有 QMediaPlayer、QMediaPlaylist、QVideoWidget、QVideoProbe、QAudioProbe 2、QMediaPlayer QMediaPlayer是一个媒体播放的高级类。它可以用来播放诸如…

一次改变未来10年人生的机会

还记得陆奇在十问里说过马拉松和短跑的概念吗?你需要设计属于你自己的工作和生活节奏,一方面你可以保持高速,这个高速可以给你带来最大的效率。另一方面也需要可以应对突发变化,可以时不时的“冲刺”一下 (比如偶尔过度…

SQL Server 2008之WaitFor

在SQL Server 2005以上版本中,在一个增强的WaitFor命令,其作用可以和一个job相当。但使用更加简捷。 看MSDN:http://msdn.microsoft.com/zh-cn/library/ms187331.aspx 语法为:WAITFOR { DELAY time_to_pass | TIME time_to_execute | …

“搞垮” 微博服务器?每天上亿条用户推送是如何做到的

记者 | 琥珀出品 | AI科技大本营(ID:rgznai100)想必国内绝大多数网民都有新浪微博的用户账号。据最新数据显示,2018 年第四季度财报,微博月活跃用户突破 4.62 亿,连续三年增长 7000 万 ;微博垂直…

【Qt】Qt再学习(九):并发 QtConcurrent、QFuture、QFutureWatcher

1、QtConcurrent 该QtConcurrent命名空间提供高层次的API,使人们有可能不写使用低级线程原语的多线程程序,如互斥,读写锁,等待条件或信号。用QtConcurrent编写的程序会根据可用处理器内核的数量自动调整使用的线程数。这意味着,当将来在多核系统上部署时,今天编写的应用…

Git——如何将本地项目提交至远程仓库(第一次)

1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库。 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“.”,意为添加文件夹下的所有文件(夹)。 g…

连接不上ftp解决方案

今天做linux下的ftp实验,总结一下解决连接不上ftp的解决方案:连接不上ftp解决方案:远程连接vsftp服务时,系统提示:用户没有权限访问。防火墙已经关闭,ftpusers和user_list文件已经删除了root用户。再使用命…

Python3破冰人工智能,你需要掌握一些数学方法

为什么要把数学建模与当今火热的人工智能放在一起?首先,数学建模在字面上可以分解成数学建模,即运用统计学、线性代数和积分学等数学知识,构建算法模型,通过模型来解决问题。数学建模往往是没有对与错,只有…

【Qt】QtCreator无法调试终端程序,启动报错SIGSTOP

1、问题描述 使用QtCreator调试终端程序时,因为收到信号SIGSTOP 而退出,无法调试程序。 2、解决方法 解决方式是,设置GDB不处理SIGSTOP , 在QtCreator中进入GDB命令设置窗口: Tools -> Options -> Debugger -…

Centos7 下 配置 rsync 以及 rsync+inotify 实时同步

Centos 7 下 配置 Rsync 以及 rsyncinotify 实时同步 rsync介绍 rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。 rsync的官方站点是htt…

网站排名下降的原因

做站长,都经常遇到网站被降权、排名下降、百度快照后退等问题,这些也是企业网站最常见的一些问题,企业网站为何会被降权,通常是什么原因造成的,下面我在这里分享下我在北大青鸟学到的一些知识,简单的和大家…

@程序员,Python 3还有哪些未Get的潜藏技能?| 技术头条

作者 | Vinko Kodžoman翻译 | Monanfei编辑 | 阿司匹林,Rachel【导读】在 Python 3 推出后,人们开始逐步将基于Python 2 的代码迁移至 Python 3 。但在迁移过程中,很多代码都未能使用到 Python 3 提供的新功能。本文作者介绍了相关功能的介绍…

【Qt】QtCreator中配置clang-format

1、安装clang-format sudo apt install clang-format2、添加插件Beautifier 在QtCreator–>Help–>About Plugins…中添加插件Beautifer,添加后要重启QtCreator ClangCodeModel是否需要不清楚?反正我添加了 3、配置Clang Format 在Tools --> Options…–>Beau…

DVWA提示Unable to connect to the database.

因为数据库更换了默认端口,所以得在DVWA也进行相应的设置,但是设置的位置错了,导致一直连接不上数据库。 后面看到注释才发现是这个设置仅限PostgreSQL/PGSQL使用,至于Mysql更换端口以后直接设置在server地址后面即可。 刷新一下&…

LINQ to SQL语句之 Count/Sum/Min/Max/Avg

Count/Sum/Min/Max/Avg操作符 适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。 Count 说明:返回集合中的元素个数,返回INT类型;不延迟。生成SQ…

【Qt】Qt再学习(十):鼠标拖拽(dragdrop)QGraphicsItem示例

1、QGraphicsItem实现拖拽源 实现方法,继承QGraphicsItem,重载鼠标按下、移动、释放事件处理函数 class ColorItem : public QGraphicsItem {... protected:void mousePressEvent(QGraphicsSceneMouseEvent *event) override;void mouseMoveEvent(QGraphicsSceneMouseEvent…

Java并发 -- JMM

文章基于jdk1.7,通过学习《Java并发编程的艺术》,对Java内存模型的理解 并发编程模型的两个关键问题 线程之间如何通信线程之间如何同步上面所说的线程指的是并发执行的活动实体。 线程之间的通信机制有两种:共享内存和消息传递 在共享内存的…

开源!mathAI手写拍照自动能解高数题,还不快试试?

作者 | 红色石头转载自 AI有道(id:redstonewill)让我们不妨先来盘点下从 2016 年起过去三年间 Google I/O 开发者大会亮相的重磅 AI 产品:深度好玩!文章开始红色石头先在草稿纸上写一道高数微积分题目给大家看看如何求解&#xf…