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

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 门户。
  • 不支持 AML 技能中的二进制字段,该技能用于 Azure AI Studio 模型目录中的模型的集成矢量化。

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

矢量搜索算法用于在索引编制过程中创建查询导航结构。 对于二进制矢量字段,将使用汉明距离指标执行矢量比较。

  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 的演示代码。