什么是矢量数据库?

矢量数据库是指任何可让您存储和查询向量嵌入或非结构化数据(如文本、图像或音频)的数字表示形式并将其编入索引的数据库。

什么是向量嵌入?

矢量嵌入是非结构化数据的有用表示形式,它们在映射内容时使语义相似度通过 N 维矢量空间中的距离来表示。这样,您就可以轻松搜索相似度、在知识库中查找相关内容,或检索与用户生成的复杂查询最匹配的项。

虽然一些专用数据库仅支持矢量嵌入,但另一些数据库除了支持矢量嵌入之外,还支持许多其他数据和查询类型。若要根据丰富的真实数据构建生成式 AI 应用,能够支持各种数据类型和查询类型这一点至关重要。随着使用矢量嵌入进行语义查询的优势越来越明显,大部分数据库都将添加矢量支持。未来,我们相信每个数据库都将是矢量数据库。

了解 Vertex AI 的 Vector Search如何帮助构建高性能生成式 AI 应用。Vertex AI 的 Vector Search 基于可伸缩最近邻搜索 (ScaNN),ScaNN 是 Google 研究团队开发的一种可伸缩且高效的矢量搜索技术,非常适合处理大型数据集,也可满足实时搜索需求。观看此视频详细了解 Vector Search 和嵌入,并参考此快速入门指南以开始操作。

矢量数据库的工作原理

与其他数据类型一样,高效查询大量矢量也需要索引,而矢量数据库支持专门的矢量索引。与具有单一逻辑排序的许多其他数据类型(如文本或数字)不同,矢量没有与实际用例相对应的自然排序。最常见的用例是,根据点积、欧几里得距离或余弦相似度等距离指标,查询与其他矢量最邻近的 k 个矢量。此类查询称为“k(精确)近邻算法”或“KNN”查询。

遗憾的是,没有通用的算法可以实现高效的 KNN 查询 - 为了确保找到给定矢量 q 的 k 个最邻近项,需要计算 q 与所有其他矢量之间的距离。不过,有一种有效的算法可以查找 k 个近似最邻近 (ANN) 项。这些 ANN 算法会牺牲一定程度的准确率(具体来讲就是召回率,算法可能会省略一些实际最邻近的项)来大幅提升速度。由于许多用例已经认为计算矢量嵌入的过程有些不精确,因此它们通常愿意牺牲一定程度的召回率来换取性能的大幅提升。

为了能够根据与其他矢量的距离来对矢量执行 ANN 查询,在构建矢量索引时通常将邻近矢量的聚类分组在一起。可以将常见的矢量索引类型构建为以下结构:列表,每个列表表示给定聚类中的矢量;图表,其中每个矢量都连接到几个最邻近项;树,其中的分支对应于父节点所属聚类的子集;等等。每种索引类型在查找速度、召回率、内存消耗、索引创建时间等方面各有利弊。

不过,大部分数据库查询不仅仅是基于语义相似度。例如,某位用户可能想寻找这样一本书:大致讲述“小朋友和小狗之间的暖心故事”,价格在 $20 以下,并且要有平装本。专用矢量数据库可能会提供一些有限的额外过滤功能(有时称为“限制”),而通用数据库可以使用 SQL 等标准语言编写丰富的谓词,与矢量相似度排序结合使用时,可以实现非常强大且表达能力出色的查询。

矢量数据库的使用场景

向量嵌入能够表示非结构化数据的语义含义,结合矢量数据库高效搜索邻近矢量的能力,可实现许多重要的应用场景:

  • 从聊天记录中查找与当前对话相关的消息,从而帮助 AI 赋能的聊天机器人拥有“记忆”功能
  • 在海量体育赛事转播档案中,根据简单的描述,比如“越过后卫接球,触地得分”,找到相应的视频片段。
  • 查找与用户以前的已购商品类似且符合用户的价格和风格偏好的商品
  • 查找与“更换真空吸尘器滤芯”等任务相关的文档,以便依托 AI 技术的助理能够提供符合事实的相应回答

矢量数据库的优势

矢量数据库之所以重要,是因为它们可以用来解决那些难以或无法单纯靠关系谓词或文本搜索技术解决的各种问题。

矢量数据库非常适合生成式 AI 应用,因为它们可以轻松检索关键业务和应用上下文(例如相关的聊天记录或特定于业务的非结构化内容),从而帮助 LLM 响应复杂的用户查询。

还可以让用户轻松地使用自然语言搜索内容或按示例进行查询。

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。
与 Google Cloud 销售专员联系,详细讨论您的独特挑战。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。

Google Cloud
  • ‪English‬
  • ‪Deutsch‬
  • ‪Español‬
  • ‪Español (Latinoamérica)‬
  • ‪Français‬
  • ‪Indonesia‬
  • ‪Italiano‬
  • ‪Português (Brasil)‬
  • ‪简体中文‬
  • ‪繁體中文‬
  • ‪日本語‬
  • ‪한국어‬
控制台