抖音大规模实践 火山引擎向量数据库技术演进之路

9158APP 0

在AI时代,如何利用好大模型是当前各行各业关注的焦点。矢量数据库作为大型模型的“存储器”,不仅可以提供数据存储,还可以通过数据检索和分析来增强大型模型的知识,成为生成式人工智能应用开发新范式的重要组成部分。

当你用图像搜索图片或用文字搜索文字时,数据库中存储和比对的不是图片和视频片段,而是通过深度学习等算法提取的“特征”。 “特征”提取的过程称为嵌入。提取的“特征”在数学中用向量来表示。矢量化的目的是通过矢量相似度来检索非结构化数据,使得矢量化后的数据能够更好地被AI模型理解和使用。矢量数据库是用于生成、存储、索引和分析机器学习模型生成的海量矢量数据的数据库系统。其典型应用场景包括:基于大语言模型的智能客服、基于企业知识库的问答、Chatdoc等工具应用。

Volcano Engine矢量数据库技术的演变

构建存储与计算分离的分布式架构

在抖音集团内部,早期的矢量化搜索引擎是围绕搜索、推荐和广告业务构建的。由于这些业务天然拥有巨大的数据规模,所以从一开始就需要思考如何在向量索引中支持数十万个向量索引。亿级数据的检索需求,比如图虫就有上亿张图片素材,数量规模已经超过了单机内存的极限。例如,对于1亿个128维的Float向量,在不考虑任何辅助结构的情况下,需要100000000*128* 4个字节,大约是48GB的服务器内存。

研发团队设计了存储和计算分离的分布式系统架构,对矢量数据进行分片和分布式编排。通过向量存储、批量构建和实时在线检索,可以解决一个向量多个索引的问题,支持多个,同时还可以节省索引构建资源,加快索引构建速度,显着提高稳定性的在线检索服务。对于用户来说,在抖音上搜索内容将会快速、准确。

计算核心性能优化

构建企业级矢量检索应用,数据量可能超过1亿,延迟在10ms以内,需要更快、更稳定的使用。因此,计算框架搭建起来之后,我们还必须关注它的核心,以及如何提供高性能的向量。专业的搜索服务,满足企业苛刻的需求。由于矢量化检索是典型的计算密集型和数据密集型场景,其优化方向主要集中在提高吞吐量、降低服务成本、提高稳定性等方面。通过减少内存占用、优化索引性能、优化CPU指令集计算、优化过滤和重排序等与业务相关的计算流程等一系列性能优化任务,该架构可以很好地解决各种业务场景下的离线和在线检索。相同检索精度下的计算需求、吞吐量和延迟较开源基线提升3倍以上,满足大规模线上业务的稳定性要求,被抖音集团大量采用企业。

但由于每个指标构建集群成本较高,且存在配置复杂等问题,研发团队进一步迭代框架,进行云原生改造,实现组件多租户,并提供自动化调度降低错误率的能力。加急交货。

矢量标量混合搜索功能

矢量数据库在业务场景中使用时,矢量数据通常与结构化数据结合使用。例如,将文档表示为向量的同时,还需要存储该文档所属的部门,以便于检索时进行权限过滤。这种需求可以抽象为利用向量相关的结构化数据进行过滤。业界通常有两种解决方案:一种是后过滤,将前K个结果扩大一定倍数,检索更多向量,然后使用Filter结构化数据,留下前K个。该方法适用于结构化过滤占比较低、向量召回结果占比较高的场景;第二种是先过滤,先使用DSL对数据集进行过滤,然后在结果集中进行向量排序,适合DSL过滤结果较少的场景。

随着数据量的增大,这两个检索环节的性能都有各自的适用场景,但是执行过程中如何自动找到最合适的执行路径呢?为此,技术团队开发了DSL定向引擎,在检索过程中同时支持向量检索和DSL过滤(结构化过滤)。具有高性能、逻辑完整、按需终止、执行计划优化等特点。在混合查询性能对比行业评估中,矢量数据库在未过滤吞吐量、1%过滤吞吐量和99%过滤吞吐量上排名第一。

