郭人通:向量数据库及 Embedding 流水线
分享嘉宾:郭人通博士 Zilliz 合伙人&研发总监
编辑整理:梁胜文 中科院计算所
出品平台:DataFunTalk
导读: 随着移动设备与应用的繁荣发展,非结构化数据例如图像、视频、音频等呈现爆炸式增长。针对海量的非结构化数据进行分析与检索成为企业关注的焦点。相比于结构化数据,非结构化数据蕴含的语义信息无法被直接识别。因此,如何有效地提取非结构化数据的语义信息,以及如何实现大规模、高精度、高吞吐的非结构化数据分析与检索,是非结构化数据领域一个关键问题。今天,我们将分享针对非结构化数据分析与检索设计的向量数据库Milvus以及数据Embedding的生成框架Towhee。这两个框架为上下游关系,Towhee主要支撑 embedding 流水线,来实现数据的语义编码与向量化。Milvus负责大规模的向量检索。
今天的介绍会围绕下面几点展开:
- 非结构数据分析与检索背景
- 通用语义检索框架介绍
- Milvus – AI赋能的向量检索数据库
- Towhee – AI赋能的Embedding生成
01 非结构化数据分析与检索背景
1. 非结构化数据发展趋势
随着移动设施的不断发展,非结构数据分析在工业界越来越重要,主要原因在于:
- 现有的数据系统,在数据采集、传输、存储等方面相对之前有明显的性能提升。传统的数据采集系统,往往采用关系型数据库,更多面向表格化或者结构化的数据,以基础的数值或者字符型等数据形态来保留数据。随着数据的复杂度提升,数据的存储逐渐由原有的结构化方式,逐渐转向了半结构化的存储方式。随后,逐渐过渡到现在比较通用的非结构化数据,例如图像、视频,音频等。还有一些领域内的非结构化数据,例如化学分子式,社交网络,图数据库等。
- 现在非结构化数据已经开始在工业界进行大规模落地。然而,相对于结构化数据,非结构化数据内部包含的语义信息十分丰富,同时这些信息往往都杂糅到一起,无法被精确甄别提取。例如,对于图像数据而言,人脸识别往往关注图像中的人脸特征信息,而服务类的则更关注人脸的表情变化。由于传统的数据处理算法很难从非结构化数据中有效提取其所蕴含的语义信息,因此,现有的算法往往采用基于AI的方案来进行语义的信息提取。
2. 非结构化数据容量发展趋势
由上图我们可以看出,目前非结构化数据增长趋势非常明显。2020年,全球一共有40,000EB的数据,而其中非结构化数据占比则高达80%。针对如此庞大的非结构化数据进行分析与检索,是基础软件行业所面临的一个重要机遇与挑战。具体地说,传统的结构化数据分析的基础软件经过60年的发展,软件栈以及生态已经发展十分完善。然而,对于占比高达80%的非结构化数据,目前的基础软件则主要关注于基于AI的训练,推理框架等。面向非结构化数据分析,以及数据库等的基础软件则十分匮乏。针对此问题,我们提出了Milvus和Towhee,来实现对非结构化数据的分析。
02 通用语义检索框架介绍
1. 数据分析模型与搜索框架
为了详细描述非结构化数据分析与检索框架,我们以针对文本的数据分析基础软件ElasticSearch为具体的例子来展开。由图中可以看出,一个非结构化数据分析框架可以看成由两部分组成:
- 向量化,对于非结构化数据(文本数据),通过向量化算法,映射到一个向量空间。
- 向量空间中,实现搜索的剪枝,索引的构建查询。
然而,上述的框架仍然存在一个关键问题,即现有的搜索依然是在显式的语义空间进行向量化。具体来说,例如在文本中,往往采用单词出现的频率作为特征向量。然而,图像和视频等数据,与文本不同,很难利用词频这种天然的特征来做显式的向量化。
我们如何实现非结构化数据框架的泛化呢。
如图所示,在第一步,我们引入神经网络模型,而不是传统的词频特征等。对于不同的数据类型,例如图像,视频以及化学分子式等,我们都可以构建对应的神经网络模型来直接将数据映射到隐式语义空间中,无需原始数据具有特定的语义单元。与显式语义相比,隐式语义不再是简单的一个词,而是一个映射函数提取的语义特征。
在第二步中,在向量化空间进行数据分析时,与在显式语义中利用词频信息对比不同,而是利用向量本身的特性,例如距离的表达,来进行数据的分析与检索。
从整体来看,AI驱动的非结构化数据分析。主要分为三层:
- 原始数据层 ,主要是各个设备采集到的原始数据。
- 向量化层 ,该层主要利用AI来将原始的数据层构建成为基于向量的表达形式,避免直接对原始数据层进行分析,从而造成成本的开销过大。
- 分析与检索层 ,该层主要利用向量化层所形成的向量数据库,来实现高效的数据检索。
以推荐系统为例,业务需要将每个用户进行向量化,同时,系统也需要将每个商品映射到同一个向量空间中。例如在常见的推荐系统中,需要被推送的内容会被向量化,形成一个大规模的向量化数据库。用户刷新一次,系统在后台会将用户行为特征进行向量化,并在向量化数据库中按照业务的需求选择对应的距离度量指标,例如欧式距离或者内积,来实现用户偏好的相似向量的搜索,进而实现新闻或者商品推荐。这样一个过程是现在推荐系统中粗排阶段一个非常重要的基础。
同时,我们也可以看到,在图像检索领域,类似于拍立淘这样的业务,用户想知道一个商品谁在卖,多少钱。在这个应用的背后,如图所示,用户拍照,然后利用神经网络对图像的主题进行识别,然后进一步利用神经网络提取特征向量进行语义的相似度匹配。同样,在生物制药领域,通过将化合物结构进行编码,在计算相似度时,主要关注化合物之间子结构的相似度。
目前,全球有超过1000家公司使用Milvus + Towhee 的方案解决非结构化数据分析与检索相关的问题。除上述例子外,还涵盖数据去重,安全,版权保护,问答系统,金融分析等领域。整体上看,主要关注两件事情:
- 依据业务的需求,将海量的数据进行语义向量化;
- 将传统的业务需求转换成为向量空间内的数据搜索的问题。
03 Milvus--AI赋能的向量检索数据库
Milvus主要是针对海量非结构化数据分析与检索而设计的。目前项目是LA AI基金会的毕业项目。Milvus目前已经进入到2.0版本。目前版本,主要是将日志系统独立出来,成为整个系统的主干。由于整个系统是面向分析类的,因此Milvus主要采用最终一致性模型。由于底层模块有很多只读的引擎,因此,Milvus会维护统一的日志序列以及对应的时间戳。同时,为下面的分析组件提供统一的订阅,并提供MVCC的支撑。
如图所示,整个系统的架构分为四层:
- 第一层主要负责元数据管理等;
- 第二层为系统写的部分,包含日志发布等;
- 第三层为系统的分析组件,这些分析组件作为系统的日志订阅,具有较强的解耦性;
- 第四层则为数据持久化存储部分。
这个结构设计,不仅仅能够实现系统的结构解耦和系统的快速演进,同时还可以帮助我们更容易实现基于协处理器的框架。主要原因在于,目前的非结构化数据处理基础软件,发展速度很快,需求更新快。仅仅支持向量化分析是远远不够的,还需要和传统的KV数据库这些树状的结构结合,来实现点查,范围查询等。同时,还有和ES支持的文本查询等业务进行结合等。通过将这些传统的查询引擎以订阅的方式与Milvus进行结合,可以实现与Milvus共为协处理器这样一个框架,一起协作完成非结构化数据的处理与检索。通过这样一种方式,Milvus可具有强大的扩展能力与可裁剪性。
在日志侧,我们设计了流批一体的处理方法。首先,在流这一端,上面提到过,我们的组件可以实现灵活的实时的订阅。同时,非结构化数据的规模十分庞大,数十亿级别的数据非常常见。对于批形式的处理,Milvus会将数据依据列式的方式进行组织,然后通过批的方式进行处理,以便挖掘数据的局部性,提高数据的处理能力。
在部署方面,我们做了系统功能、存储引擎,以及系统组件之间通信的解耦,来适配不同的部署环境的需求。例如,对于单机环境,系统组件之间可以实现本地的信息通信,通过协程的方式进行通信,来降低通信的开销。而对于大规模的集群部署,则通过云原生的方式进行适配,来适配大规模,高可用的数据处理需求。现在偏向AI的数据处理,由于用户开发的习惯,则是从单机环境,逐渐过渡到集群环境上。为了使得用户在不同平台上具有一致的使用体验,我们提供了统一的数据格式,避免数据迁移出现的额外成本。
Milvus框架的经历,从最初18年产生初步的想法,到去年3月份贡献到LF&AI基金会,今年6月份,从基金会顺利毕业,那么在今年的年末,我们将会迎来Milvus2.0的发布。新版本具有比较多的特性。首先,Milvus会支持字符串的类型,支持混合的分析。其次,是面向向量语义的组合,来更好挖掘数据内部访问的局部性。同时,还支持数据过滤等信息查询能力。最后,我们还提供了一个工具,来帮助用户更好地实现Milvus的运维。此外,我们还将Milvus与K8S进行结合,系统内部的组件将会打包成服务,由K8S进行统一的管理。
04 Towhee--AI赋能的embedding生成
Towhee是Milvus的上游软件框架,主要目标是实现非结构化数据的向量提取。构建的主要原因在于,现有的工业界软件还没有一个统一完整的数据向量化提取框架。
Towhee将会引入AI相关的一系列算子,同时涵盖了多种不同的领域。例如图像目标检测任务,自然语言处理等。
Towhee的框架如图所示。分为两个部分:
- hub,该hub中包含由社区打造的标准化算子以及对应的处理流程。用户可以依据需求,来组合不同的算子实现对应的数据处理流程。
- 本地部署方面,我们提供一个支持embedding流的处理流程。该流程以图的形式进行表达。图以用户提供的数据作为输出,以数据对应的embedding向量作为输出。在这个数据流中,我们对算子以及pipeline进行了抽象。针对不同的任务,用户可以采用不同的算子以及pipeline进行实现。算子之间的编排以及数据依赖由Towhee来统一进行管理。
针对不同的用户群体,Towhee整体分为四层:
- 面向普通开发者,提供一些标准的处理流程,供用户直接调用,无需进行内部的软件开发。
- 针对高级的开发者,用户可以依据需求,对数据处理流程进行自定义。
- 针对行业定制的需求,用户可以依据框架提供的统一接口,可以实现自己定制的算子,并集成到pipeline中。
- 针对新颖的神经网络模型以及数据处理流程的开发者,来丰富Towhee对应的hub中提供的模型以及处理流程。
05 总结
非结构化数据的不断增长,驱动着基于AI的非结构化数据分析与检索技术的不断发展。本文提到的Milvus和Towhee,通过抽象基于AI的非结构化数据分析与检索处理流程,以Towhee来提取数据特征,Milvus来实现特征库的快速高效索引,来构建相互解耦的数据治理Pipeline。Milvus和Towhee的结合,将会进一步推进基于AI的给非结构化数据分析与检索的发展。
06 精彩问答
Q:Milvus的与同类工具,性能相比怎么样?
A:框架的性能与部署的环境规模十分相关。在单机环境下,则性能与FAISS库相比,性能十分接近,主要是系统的开销比较小。而对于生产环境而言,由于需要高可用,多节点分布式,会产生一些开销。在这种情况下,整体上来说,Milvus的性能延迟在ms级别。这个性能也与用户使用的数据规模相关。同样,业务可以依据具体的需求,比如性能,成本等方面,进行一个权衡。
Q:Milvus与Towhee的交互过程是怎样的?
A:Milvus与Towhee是上下游协同的,两者没有明确的关系,相互解耦。用户可以依据需求,选择使用Milvus或者Towhee,并依据自己业务,来替代其中任何一个。
分享嘉宾: