型付き多次元ベクトルでよりスマートなAIパイプラインを構築
CocoIndexは、基本的な数値配列から複雑で深くネストされた多次元ベクトルに至るまで、型付きベクトルデータに対する包括的なサポートを導入しました。この強化は、Qdrantのような高性能ベクトルデータベースとのシームレスな統合を促進し、多様なデータモダリティにわたる高度なインデックス付け、埋め込み、および検索ワークフローを可能にするように設計されています。
プラットフォームは現在、堅牢な型保証を備えたさまざまなベクトルタイプに対応しています。CocoIndexはほとんどのデータフローの型を自動的に推論できますが、カスタム関数には明示的な型指定が利用可能で、より詳細な制御を提供します。
サポートされるベクトルタイプ
-
一次元ベクトル: これらは単純な数値のシーケンスを表します。CocoIndexは、ベクトル長が変化する動的な次元、または常に384個の要素を含むベクトル用の
Vector[Float32, Literal[384]]
のような固定次元をサポートします。内部的には、これらはNumPy配列(numpy.typing.NDArray[np.float32]
)またはPythonリスト(list[float]
)に対応できます。サポートされる数値型には、ネイティブPythonのfloat
およびint
、CocoIndexの型エイリアス(正確なビットサイズ制御のためのFloat32
、Float64
、Int64
)、およびNumPyタイプ(numpy.float32
、numpy.float64
、numpy.int64
)が含まれます。 -
二次元ベクトル(マルチベクトル):
Vector[Vector[Float32, Literal[3]], Literal[2]]
として表現され、これらは他のベクトルで構成されるベクトルを意味します。例えば、それぞれ3つの要素を持つ2つのベクトルです。この構造は、データポイントごとに複数の埋め込み、マルチビュー表現、またはバッチエンコーディングが必要なシナリオに理想的です。それらの基となるPython表現は、通常、ネストされたリスト(list[list[float]]
)または多次元NumPy配列(numpy.typing.NDArray
)です。
多次元ベクトルの理解
多次元ベクトルは、本質的に要素自体がベクトルであるベクトルであり、行列やネストされたリストに似ています。CocoIndexは、Vector[Vector[T, N], M]
のようなネストされたVector
型を使用してこの構造を表現します。ここで、M
は内部ベクトルの数、N
は各内部ベクトルの次元を示します。M
とN
はCocoIndex内で動的であることができますが、Qdrantのような特定のターゲットシステムでは固定の内部次元(N
)が必要な場合があります。この概念は、ディープラーニングおよびマルチモーダルアプリケーションにおいて極めて重要であり、パッチレベルの埋め込みの集合としての画像、段落レベルのベクトルとしてのドキュメント、または行動ベクトルのシーケンスとしてのユーザーセッションなど、より豊かなデータ表現を可能にします。CocoIndexはこれらの複雑な表現をネイティブにサポートし、フラット化の必要性を回避します。
マルチベクトル埋め込みの応用
マルチベクトル埋め込みは、いくつかの高度なユースケースで特に役立ちます。
- ビジョン:パッチ埋め込み: コンピュータービジョンでは、Vision Transformer(ViT)が画像に対して複数のベクトルを出力する場合があります。各パッチに1つずつ(例:196個のパッチ、それぞれ768次元の埋め込み)。これにより、ローカルな特徴マッチングと領域認識検索が可能になり、
Vector[Vector[Float32, Literal[768]]]
として表現されます。 - テキスト:段落を含むドキュメント: 長いドキュメントの場合、段落または文レベルのベクトルに分割する(例:10個の段落ベクトル、それぞれ384次元)ことは、すべてのベクトルを平均するよりもコンテキストと構造をより良く保持します。これにより、ドキュメントのサブパート内での検索、単一の関連段落に基づくドキュメントの検索、および階層的検索の実装が可能になります。これは
Vector[Vector[Float32, Literal[384]]]
として型付けできます。 - ユーザー行動:セッションまたは時系列: ユーザーセッションは、一連のアクションまたは状態としてモデル化でき、各ステップがベクトルになります(例:20ステップ、それぞれ16次元のベクトル)。これは、Eコマースのクリックシーケンス、金融時系列、または多段階インタラクションのUX分析で価値があり、
Vector[Vector[Float32, Literal[16]]]
として表現されます。 - 科学・生物医学:マルチビュー埋め込み: 分子やタンパク質のような複雑なエンティティは、複数のコンフォメーションや測定モダリティを持つ場合があります。これらを複数のベクトル(例:5つの異なるビュー、それぞれ128次元)として表現することで、それらの潜在空間全体にわたる包括的な比較が可能になり、
Vector[Vector[Float32, Literal[128]]]
として型付けされます。
フラットベクトルに対する利点
マルチベクトルをフラット化する(例:[[1,2,3],[4,5,6]]
を[1,2,3,4,5,6]
に変換する)ことは可能ですが、そうすると意味的な境界が失われます。真のマルチベクトルは各サブベクトルの意味を保持し、サブベクトルレベルでのマッチングとクエリを可能にします。Qdrantのようなベクトルデータベースは、複数の埋め込みをスコアリングすることでこれを活用し、関連するベクトルセットから最適な一致(例:最も近い画像パッチや関連する段落)を特定できます。重要なのは、外側の次元が変化しても内側のベクトルは固定次元を維持できることです。これは、ほとんどのデータベースで効率的なベクトルインデックス付けのための一般的な要件です。
CocoIndexからQdrantへの型マッピング
広く使用されているベクトルデータベースであるQdrantは、高密度ベクトルとマルチベクトルの両方をサポートしています。CocoIndexは、そのベクトル型をQdrant互換形式にインテリジェントにマッピングします。
- CocoIndexの
Vector[Float32, Literal[N]]
は、QdrantのDense Vectorにマッピングされます。 - CocoIndexの
Vector[Vector[Float32, Literal[N]]]
は、QdrantのMultiVectorにマッピングされます。 - その他のベクトル型、またはQdrantでサポートされていない動的次元を持つベクトルは、QdrantのJSONペイロードの一部として保存されます。
Qdrantは特に、インデックス付けのためにベクトルが固定次元を持つことを要求します。CocoIndexはベクトル形状を自動的に検出し、このマッピングを管理して互換性を確保します。
CocoIndexデータモデルの概要
CocoIndex内では、データは行とフィールドに整理されます。各行はQdrantのポイントに対応します。フィールドは、Qdrantのベクトル制約に準拠している場合は名前付きベクトルにすることができ、そうでない型の場合はペイロードの一部にすることができます。このハイブリッドアプローチは、構造化されたメタデータの柔軟性とベクトル検索の強力な機能を組み合わせて提供します。
深く型付けされたベクトルと多次元埋め込みをサポートすることにより、CocoIndexはベクトルデータパイプラインに構造と意味的な明確さをもたらします。その型システムは、画像、テキスト、オーディオ、または抽象的なグラフ表現のインデックス付けにおいて、大規模な互換性、デバッグ可能性、および正確性を保証します。