帮助大型模型知识库更快落地

大模型应用场景的不断扩展,催生了对矢量数据存储和检索的需求。将企业自身的数据转换为矢量数据会遇到很多困难。如何帮助业务选择开箱即用的矢量化模型,也影响着大模型应用的实施速度。技术团队开始尝试为知识库、生成式AI素材管理等场景的业务选择提供预设的向量化方法。大多数业务只需要选择适合自己数据的向量化方法,即可以使用原始数据直接写入向量数据库,并使用相同的模型将请求数据转换为请求向量进行查询。

矢量数据库技术全景

经过内部长期摸索和优化,抖音采用的矢量数据库产品结构如下图所示: 基于云基础设施,提供经过深度打磨和优化的各类引擎,提供从多模态数据写入的一切,到向量生成,再到在线检索的一整套全链路解决方案,以及上线后的灵活调度和监控。

火山发动机矢量数据库

场景化实施实践

经过抖音集团内部的技术实践,矢量数据库目前已覆盖50+业务线,基本支持抖音、今日头条、点车地、兔虫、火山引擎Oncall 智能问答、剪辑等所有内部矢量检索场景,主要业务场景包括智能搜索、AIGC跨模态检索、推荐去重、智能问答、关联排序、聚类分析和数据挖掘等,多场景库规模达百亿级。

下面以途虫和火山引擎Oncall智能问答为例,演示矢量数据库的应用实践。

智能搜索场景—— 图片搜索bug

图虫提供按图搜索的能力,致力于为用户提供正版素材内容和数字资产管理解决方案。目前,图虫创意库中拥有4.6亿张图片和超过2000万个高清视频。每天有大量用户搜索、查询图片、视频。亿级海量数据对矢量检索服务能力提出了更高的要求。业务如何灵活设置分片?当数据量大幅增加时,如何避免重新部署集群、加快索引构建、节省资源。

解决方案是提供端到端的图像搜索能力。其过程是首先将图像源数据上传到矢量数据库,对图像数据进行矢量化、存储并形成矢量索引。然后,用户上传待搜索的图像,上传后进行矢量化处理。将矢量化后的图像与矢量数据库进行比较,进行矢量检索和查询,得到相似度最高的结果返回给用户。

企业知识库场景——火山引擎Oncall智能问答

火山引擎Oncall智能问答可以辅助一线客服,为客户问题解答提供参考。火山引擎官网每天都会接到大量的客户售后电话。在高峰时段,每个人都要并行处理多个问题,需要能够快速排除故障并向客户反馈。对于工程师来说,面对很多技术门槛较高的产品,很难快速理解并做出判断。

解决方案是通过向量特征提取火山知识库文档和数据,然后存储到向量数据库中,应用LLM大语言模型和向量化知识库进行知识检索和比对,构建火山引擎Oncall智能问答,可以让聊天机器人的回答更加专业、及时,打造专属Chatbot。未来,火山引擎Oncall的FAQ知识将不断积累,知识库不断完善。同时,还可以提供大模型训练数据,处理大量客户咨询问题,实现机器人自动生成回复结果。

火山引擎矢量数据库技术经过抖音等企业实践打磨,已对外开放,赋能千行百业,加速AI大模型应用。随着用户需求和应用场景的多样化,矢量数据库将提供更丰富、更完善的功能,包括矢量算法的优化和创新、提高多模态数据的处理能力、提供多种多模态矢量化能力模型、跨模态检索等能力进一步优化了矢量数据库的通用性和易用性。如今,矢量数据库已经成为整个大模型生态系统的基础设施,支撑着大模型在行业内的推广和应用。火山引擎矢量数据库将不断创新,提供更加灵活多样的功能,满足不同用户的需求。