ベクター検索用のバイナリ ベクターのインデックスを作成する

Azure AI 検索では、Collection(Edm.Byte) パックされたバイナリ型がサポートされ、ベクター データのストレージとメモリのフットプリントがさらに削減されます。 このデータ型は、 Cohere の Embed v3 バイナリ埋め込みモデルや、ベクターをバイナリ バイトとして出力する他の埋め込みモデルやプロセスなどのモデルの出力に使用できます。

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

  • 二項ベクトル比較のハミング距離を指定するベクター検索アルゴリズムを追加する
  • アルゴリズムを指すベクター プロファイルを追加する
  • Collection(Edm.Byte)型のベクトル フィールドを追加し、ハミング距離を割り当てる

この記事では、REST API を使用して説明しますが、Azure SDKまたは Azure ポータルを使用して、バイナリ フィールドをインデックスに追加することもできます。 バイナリ データ型をフィールドに割り当てるには、 インデックス - 作成 または インデックス - REST API の作成または更新 を使用します。

ヒント

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

前提 条件

  • インデックスの作成ベクター フィールドの追加に関する知識。

  • 次元あたり 1 ビットのバイナリ ベクトル。値あたり 8 ビットの uint8 値でパッケージ化されます。 これらのベクトルを取得するには、 パッケージ化されたバイナリ ベクトルを直接生成するモデルを使用するか、インデックス作成と取得中にクライアント アプリケーションでベクターをバイナリ ベクターに量子化します。

制限

  • Import data ウィザードでのAzure ポータルのサポートはありません。

  • Microsoft Foundry モデル カタログからのモデルの統合ベクター化に使用される AML スキル のバイナリ フィールドはサポートされていません。

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

ベクター検索アルゴリズムは、インデックス作成中にクエリ ナビゲーション構造を作成します。 二項ベクトル・フィールドの場合、システムはハミング距離メトリックを使用してベクトル比較を実行します。

バイナリ ベクトルのベクター検索を構成するには:

  1. インデックス - 作成または更新 (REST API) 要求を設定します。

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

  3. の類似性メトリックを使用する 1 つ以上のhammingを追加します。 階層ナビゲーション可能小世界 (HNSW) アルゴリズムは一般的ですが、完全な K ニアレスト ネイバー (KNN) でハミング距離を使用することもできます。

  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" 
        } 
      } 
    ] 
  }

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

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

バイナリ フィールドは Collection(Edm.Byte) 型を使用し、パックされた形式の埋め込みを含みます。 たとえば、元の埋め込みディメンションが 1024の場合、パックされたバイナリ ベクターの長さは ceiling(1024 / 8) = 128。 パックされたフォームを取得するには、フィールドに vectorEncoding プロパティを設定します。

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

  1. フィールドコレクションにフィールドを追加し、名前を付けます。

  2. データ型を Collection(Edm.Byte) に設定します。

  3. vectorEncodingをバイナリ エンコードのpackedBitに設定します。

  4. dimensions1024に設定します。 元の (アンパックされた) ベクターディメンションを指定します。

  5. vectorSearchProfileは、前の手順で定義したプロファイルに設定します。

  6. searchabletrueに設定します。

次のフィールド定義は、インデックス スキーマのバイナリ ベクター フィールドの例です。

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]
  • azure-search-vector-samples リポジトリで、スキーマ定義、ベクター化、インデックス作成、クエリを含むエンドツーエンドのワークフローを確認します。

  • C#PythonJavaScript のベクター検索デモ コードを確認します。