次の方法で共有


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

重要

バイナリ データ型はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 2024-05-01-preview REST API 以降のプレビュー API は、新しいデータ型を提供します。

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

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

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

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

前提条件

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

制限事項

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

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

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

  1. バイナリ フィールドをインデックスに追加するには、2024-05-01-preview 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 プロパティを設定することで、パックされた形式を取得します。

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

フィールド コレクションの最小の定義は、次の例のようになるはずです。

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

関連項目

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

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