智能AI管道构建:类型化多维向量指南

本文详细介绍了CocoIndex对类型化多维向量的支持,包括一维/二维向量实现原理、与向量数据库的集成映射、多向量嵌入的实际应用场景,以及如何通过强类型保证提升AI工作流的性能和可维护性。

构建更智能的AI管道:类型化多维向量完全指南

CocoIndex现提供对类型化向量数据的强大灵活支持——从简单数值数组到深度嵌套的多维向量。该支持设计用于与高性能向量数据库的无缝集成,支持跨多种数据模态的高级索引、嵌入和检索工作流。

✅ 支持的Python向量类型

CocoIndex接受具有强类型保证的各种向量类型。注意CocoIndex会自动推断类型,因此在定义流时无需显式指定类型。仅在定义自定义函数时需要显式指定类型。

✅ 1. 一维向量

1
2
3
4
5
from cocoindex import Vector, Float32
from typing import Literal

Vector[Float32]                         # 动态维度
Vector[Float32, Literal[384]]          # 固定维度384

这些类型被解释为:

  • 底层Python类型:numpy.typing.NDArray[np.float32]list[float]
  • 维度感知:与Literal[N]使用时,明确强制执行维度大小

支持的数字类型:

  • Python原生类型:float, int
  • CocoIndex类型别名:Float32, Float64, Int64(它们是Python原生类型的别名,但带有CocoIndex类型注释以指示确切位大小)
  • numpy数字类型:numpy.float32, numpy.float64, numpy.int64

✅ 2. 二维向量(多向量)

1
Vector[Vector[Float32, Literal[3]], Literal[2]]

这声明了一个包含两行3元素向量的向量。这些被视为多向量(例如,每个点有多个嵌入)。

  • 底层Python类型:numpy.typing.NDArray[np.float32, Literal[3, 2]] 或嵌套 list[list[float]]
  • 语义:适用于每个项目的嵌入集比较、多视图表示或批处理编码等场景

🧠 什么是多维向量?

多维向量就是元素本身也是向量的向量——本质上是矩阵或嵌套列表。在CocoIndex中,使用Vector[Vector[T, N], M]表示,意味着M个向量,每个维度为N。M和N是可选的——CocoIndex不要求它们固定,而某些目标有要求,例如导出到向量数据库的多向量需要具有固定的内部维度。

这个概念在深度学习和多模态应用中至关重要——例如:

  • 图像可能表示为补丁级嵌入的集合
  • 文档可以分解为段落级向量
  • 用户会话可能是一系列行为向量

CocoIndex通过嵌套向量类型原生支持这些丰富表示,而不是将其扁平化。

🧭 多向量嵌入的使用场景

以下是多向量嵌入表现出色的场景:

🖼️ 1. 视觉:补丁嵌入

想象一个1024x1024图像由Vision Transformer(ViT)处理。ViT不是输出一个全局图像向量,而是每个补丁输出一个向量(例如8x8补丁→64个向量)。

使用案例:

1
Vector[Vector[Float32, Literal[768]]]
  • 196个补丁,每个具有768维嵌入
  • 支持局部特征匹配和区域感知检索

📄 2. 文本:带段落的文档

长文档拆分为段落或句子:

1
Vector[Vector[Float32, Literal[384]]]
  • 10个段落向量,每个384维
  • 比平均所有向量更好——保留上下文和结构

现在可以:

  • 在文档的子部分中搜索
  • 基于单个相关段落检索文档
  • 实现分层搜索或重新排序

👤 3. 用户行为:会话或时间序列

每个用户会话可以视为一系列操作、点击或状态:

1
Vector[Vector[Float32, Literal[16]]]
  • 会话中的20个步骤,每个由16维向量表示

在以下领域有用:

  • 电子商务:点击序列
  • 金融:时间序列嵌入
  • UX分析:多步骤交互

🧬 4. 科学与生物医学:多视图嵌入

分子或蛋白质可能具有多个构象、图或投影:

1
Vector[Vector[Float32, Literal[128]]]
  • 5种不同的视图或测量模态
  • 不仅通过单个向量比较分子,而且跨其潜在空间比较

🔍 为什么不使用扁平向量?

可以将2x3多向量如[[1,2,3],[4,5,6]]扁平化为[1,2,3,4,5,6]——但会失去语义边界。

使用真正的多向量:

  • 每个子向量保留其含义
  • 可以在子向量级别进行匹配/查询
  • 向量数据库可以跨多个嵌入评分,选择最佳匹配(例如,最接近的补丁、段落或步骤)
  • 即使外部维度可变,内部向量也可以具有固定维度——这很常见,例如图像的补丁数量和文章的段落数量取决于特定数据

🧬 CocoIndex → 向量数据库类型映射

向量数据库是支持密集向量和多向量的流行向量数据库。CocoIndex将向量类型映射到向量数据库兼容格式如下:

CocoIndex 类型 向量数据库类型
Vector[Float32, Literal[N]] 密集向量
Vector[Vector[Float32, Literal[N]]] 多向量
其他任何类型 存储为向量数据库JSON有效负载的一部分

向量数据库仅接受具有固定维度的向量。CocoIndex自动检测向量形状,并将不受支持或动态维度向量映射到有效负载中。

🧾 CocoIndex数据模型回顾

在CocoIndex中,数据结构化为行和字段:

  • 行对应向量数据库点
  • 字段可以:
    • 是命名向量(如果符合向量数据库的向量约束)
    • 是非符合类型的有效负载的一部分

这种混合方法提供了结构化元数据的灵活性和向量搜索的强大功能。

最终思考

通过支持深度类型化向量和多维嵌入的能力,CocoIndex为向量数据管道带来了结构和语义清晰度。无论是索引图像、文本、音频还是抽象图表示——类型系统确保了大规模兼容性、可调试性和正确性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计