作者 | 蔡芳芳、罗燕珊、褚杏娟
采访嘉宾 | 鹤冲
深度学习的广泛应用,推动了传统数据搜索变革的发生。传统搜索多采用关键词等确定性的检索方法,更强调相关性的发现。而 AI 的应用加强了对非结构化数据(如语音、语言、图片、视频等)的处理能力,让搜索从原来的单模态转为多模态,从关键词检索转为向量化检索,从确定性转为相似性检索。
向量检索是一个值得关注的新兴技术领域,达摩院自研的向量检索引擎 Proxima 也已经成为阿里巴巴许多重要业务(如:淘宝推荐、优酷视频搜索、城市大脑等)背后的搜索技术支撑。
面向海量数据的搜索技术如何演进至今?向量检索技术为什么被需要?该领域现有的主流工具各有哪些优缺点?5 月 19 日,阿里巴巴达摩院资深技术专家肖允锋 (鹤冲)现身大咖说,与我们分享向量检索领域的现状、挑战和未来发展方向,并通过对比当前向量检索领域已有的工具,阐述如何进行技术方案选型。
以下内容来自当天的分享,InfoQ 作了不改变原意的编辑:
InfoQ:您从事大数据搜索技术相关研究和应用已经有十来年了,能否请您先带我们回顾一下大数据搜索的发展历程,随着数据量的暴增、搜索需求的变化,搜索技术是如何不断演进的?不同阶段出现了哪些关键的代表性技术/开源项目?
肖允锋:我印象比较深的是 2011 年的深圳高交会,主题关于大数据和云计算,那次算是一个里程碑,因为那一年可能是大数据和云计算被普遍认识的一年。
那会有做大数据业务的主要是各大互联网公司,数据一大,涉及到的则是需要怎么基于资源去做计算,从 AWS 等等开始。2010 年前后有一些比较重大的事情,谷歌比较早就开放了一些大数据技术的核心理念,包括存储,有了存储之后,怎么去做 MapReduce 的计算,就开始有了大数据的处理模型。
那一年来看,更多的是先解决了大数据怎么存。原来大量的数据都是存在 DB 里的,比如关系型数据库,大家比较熟悉的像 MySQL,微软的 SQL Server、IBM 的 DB2 等等,但是到了后来发现,纯粹的关系型数据库没法 Cover 所有的大数据业务,再加上像刚刚所说,谷歌已经开放了它相关的一些技术理念,开源后社区可以围绕技术理念去不断开发,所以后来又出现了 Hadoop、HDFS,这样一来存储跟计算两个领域就做了一些大数据的基础。
因为没法用原来的关系型数据库去概括所有,为了跟它区分,就产生了 NoSQL 的概念。面向文档,MongoDB 可能用得比较多。再往后,因为数据不断地发展,包括以前的 Hadoop 计算模型不是特别能满足各大互联网公司的发展,就有了能够去加速的东西,包括现在大家常用的 Spark,即所谓的流式计算,可能流批还在不断地磨合之中。到后来整个大数据去统一的时候,就出现像 Flink 这样的框架,更多的是把流批计算统一的过程。当然现在又遇到了大数据有新变革的时代,现阶段可能又涌现了像 SnowFlake 这样的公司,他们更多的是面向“在云原生的情况下怎么去做”,用户也不需要关心以前的各种存储,包括计算是怎么做的。我把你放到云上面,就能够实现自动扩容,自动买、自动缩容等等,那现在就是说,怎么跟原有的一些基础设施去做深度结合的问题,这就是大数据处理、数据产品面对的一些问题。
InfoQ:向量检索技术是怎样兴起的呢?
肖允锋:向量检索如果非要去溯源,以前在七八十年代就开始有。我们经常说 AI 经过了 3 次发展,而且这 3 次都是算力的飞跃。80 年代那时候更多地遇到 kd tree,因为那时候的人也遇到了怎么去检索的问题。图片可能映射成向量,但是实际上去找的时候,那时候计算机还是很慢的,所以产生一些方法像 kd tree 等等。
但是那时候遇到的维度可能还不是特别高,就可能几十维的这种情况,但是随着发展 就发现,原来很多向量搜索,包括去检索的这些方法,像刚刚提到的 kd tree,包括一些量化的方法,去找的时候,会发现效果没之前证明的特别的高效,而且去实践的时候它可能跟数据分布关系特别大。在业内有一个特别著名的“维度灾难”,就是随着那个维度不断地上升,比如我们现在三维空间,四维,然后到五维到六维,到上百维,甚至到几万维,特别像 NLP 这种技术里面可能上万维的这种情况,这时候原来可能遇到的情况就是稀疏空间,在稀疏空间去检索的时候,它的效率就下降特别快,就变成说,我产生维度在那,我就自然要有一些新的方法去解决这个问题,这时候能不能用一些量化,包括一些聚类的方法。但其实如果把它去做归类的话,基本上可以分成三大类。
向量主要对数据集非常大的情况有用,数据集很小也不涉及到搜索的问题。对于很大的数据集,我们不想所有的数据都考察,那么能不能有一个路径可以快速去找到特定数据,这时候就有一类划分空间的方法。
但数学还有一个很奇妙的地方,就是能够做数学变化。因为多个向量合起来就是一个矩阵,它们本身形成了一个空间之后,能不能把这个矩阵做一个变换,如线性变换或产生某个矩阵,这种方法叫空间变换,简单讲就是把这么多的向量影射到更小的空间上。
因为在小空间,假设原来某个维数可能有几百维的向量,一影射变成了几十维的向量,算起来就更快。算起来更快的情况下,这一类的方式如 LSH,敏感哈希,或者是一些量化的方法,当然我们简单就可以把它归纳为空间影射,或者是空间变化的思想去做。
但是后来产生一些新的方法。打个比方,因为向量有些情况是为了找邻居,如果我知道我和你刚好是邻居,你和他刚好是邻居,那这时候就有人想了一些方法,你既然跟他是邻居,我先找到我,然后猜测他可能也是我的邻居的方法去做,这种就是简单把它归纳为:我把你这些关系先保存起来,这些关系可能形成一张图状的结构,我在这些图状的结构里面去遍地游走,用最快的方式把它找到,就可以归结为图状的东西去影射的,有保证实际的结构。
InfoQ:这种跟我们传统的那种搜索方式有什么样的关系?
肖允锋:你说的传统应该是指原来的像搜索引擎。专业名词上,我们叫倒排索引。里面有哪个关键词,我就通过这个关键词找到对应的那个文档。原来的传统搜索,基本上就是某个关健词就能确定有没有在这里面,要不就存在,全部找出来,要不就找不出来。那这种情况下可以基本上归结为是做一个很确定性的查找搜索。如果有一些布尔的,可能说我既要这个词,但是没有那个词,但又要另外一个词,这种我们叫有带一些组合条件的。
那么这时候就把各种条件各种组合,看着好像有一些逻辑关系,但实际上发现,它又是跟原来的那种确定性的是一致的,要不就是有文档,要不就是找不到。但是因为遇到向量,向量毕竟是数学上的一些表示,假设很理想的情况,我能够把每个实体,比如一些图片,甚至图片里面一些元素,能够通过数学的方式去表达出来,然后把它看成一个空间上的一些点,想象在一个数学空间上去查找到这个点。但是这前面还有一步,专业的名词叫 Embedding,相当于把一些所谓的非结构化的数据,可能是图片,还有文字,语音、视频这些东西变成数学上可以表达的向量之后,我们就把它称为 Embedding 的过程,包括一些现在搜索推荐经常应用的技术。
但是本身“变”这个过程并不是精确的,以前的传统搜索是确定性的,拿到关键词我就拿到了,但是从非结构化这些变过去的时候,假设它也是文本的情况下,我可能说了一句话,人的意识可能是模糊去理解的,AI 其实也是想尽量去模糊。假设也是文本的情况下 embedding,那么它的向量并不是一个百分之百准确去表达的,因为可能存在着一些模糊跟有误差的情况。就是因为它本身的这个特性,那么导致现在在做向量的时候,一种方式是强制找到最近的,但是有时最近的不表示最好的,当然相对近可能是相对好的,这时候就可以允许向量在查找过程中是有误差的。这么说就存在着检索取舍的问题,因为如果允许 1%的误差,那么其实是可以让这个搜索过程变得更快,用户的体验,包括人的体验是更好的。简单讲,我原来是确定性的检索搜索,现在是带有一些相似性的,带有一些概率性的搜索,这个是最主要的一个区别。
当然现在其实我们也没法完全把原来的搜索体系抛开,毕竟两者是相辅相成的过程。
InfoQ:向量检索技术的研发和应用现状分别是什么样的?
肖允锋:如果放在前几年,2016 年以前,这块也算是一个冷门领域。因为有些方法一直没突破,而且深度学习也是后来才开始广泛应用。那时候数据量还没上去,在搜索、推荐领域才慢慢开始尝试,但是到 17 年、18 年的时候,这个趋势是非常明显的。
视频映射向量、图片映射向量、语音映射向量这些技术也不断成熟,而且数据量也是越来越多,特别是现在短视频普及,各种视频搜索、图片搜索,就导致数据量很多,那么这一块的重要性就不断增加。在一些大的互联网公司也都普遍遇到推荐领域的一些东西,这两块冲击相当于链路上的非常重要的一环,因为我以前不用搜索,可能暴力匹配就解决了。目前的话,别人也意识到了这个问题,包括去做内核技术的很多,但也有一些公司包括开源的、去做服务化的。做内核技术的可能像 Facebook AI Research 这些实验室,包括谷歌的实验室都在做,国内的话,我们达摩院也都在做,我们也有不少沉淀的核心技术。
InfoQ:我们现在整体的应用情况,可以给我们介绍一下吗?
肖允锋:搜索推荐,买东西商品推荐、短视频推荐、用户的推荐,以前不会像现在用比较深入的深度学习、人工智能的方式去做。另外就是图片的相似性搜索,淘宝里有个照相的按纽,拍一张就可以在里面搜索。这是图片向量化之后,通过相似性的一些向量检索再去把它混合。另外就是很多人用的比如天猫精灵,当问某个问题,比如今天天气怎么样。如果按原来的传统搜索的情况下,就需要每个字去匹配它到底多少种话,但可能你用了一些相关的向量化技术之后,它的质量是模糊的,可能你换个问法去问今天天气如何,它就会查找相似性的问题。可能系统里面有一些相似性问天气怎么样,它就已经知道了,就会找到相似性的一些问答。所以它把原来要求非常准确的东西变成了只求相似的东西去查找就够了。
其实方方面面的还有很多,包括版权保护。比如视频指纹场景,你拍了这个视频有没有被别人盗了,音频指纹有没有被别人盗了,或者是有没有跟别人重复的。因为它应用的面挺广的,所以基本上可以说覆盖了整个 AI 相关的领域。只要涉及到 AI,并且产生的数据量非常大的情况下就会用到。再来举个例子,我们买东西有时候要填地址,比如在饿了么,要填送餐地址,经常就会发现你填几个字,完整地址就出来了。这个通过我们标准的一些地址库,发现这几个字是很相似的,然后就找到了,找到之后,不要求非常准确。
InfoQ:如果我们用采用技术采用生命周期(创新者、早期采用、早期大众、晚期大众、落后者)来评估向量检索技术,您认为它当前处在哪个发展阶段?为什么?
肖允锋:现在我觉得可能是处于技术刚起步、还要大规模去铺的阶段,介于大众应用跟一些研究领域之间,因为我们还要迈过一些坎。第一个除了要解决一些核心技术,因为毕竟还是大的一些互联网公司有应用,所以还要解决把这个东西能够做到更好的服务化,用户的易用性非常好。用户不需要关注你背后用了什么技术,就能实现大规模的应用。如果用户还需要去知道这个东西是用了什么检索,或者是用了什么搜索的方法,这样其实是不太有利于整个技术的发展的,所以理论上按照正常的发展,应该是我们这些相关领域的人越来越淡出,变成幕后的。
InfoQ:技术上的问题,有哪些需要克服的?
肖允锋:像我刚刚说的,因为它的应用程度非常广,有不同的 AI 模型,跟这种模型产生的向量化的数据分布是不一样的。而对于每一种数据分布,我都要尽量去调,就是没有一种方法可以对所有的东西,都能检索得非常好。因为刚刚说的,都是相似性的,有一定概率性的搜索。如果说每一种都做得很好,那就没有往下深研,但现在因为这些问题还没解决,让我能够去适用到各种数据,一套引擎摆上去,立刻就能用,然后也不用任何的调参之类的工作就能得到非常好的效果。
我们这边做了一些研究,我们看到的数据集非常多,就阿里巴巴内部来说,整个业务形态太大了,然后各种各样的数据我们都尝试了,就会发现遇到客户的一些问题。
另外是数据规模,现在数据规模主要还是解决低成本的问题。现在的模型越来越多,可能一张图片的表示可以有多个向量。假设里面有很多物品,我们叫图像的语义识别,从里面摘出各种物品然后再去做,实际它对应起来是可以做成很多向量的。这时候会产生一些数据爆炸,这一块的领域要说做得特别成熟的还没有,包括 MapReduce 这些模型的一些大数据处理、离线处理的这些组合,都是需要去解决的一些问题。
InfoQ:目前我们国内的一些企业可能在这方面研究的情况投入情况怎么样?
肖允锋:目前直接做检索算法技术的研究的话,我知道的可能就只有达摩院在做算法的。除了技术,我们还会做阿里内部的很多业务的应用等等。内核技术的话,就是一些算法技术的使用。你看到的只是怎么搜索,上面还有很多层面,怎么对外服务,还有引擎技术一些相关的。我的团队可能就更多地去做整体的东西。但目前主要还是就对内为主,就阿里内部。我们内部像淘宝推荐、整个后面的这些引擎也都是采用我们一些相关的技术去做。
InfoQ:目前有哪些主流的一些工具或者是技术方案可以给我们介绍一下?
肖允锋:目前开源的话很多人都会遇到过一些像 Facebook AI Lab 开源的东西,他们在 17 年就开源了,像 Faiss。Faiss 对大多数公司其实是基本能满足要求的。不像阿里有更精细的一些要求、对性能更高追求的话,Faiss 也是够用的,因为几十万的数据,或者是百来万的数据,基本都能 Cover 住的。但是数据量如果不断往上提,Faiss 还是会有一些瓶颈,但是它毕竟是开源,好的话可以依赖社区的力量,包括现在国内像京东,也有开源公司做 Milvus,基于原有的一些引擎,去做改进,让更多的用户更易用,这个对开源界来讲也是非常不错,因为毕竟大家用起来还是真的好。我们自己更多的是集中在阿里集团内部、或者蚂蚁集团等地方使用,主要做的还是 Proxima 相关的。
InfoQ:除了这些还有哪些好用,可能大家也不太了解的?
肖允锋:普通的一些公司数据规模也不是特别大,就会想说怎么把 Faiss 串起来。像做一些服务编排的,我记得有一个开源公司做 Jina 这些东西,做这些服务编排,使整个 AI 领域能够串起来,这个也是非常好的一个工具。因为我们毕竟并不只是说检索这一块,还有前面怎么去 embedding,把各种 AI 模型能够把它通过一个好的工具组合起来,因为现有的,包括 Tensorflow 里面有太多的模型,有的模型都是开放了一个组件。我们能不能通过一个串联的工具链把它串起来,这个对于很多开发者来说,还是比较能够很快上手。
InfoQ:一般的企业应该如何做技术选型?
肖允锋:一般企业去做的话可能有一定的门槛。坦白讲,现在这块领域,包括大数据领域,对传统企业是不太友好的。这些企业本身产生的数据量也是非常大的,但是现在遇到的一个情况是怎么这些企业对大数据的应用变得越来越好上手,让大数据、AI 搜索变得低门槛化,这个还是非常有挑战性的,而且可能存在行业变更的情况。
InfoQ:目前就是这块主要是一些头部企业在做?
肖允锋:对,因为有一定的技术门槛。大数据虽然说发展到现在也十几年了,至少十年以上的时间。但很多企业,包括传统企业对于怎么去应用,用来做什么,怎么去快速搭建,会遇到很多问题,并且也不知道这个行业是怎么去迭代。但实际上这一块它是不需要这些传统企业去过多思考的,反而应该是用已有的整个行业的体系去不断的推陈迭代,让易用性变得更好。
InfoQ:会不会跟这个业务的需要有关系?像直播短视频这块的兴起也带起了向量检索技术的发展。
肖允锋:这个是一点。我这里稍微解释一下,以前我们遇到的很多数据都是单单一个文字,某个 ID,性别是男还是女,处于哪个城市,这些叫做标签化的数据,因为打开标签,你可能是上海的,是北京的,非常清晰。但是我们遇到了图片,你怎么去描述一张图片,这是非常大的一个问题。你没法说我用一个语言描述,就是描述完之后,你根本没法生成这个图片。包括,让语音说一段话之后,它这些数据,没法用标签化或者是某个东西去描述它,这些就统称叫非结构化数据,而原来可以标签化的那些数据,我们叫结构化数据。
原来我们在 AI 算力不太好的情况下,人脸照片的识别的话,就抠这个人脸出来,想着怎么去把它变成结构化的数据,这个以前是挺有难度的,但随着 AI 算力增强,模型也非常越来越丰富了,现在在网上随便能找到一个开源的模型,而且做得也特别的好。非结构化有了处理的需求,刚好又遇到非结构化数据的不断生成,现在每个人每天都得拍多少照片,这些东西就变成了不断滚雪球的情况,对这块领域就需求越来越大了。
InfoQ:现在主要的一些研究方向可能是什么呢?
肖允锋:像现在的一些研究方向,除了我前面提到的一些难点之外,还有说到向量技术可以分为三大类,而近些年可能更多的在一些图计算,包括一些流式计算上面研究。遇到大量的数据,要能够像普通的索引一样,能够实时落地,并且能够实时被检索出来。另外就是能够快速做图结构上面的一些删除。
前面也提到,传统搜索跟向量技术目前肯定不会是你死我亡的情况,所以现在更多是相关技术怎么去融合的问题,包括标签化怎么跟向量化技术去配合,达到想要的检索情况。其他的一些就比较笼统了,可能在分布式计算,在一些高性能跟检索效率之间的权衡怎么去做等等。
InfoQ:您如何去看待未来大数据的检索技术的方向?
肖允锋:这个问题很大。我刚刚稍微提了大数据发展的历程,但是你会发现,传统企业对大数据有一定的技术门槛,而且一入大数据深似海,为什么?想想在大数据里面有多少技术组件。Hadoop、HBase、HDFS 这些存储的组件,还有现在的 Spark、Flink 等等,特别多,而且实际上还有一些垂域的,如果去深究的话特别多。
但是我觉得在发展到一定阶段之后,就会开始产生统一的过程,中国古话不是合久必分,分久必合。因为以前可能一些技术能力不够,一些理论证明也没有做得非常完善,那么到某些阶段,到某些阶段就会产生一些“合的情况”。我们简单讲,像 Flink 在做流批一体,也是统一大数据处理的某个过程。另外就是存储领域,这一块也是大数据领域会涉及到的,就整个存储体系怎么去做统一的过程。有了这两条线的统一之后,我个人觉得会形成一些大数据处理的产品,可能会对传统企业变得更加友好等等,让这些技术能跟原有的一些传统企业进一步融合。
大数据还会遇到基础设施的变化,比如说以前更多提到的是云计算,现在可能是各种容器化的技术,叫做云原生。传统数据库在设计的时候,包括以前的 MySQL,SQL Server,没有考虑实际在云原生上的一些部署,包括云原生的一些能力他没有把它很好去做发挥。这时候有一些数据产品,基于这些原因的产生了一些 Database 等等。这两条路可能就会不断碰撞,碰撞完之后可能会有一统江湖的时候。
InfoQ:您感觉这个过程可能会需要多久?
肖允锋:感觉暴风雨可能要来。毕竟这几年这领域也出现了一些百亿级的做大数据的数据库公司。在大数据来之前,大量的传统企业都是用 MySQ 去做的,在大数据之后,这一类可能也被统一成一类。因为原来的像关系型数据库也有一个统一的过程,并且形成一套统一的理论,关系型的数据库的理论。当然,现在只是说大数据出来之后,原来的可能满足不了,那就合久必分,就分了,分完之后我觉得肯定是会有个合的过程。
InfoQ:在 AI 领域有哪些技术趋势是我们需要特别关注的?
肖允锋:高校里面的学生,包括各种实验室,前几年可能有大量的学生在学习 AI 相关的东西。但是 AI 现在主要的问题是,第一个我说更加长远的,因为 AI 现在是比较没法完全用数学化的一些东西去推导跟解释,这也是为什么被大量的数学家觉得不可靠的一个原因,因为它属于不可解释的数学的一些东西。从工程看的话,现在 AI 的各种模型很多,门槛会变得会越来越低,在门槛越来越低的情况下,就怎么去做一些垂域的细分的应用,可能会变得会更加热门。我不一定要做万物搜索的东西,比如我可以用来识别工厂里面某个特别大的部件,准确率非常高,那也是非常能提高效率的应用。至于说什么 AI 能不能统治人类,目前还达不到这么牛。
再往细里就是超大规模的 AI 训练,目前还是需要的。现在 AI 是跟大数据绑定的,所谓的人工智能又是什么呢?半人工半智能的,就是既有人工又有智能,因为大量的模型在前期去做训练的时候,需要大量的标注,比如我说了什么话,这句话什么意思,全部先把它做完标注,先把一些答案对起来,再拿到模型里面去训练。再去深耕的话,就是能不能产生一些自训练,我输入的数据会越少,但是它也能够产生一些 AI 自动识别,感知层容易识别的一些东西。
InfoQ:对开发者来说,还有哪些可以重点关注的技术点?
肖允锋:像基于云原生的大数据的扩容处理、在线服务化等等,还有跟 AI 的结合。
领取专属 10元无门槛券
私享最新 技术干货