次の方法で共有

为矢量搜索编制二进制矢量索引

Azure AI 搜索支持打包的 Collection(Edm.Byte) 二进制类型,以进一步减少矢量数据的存储和内存占用。 可以将此数据类型用于模型输出,例如 Cohere 的 Embed v3 二进制嵌入模型或任何其他嵌入 模型或进程,这些模型将向量输出为二进制字节。

为二进制矢量配置索引有三个步骤:

  • 添加指定汉明距离进行二进制矢量比较的矢量搜索算法
  • 添加指向算法的矢量配置文件
  • 添加 Collection(Edm.Byte) 类型的矢量字段并分配汉明距离

本文使用 REST API 进行说明,但也可以使用 Azure SDK 或 Azure 门户将二进制字段添加到索引。 使用 索引 - 创建索引 - 创建或更新 REST API 将二进制数据类型分配给字段。

提示

如果正在调查二进制矢量对更小内存占用空间的支持,你还可以考虑 Azure AI 搜索中的矢量量化和存储缩减功能。 输入是 float32 或 float16 嵌入。 输出是以更小的格式存储的数据。 有关详细信息,请参阅使用二进制或标量量化进行压缩分配窄数据类型

先决条件

  • 熟悉 如何创建索引添加向量字段

  • 二进制向量,每个维度有一位,打包在 uint8 值中,每个值有 8 位。 可以使用直接生成 打包的二进制 向量的模型或在索引和检索期间将向量量化为客户端应用程序中的二进制向量来获取这些向量。

限制

  • 导入数据(新)向导中不支持 Azure 门户。
  • 不支持 AML 技能中的二进制字段,该技能用于 Azure AI Studio 模型目录中的模型的集成矢量化。

添加矢量搜索算法和矢量配置文件

矢量搜索算法在编制索引期间创建查询导航结构。 对于二进制向量字段,系统使用 Hamming 距离指标执行矢量比较。

若要为二进制向量配置矢量搜索,请执行如下作:

  1. 设置 索引 - 创建或更新 请求(REST API)。

  2. 在索引架构中,添加一个指定配置文件和算法的 vectorSearch 部分。

  3. 添加一个或多个使用相似性指标的hamming。 分层导航小型世界(HNSW)算法很常见,但也可以使用哈明距离和详尽的 K-近邻(KNN)。

  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 属性,可以获得打包形式的数据。

若要向索引添加二进制向量字段,请执行以下作:

  1. 将字段添加到字段集合,并为其命名。

  2. 将数据类型设置为 Collection(Edm.Byte).

  3. vectorEncoding 设置为 packedBit,以进行二进制编码。

  4. dimensions 设置为 1024。 指定原始(未打包)矢量维度。

  5. vectorSearchProfile 设置为在上一步中定义的配置文件。

  6. searchable 设置为 true

以下字段定义是索引架构中的二进制向量字段的示例。

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