你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure AI 搜索中将窄数据类型分配给矢量字段

减少矢量大小的一种简单方法是以较小的数据格式存储嵌入内容。 大多数嵌入模型输出 32 位浮点数,但如果量化矢量,或者嵌入模型原生支持它,则输出可能是 float16、int16 或 int8,这明显小于 float32。 可以通过矢量字段分配较窄的数据类型来容纳这些较小的矢量大小。 在矢量索引中,窄数据类型会消耗较少的存储。

数据类型分配给索引定义中的字段。 可以使用 Azure 门户、搜索 REST API 或提供该功能的 Azure SDK 包。

先决条件

  • 一个嵌入模型,用于输出小型数据格式,例如 text-embedding-3 或 Cohere V3 嵌入模型。

支持的窄数据类型

  1. 查看用于矢量字段的数据类型的建议用法:

    • Collection(Edm.Single) 32 位浮点(默认)
    • Collection(Edm.Half) 16 位浮点(窄)
    • Collection(Edm.Int16) 16 位有符号整数(窄)
    • Collection(Edm.SByte) 8 位有符号整数(窄)
    • Collection(Edm.Byte) 8 位无符号整数(仅允许使用打包的二进制数据类型)
  2. 从该列表中,确定哪个数据类型对嵌入模型的输出有效,或用于接受自定义量化的矢量。

    下表提供了指向多个嵌入模型的链接,这些模型可以使用窄数据类型 (Collection(Edm.Half)),而无需进行额外的量化。 可以从 float32 转换为 float16(使用 Collection(Edm.Half)),无需额外工作。

    嵌入模型 本机输出 在 Azure AI 搜索中分配此类型
    text-embedding-ada-002 Float32 Collection(Edm.Single)Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single)Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single)Collection(Edm.Half)
    具有 int8 embedding_type 的 Cohere V3 嵌入模型 Int8 Collection(Edm.SByte)

    如果模型以较小的数据格式发出嵌入内容,或者具有将矢量转换为较小格式的自定义量化,则可以使用其他窄数据类型。

  3. 确保了解狭窄数据类型的利弊。 Collection(Edm.Half) 的信息较少,因此分辨率较低。 如果数据是同质或密集的,则丢失额外的细节或细微差别可能会导致查询时出现不可接受的结果,因为可用于区分附近向量的细节较少。

分配数据类型

定义并生成索引。 可以使用 Azure 门户、创建或更新索引 (REST API)或 Azure SDK 包执行此步骤。

此字段定义使用窄数据类型 Collection(Edm.Half),该类型可以接受存储为 float16 值的 float32 嵌入。 对所有矢量字段设置 dimensionsvectorSearchProfilevectorSearchProfile 的具体内容对数据类型来说并不重要。

如果要直观检查字段的值,我们建议将 retrievablestored 设置为 true。 后续重新生成时,可以将这些属性更改为 false,以减少所需的存储空间。

{
    "name": "nameEmbedding",
    "type": "Collection(Edm.Half)",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "synonymMaps": [],
    "dimensions": 1536,
    "vectorSearchProfile": "myHnswProfile"
}

请记住,矢量字段不可筛选、不可排序、不可分面。 它们不能用作键,也无法使用分析器或同义词映射。

使用生产索引

创建新字段时,会为其分配数据类型。 无法更改现有字段的数据类型,删除字段需要重新生成索引。 对于已在生产环境中建立的索引,此类问题的常见解决做法是创建包含所需修订的新字段,并在计划重新生成索引的过程中删除过时的字段。

检查结果

  1. 验证字段内容是否与数据类型匹配。 假设矢量字段标记为 retrievable,请使用搜索资源管理器搜索 - POST 返回矢量字段内容。

  2. 若要检查矢量索引大小,请参阅 Azure 门户中“搜索管理和索引”页面上的矢量索引大小列,或使用 GET Statistics (REST API) 或同等的 Azure SDK 方法获取大小。

注意

字段的数据类型用于创建物理数据结构。 如果以后想要更改数据类型,请删除并重新生成索引,或者使用新定义创建第二个字段。