次の方法で共有


ベクトル検索用のバイナリ ベクトルのインデックス付け

Azure AI 検索では、ベクトル データのストレージとメモリ占有領域をさらに削減するための Collection(Edm.Byte) という圧縮されたバイナリ型がサポートされています。 このデータ型は、Cohere の Embed v3 バイナリ埋め込みモデルなどのモデルからの出力に使用できます。

バイナリ ベクトルのインデックスを構成するには、次の 3 つの手順があります。

  • バイナリ ベクトルの比較用のハミング距離を指定するベクトル検索アルゴリズムを追加する
  • アルゴリズムを指すベクトル プロファイルを追加する
  • バイナリ フィールド定義にベクトル プロファイルを追加する

この記事は、読者が Azure AI 検索でのインデックスの作成について理解していることを前提としています。 REST API を使用して各手順を示しますが、Azure portal のインデックスにバイナリ フィールドを追加することもできます。

バイナリ データ型は、API バージョン 2024-07-01 以降で一般公開されており、Create Index または Create Or Update Index API を使用してフィールドに割り当てられます。

ヒント

フットプリントが小さいバイナリ ベクトルのサポートを調査している場合は、Azure AI 検索のベクトル量子化とストレージ削減機能も検討できます。 入力は float32 または float16 の埋め込みです。 出力は、はるかに小さい形式でデータを格納します。 詳細については、「量子化、ナロー データ型、ストレージ オプションを使用してベクトル サイズを小さくする」を参照してください。

前提条件

  • 1 ディメンションあたり 1 ビットのバイナリ ベクトル。値あたり 8 ビットの uint8 値でパッケージ化されます。 これらは、"パッケージ化されたバイナリ" ベクトルを直接生成するモデルを使うか、インデックス作成および検索中にクライアント側でベクトルをバイナリ ベクトルに量子化することによって取得できます。

制限事項

  • [データのインポートとベクトル化] ウィザードでの Azure portal のサポートはありません。
  • Azure AI Studio モデル カタログでモデルの垂直統合に使われる AML スキルのバイナリ フィールドはサポートされていません。

ベクトル検索アルゴリズムとベクトル プロファイルを追加する

ベクトル検索アルゴリズムは、インデックス作成の間にクエリ ナビゲーション構造を作成するために使われます。 バイナリ ベクトル フィールドの場合、ベクトル比較はハミング距離メトリックを使って実行されます。

  1. バイナリ フィールドをインデックスに追加するには、REST API または Azure portal を使用して Create or Update Index 要求を設定します。

  2. インデックス スキーマで、プロファイルとアルゴリズムを指定する vectorSearch セクションを追加します。

  3. hamming の類似度メトリックを持つ 1 つ以上のベクトル検索アルゴリズムを追加します。 Hierarchical Navigable Small Worlds (HNSW) を使用するのが一般的ですが、ハミング距離と網羅的 K ニアレスト ネイバーを使用することもできます。

  4. アルゴリズムを指定する 1 つ以上のベクトル プロファイルを追加します。

次の例は、基本的な vectorSearch の構成を示しています。

  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "myHnswProfile", 
        "algorithm": "myHnsw", 
        "compression": null, 
        "vectorizer": null 
      } 
    ], 
    "algorithms": [ 
      { 
        "name": "myHnsw", 
        "kind": "hnsw", 
        "hnswParameters": { 
          "metric": "hamming" 
        } 
      }, 
      { 
        "name": "myExhaustiveKnn", 
        "kind": "exhaustiveKnn", 
        "exhaustiveKnnParameters": { 
          "metric": "hamming" 
        } 
      } 
    ] 
  }

インデックスにバイナリ フィールドを追加する

インデックスのフィールド コレクションには、ドキュメント キーのフィールド、ベクトル フィールド、およびハイブリッド検索シナリオで必要なその他のフィールドすべてを含める必要があります。

バイナリ フィールドの型は Collection(Edm.Byte) であり、パックされた形式で埋め込みを保持しています。 たとえば、元の埋め込みの次元が 1024 である場合、パックされたバイナリ ベクトルの長さは ceiling(1024 / 8) = 128 になります。 フィールドに vectorEncoding プロパティを設定することで、パックされた形式を取得します。

  • フィールド コレクションにフィールドを追加し、それに名前を付けます。
  • データ型を Collection(Edm.Byte) に設定します。
  • バイナリ エンコードのために vectorEncodingpackedBit に設定します。
  • dimensions1024 に設定します。 元の (パックされていない) ベクトルの次元を指定します。
  • vectorSearchProfile を前の手順で定義したプロファイルに設定します。
  • フィールドを検索可能にします。

次のフィールド定義は、設定する必要があるプロパティの例です。

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]

関連項目

azure-search-vector-samples リポジトリのコード サンプルでは、スキーマ定義、ベクトル化、インデックス作成、クエリを含むエンド ツー エンドのワークフローが示されています。

PythonC#JavaScript 用のデモ コードがあります。