通过运用该方案,可以在 text-embedding-3 模型中使用更少的维度。 在 Azure OpenAI 上,文本嵌入3模型基于 Matryoshka 表示法学习(MRL)技术重新训练,以生成多个不同压缩级别的矢量表示。 此方法可以更快地进行搜索并降低存储成本,同时减少语义信息丢失。
在 Azure AI 搜索中,MRL 支持补充标量和二进制量化。 使用任一量化方法时,可以在向量字段上指定属性 truncationDimension 以减少文本嵌入的维数。
MRL 多级压缩可节省矢量存储空间,并基于文本嵌入缩短矢量查询的查询响应时间。 在 Azure AI 搜索中,MRL 支持仅与另一种量化方法一起提供。 通过将二进制量化与 MRL 配合使用,可最大限度地缩减矢量索引大小。 若要实现最大存储减少,请将二进制量化与 MRL 配合使用并设置为 storedfalse。
先决条件
- text-embedding-3 模型,例如 text-embedding-3-small 或 text-embedding-3-large。 
- 新向量字段 类型 - Edm.Half或- Edm.Single。 无法将 MRL 压缩添加到现有字段。
- 标量或二进制量化。 仅当配置标量或二进制量化时,才能设置截断维度。 建议对 MRL 压缩使用二进制量化。 
支持的客户端
可以使用 REST API 或 Azure SDK 包来实现 MRL 压缩。 目前,没有 Azure 门户或 Azure AI Foundry 支持。
- 检查每个 Azure SDK 包的更改日志以获取功能支持: Python、 .NET、 Java、 JavaScript。
使用 MRL 扩展的文本嵌入
MRL 内置于已使用的文本嵌入模型中。 若要在 Azure AI 搜索中使用 MRL 功能,
- 使用 创建或更新索引 或等效 API 指定索引架构。 
- 向索引定义添加矢量字段。 
- 在索引定义中指定 - vectorSearch.compressions对象。
- 添加标量或二进制(建议)形式的量化方法。 
- 包括参数 - truncationDimension并将其设置为 512。 如果使用 text-embedding-3-large 模型,可以将其设置为最低 256。
- 包括一个指定 HNSW 算法和矢量压缩对象的矢量配置文件。 
- 将该矢量配置文件分配给字段集合中 - Edm.Half或- Edm.Single类型的矢量字段。
使用支持 MRL 的文本嵌入模型时,无需进行查询端修改。 MRL 支持不会影响集成矢量化、查询时的文本到查询转换、语义排名和其他相关性增强功能(如使用原始矢量重新排名和过度采样)。
尽管由于额外的步骤,索引编制速度较慢,但查询速度更快。
示例:支持 MRL 的矢量搜索配置
以下示例演示了符合 MRL 的要求和建议的矢量搜索配置。
              truncationDimension 是一个压缩属性。 它将指定结合标量或二进制压缩等压缩方法对内存中的矢量图的收缩程度。 对于采用二进制量化的 truncationDimension,建议设为 1,024 或更高的数值。 使用 MRL 和二进制压缩时,小于 1,000 的维度会降低搜索结果的质量。
{ 
  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "use-bq-with-mrl", 
        "compression": "use-mrl,use-bq", 
        "algorithm": "use-hnsw" 
      } 
    ],
    "algorithms": [
       {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
             "m": 4,
             "efConstruction": 400,
             "efSearch": 500,
             "metric": "cosine"
          }
       }
    ],
    "compressions": [ 
      { 
        "name": "use-mrl", 
        "kind": "binaryQuantization", 
        "rescoringOptions": {
            "enableRescoring": true,
            "defaultOversampling": 10,
            "rescoreStorageMethod": "preserveOriginals"
        },
        "truncationDimension": 1024
      }, 
      { 
        "name": "use-bq", 
        "kind": "binaryQuantization", 
        "rescoringOptions": {
            "enableRescoring": true,
            "defaultOversampling": 10,
            "rescoreStorageMethod": "discardOriginals"
        }
       } 
    ] 
  } 
} 
下面是一个满足 MRL 要求的完全指定型矢量字段定义示例。 回想一下,矢量字段必须:
- 类型为 - Edm.Half或- Edm.Single。
- 具有指定算法和压缩设置的 - vectorSearchProfile属性。
- 具有一个 - dimensions属性,该属性指定评分和排名结果的维度数。 其值应是你使用的模型的维度限制(1,536 用于文本嵌入-3-small)。
{
    "name": "text_vector",
    "type": "Collection(Edm.Single)",
    "searchable": true,
    "filterable": false,
    "retrievable": false,
    "stored": false,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "normalizer": null,
    "dimensions": 1536,
    "vectorSearchProfile": "use-bq-with-mrl",
    "vectorEncoding": null,
    "synonymMaps": []
}