Half-Precision ベクター インデックス化とは
半精度ベクトル インデックスを使用すると、標準の 32 ビット浮動小数点数ではなく、16 ビット浮動小数点数を使用してベクター埋め込みを格納およびインデックス付けできます。 この最適化により、メモリ使用量とストレージ コストの両方が大幅に削減され、より大きなデータセットとより高次元のベクトルを操作することが可能になります。 さらに、データ密度を最適化することで、多くのベクター検索シナリオでのクエリ パフォーマンスの向上に貢献できます。
主な利点
- 次元のサポートの向上: 半精度を使用すると、最大 4,000 次元 のベクトルにインデックスを付けることができるようになりました (以前の制限である 2,000 から増加)。
- ストレージ占有領域の削減: ベクターを 16 ビット形式で格納すると、全精度ベクトルと比較して、必要なストレージの量が大幅に減少します。 これは、特に大規模なベクター データベースの場合、大幅なコスト削減につながる可能性があります。
- 構成可能なパフォーマンスと精度: 検索結果を微調整するために、クエリの実行中に オーバーサンプリング パラメーターが提供されます。 これにより、取得速度と精度の低下による潜在的な影響とのトレードオフを制御できます。
Half-Precision ベクター インデックスの作成
コレクションのベクター インデックスを定義する場合は、"compression": "half"
内で cosmosSearchOptions
オプションを指定することで、半精度圧縮を有効にすることができます。
db.runCommand({
"createIndexes": "<vector_collection_name>",
"indexes": [
{
"key": { "<vector_field_name>": "cosmosSearch" },
"name": "<index_name>",
"cosmosSearchOptions": {
"kind": "vector-hnsw", // or vector-ivf
"similarity": "cos",
"dimensions": integer_value, // max 4000
"compression": "half"
}
}
]
});
オーバーサンプリングによる検索の改善
半精度圧縮を利用するベクター インデックスに対してクエリを実行する場合は、oversampling
集計ステージ内で $search
パラメーターを使用できます。 このパラメーターは、16 ビット表現によって生じる精度の潜在的な損失を軽減するのに役立ちます。
oversampling
係数を使用すると、必要な結果の最終的な数 (k
) よりも多くの潜在的な最も近い近傍を半精度インデックスから取得できます。 これらの候補は、元の全精度ベクトルを使用して比較され、最終的なランク付けされた結果の精度が高くなります。
たとえば、上位 10 個 (k
=10) の最も似たベクトルを取得するには、oversampling
などの値に設定することをお勧めします。 "oversampling": 1.5
では、システムは最初に半精度インデックスから 15 個の候補を取得し、次に全精度データを使用して上位 10 個を絞り込みます。
db.collection.aggregate([
{
"$search": {
"cosmosSearch": {
"vector": query_vector,
"path": path_to_property,
"k": num_results_to_return,
"oversampling": double_value
}
}
},
{
"$project": {
"similarityScore": { "$meta": "searchScore" },
"_id": 0
}
}
]);
注
oversampling
係数は 以上である 1.0
である必要があります。 この係数は、 "compression": "half"
で作成されたベクター インデックスにのみ関連します。
Half-Precision と製品量子化
Half-Precision と 製品量子化 (PQ) の両方で、Azure Cosmos DB for MongoDB (仮想コア) のベクター インデックスが圧縮されますが、圧縮の実現方法と検索への影響は異なります。
特徴 | 半精度 | 製品量子化 (PQ) |
---|---|---|
圧縮方法 | 各ベクター次元を 16 ビットに減らします。 | ベクトル空間をサブスペースに分割し、それぞれを量子化します。 |
最大ディメンション | 最大 4,000 | 最大 16,000 |
精度の変更 | ビット深度が低いため、わずかな損失が発生します。 | 損失が大きくなる可能性があります。 pqCompressedDims を介して構成できます。 |
検索速度 | インデックスが小さいため、速度が中程度に増加します。 | 高度に圧縮されたベクトルによる大幅な速度増加。 |
インデックスのビルド時間 | 比較的高速です。 | 重心トレーニング (pqSampleSize ) が原因で長くなる可能性があります。 |
インデックスのサポート | HNSW、IVF。 | DiskANN。 |
構成 | シンプルにcompression: "half" を有効にします。 |
その他のパラメーター: pqCompressedDims 、 pqSampleSize 。 |
オーバーサンプリングの使用 | 小さな精度の損失に役立ちます。 | より大きな圧縮から精度を回復するために不可欠です。 |
理想的なユース ケース | 中程度のメモリ削減、次元の増加、許容可能な精度のトレードオフ。 | 大規模なデータセット、高次元、高速検索の優先順位付け、オーバーサンプリングによる精度の管理。 |