向量搜尋的索引二進位向量
Azure AI 搜尋服務支援已封裝的二進位類型 Collection(Edm.Byte)
,以進一步減少向量資料的儲存體和磁碟使用量。 您可以將此資料類型用於 Cohere 的內嵌 v3 二進位內嵌模型或任何其他內嵌模型或將向量輸出為二進位位元組的程式等模型的輸出。
為二進位向量設定索引的步驟有三個:
- 新增向量搜尋演算法,該演算法會指定二進位向量比較的漢明距離
- 新增會指向該演算法的向量設定檔
- 新增類型的
Collection(Edm.Byte)
向量欄位,並指派 Hamming 距離
本文假設您已熟悉 在 Azure AI 搜尋服務 中建立索引並 新增向量字段。 它會使用 REST API 來說明每個步驟,但您也可以將二進位欄位新增至 Azure 入口網站 或 Azure SDK 中的索引。
從 API 2024-07-01 版開始,二進位數據類型已正式推出,並使用建立索引或建立或更新索引 API 指派給欄位。
提示
如果您要調查二進位向量支援,以降低其使用量,您也可以考慮 Azure AI 搜尋服務中的向量量化和儲存體縮減功能。 輸入是 float32 或 float16 內嵌。 輸出是較小格式的儲存資料。 如需詳細資訊,請參閱 使用二進位或純量量化 壓縮和 指派窄型數據類型。
必要條件
- 二進位向量,每個維度有 1 位元,以 uint8 值封裝,每個值 8 位元。 您可以使用直接產生 封裝二進位向量的模型,或在編製索引和搜尋期間將向量量化為二進位 向量,以取得這些專案。
限制
- 匯入和向量化資料精靈中沒有 Azure 入口網站支援。
- 不支援用於 Azure AI Studio 模型目錄中模型整合向量化之 AML 技能中的二進位欄位。
新增向量搜尋演算法和向量設定檔
向量搜尋演算法可用來在索引編製期間建立查詢瀏覽結構。 針對二進位向量欄位,會使用漢明距離 (Hamming distance) 計量來執行向量比較。
若要將二進位欄位新增至索引,請使用 REST API或 Azure 入口網站,以設定
Create or Update Index
要求。在索引結構描述中,新增會指定設定檔和演算法的
vectorSearch
區段。新增一或多個具有相似度計量
hamming
的向量搜尋演算法。 通常會使用階層式導覽小型世界 (HNSW),但您也可以使用漢明距離搭配完整的 K 最近鄰項目。新增一或多個會指此定演算法的向量設定檔。
下列範例顯示基本 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 存放庫中的程式碼範例示範端對端工作流程,其中包含結構描述定義、向量化、編製索引和查詢。
有 Python、C# 和 JavaScript 的程式碼示範。