分享方式:


向量搜尋的索引二進位向量

Azure AI 搜尋服務支援已封裝的二進位類型 Collection(Edm.Byte),以進一步減少向量資料的儲存體和磁碟使用量。 您可以將此資料類型用於從模型 (例如 Cohere 的 Embed v3 二進位內嵌模型 (英文)) 輸出。

為二進位向量設定索引的步驟有三個:

  • 新增向量搜尋演算法,該演算法會指定二進位向量比較的漢明距離
  • 新增會指向該演算法的向量設定檔
  • 將向量設定檔新增至二進位欄位定義

本文假設您對於在 Azure AI 搜尋服務中建立索引的作業並不陌生。 它會使用 REST API 來說明每個步驟,但您也可以將二進位欄位新增至 Azure 入口網站中的索引。

從 API 2024-07-01 版本開始,二進位資料類型已正式推出,並使用 建立索引建立或更新索引 API 指派給欄位。

提示

如果您要調查二進位向量支援,以降低其使用量,您也可以考慮 Azure AI 搜尋服務中的向量量化和儲存體縮減功能。 輸入是 float32 或 float16 內嵌。 輸出是較小格式的儲存資料。 如需詳細資訊,請參閱 透過量化、縮小資料類型和儲存體選項來減少向量大小

必要條件

  • 二進位向量,每個維度有 1 位元,以 uint8 值封裝,每個值 8 位元。 您可以使用直接產生「封裝二進位」向量的模型,或在編製索引和搜尋期間,將向量量化為二進位向量用戶端,以取得這些項目。

限制

  • 匯入和向量化資料精靈中沒有 Azure 入口網站支援。
  • 不支援用於 Azure AI Studio 模型目錄中模型整合向量化之 AML 技能中的二進位欄位。

新增向量搜尋演算法和向量設定檔

向量搜尋演算法可用來在索引編製期間建立查詢瀏覽結構。 針對二進位向量欄位,會使用漢明距離 (Hamming distance) 計量來執行向量比較。

  1. 若要將二進位欄位新增至索引,請使用 REST API或 Azure 入口網站,以設定 Create or Update Index 要求。

  2. 在索引結構描述中,新增會指定設定檔和演算法的 vectorSearch 區段。

  3. 新增一或多個具有相似度計量 hamming向量搜尋演算法。 通常會使用階層式導覽小型世界 (HNSW),但您也可以使用漢明距離搭配完整的 K 最近鄰項目。

  4. 新增一或多個會指此定演算法的向量設定檔。

下列範例顯示基本 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)
  • vectorEncoding 設為 packedBit 以進行二進位編碼。
  • dimensions 設定為 1024。 指定原始的 (未封裝) 向量維度。
  • 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 的程式碼示範。