Link Search Menu Expand Document Documentation Menu

OpenSearch 提供的预训练模型

2.9 版本引入

OpenSearch 提供了各种开源预训练模型,可帮助实现一系列机器学习 (ML) 搜索和分析用例。您可以将任何支持的模型上传到 OpenSearch 集群并在本地使用。

支持的预训练模型

OpenSearch 支持按类型分类的以下模型。文本嵌入模型来源于 Hugging Face。稀疏编码模型由 OpenSearch 训练。尽管同类型模型的用例相似,但每个模型的模型大小不同,并且在您的集群设置下性能也会有所不同。有关某些预训练模型的性能比较,请参阅 SBERT 文档

不支持在 CentOS 7 操作系统上运行本地模型。此外,并非所有本地模型都能在所有硬件和操作系统上运行。

句子转换器

句子转换器模型将句子和段落映射到多维稠密向量空间。向量的数量取决于模型的类型。您可以将这些模型用于聚类或语义搜索等用例。

下表提供了句子转换器模型列表以及可用于下载它们的工件链接。请注意,您必须在模型名称前加上 huggingface/ 前缀,如“模型名称”列所示。

模型名称 版本 向量维度 自动截断 TorchScript 工件 ONNX 工件
huggingface/sentence-transformers/all-distilroberta-v1 1.0.2 768 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/all-MiniLM-L6-v2 1.0.2 384 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/all-MiniLM-L12-v2 1.0.2 384 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/all-mpnet-base-v2 1.0.2 768 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/msmarco-distilbert-base-tas-b 1.0.3 768 维稠密向量空间。为语义搜索优化。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/multi-qa-MiniLM-L6-cos-v1 1.0.2 384 维稠密向量空间。专为语义搜索设计,并基于 2.15 亿个问答对进行训练。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/multi-qa-mpnet-base-dot-v1 1.0.2 768 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/paraphrase-MiniLM-L3-v2 1.0.2 384 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 1.0.2 384 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/paraphrase-mpnet-base-v2 1.0.1 768 维稠密向量空间。 - 模型 URL
- 配置 URL
- 模型 URL
- 配置 URL
huggingface/sentence-transformers/distiluse-base-multilingual-cased-v1 1.0.2 512 维稠密向量空间。 - 模型 URL
- 配置 URL
不可用

稀疏编码模型

2.11 版引入

稀疏编码模型将文本转换为稀疏向量,并将该向量转换为表示文本条目及其在稀疏向量中对应权重的 <token: weight> 对列表。您可以将这些模型用于聚类或稀疏神经搜索等用例。

我们建议以下组合以获得最佳性能

  • 在摄入和搜索时均使用 amazon/neural-sparse/opensearch-neural-sparse-encoding-v2-distill 模型。
  • 在摄入时使用 amazon/neural-sparse/opensearch-neural-sparse-encoding-doc-v3-distill 模型,在搜索时使用 amazon/neural-sparse/opensearch-neural-sparse-tokenizer-v1 分词器。

有关运行稀疏神经搜索的上述选项的更多信息,请参阅自动生成稀疏向量嵌入

下表提供了稀疏编码模型列表以及可用于下载它们的工件链接。

模型名称 版本 自动截断 TorchScript 工件 描述
amazon/neural-sparse/opensearch-neural-sparse-encoding-v1 1.0.1 - 模型 URL
- 配置 URL
一种神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个条目对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-encoding-v2-distill 1.0.0 - 模型 URL
- 配置 URL
一种神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个条目对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-encoding-doc-v1 1.0.1 - 模型 URL
- 配置 URL
一种神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个条目对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-encoding-doc-v2-distill 1.0.0 - 模型 URL
- 配置 URL
一种神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个条目对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-encoding-doc-v2-mini 1.0.0 - 模型 URL
- 配置 URL
一种神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个条目对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-encoding-doc-v3-distill 1.0.0 - 模型 URL
- 配置网址
一个神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个 entry 对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-encoding-multilingual-v1 1.0.0 - 模型网址
- 配置网址
一个多语言神经稀疏编码模型。该模型将文本转换为稀疏向量,识别向量中非零元素的索引,然后将向量转换为 <entry, weight> 对,其中每个 entry 对应一个非零元素索引。要使用 transformers 和 PyTorch API 试用此模型,请参阅 Hugging Face 文档
amazon/neural-sparse/opensearch-neural-sparse-tokenizer-v1 1.0.1 - 模型网址
- 配置网址
一个神经稀疏分词器。该分词器将文本分割成词元,并为每个词元分配一个预定义的权重,即该词元的逆文档频率 (IDF)。如果未提供 IDF 文件,则权重默认为 1。有关更多信息,请参阅准备模型
amazon/neural-sparse/opensearch-neural-sparse-tokenizer-multilingual-v1 1.0.0 - 模型网址
- 配置网址
一个多语言神经稀疏分词器。该分词器将文本分割成词元,并为每个词元分配一个预定义的权重,即该词元的逆文档频率 (IDF)。如果未提供 IDF 文件,则权重默认为 1。有关更多信息,请参阅准备模型

交叉编码器模型

2.12 版本引入

交叉编码器模型支持查询重排序。

下表提供了交叉编码器模型列表以及可用于下载它们的工件链接。请注意,您必须在模型名称前加上 huggingface/cross-encoders 前缀,如模型名称列所示。

模型名称 版本 TorchScript 工件 ONNX 工件
huggingface/cross-encoders/ms-marco-MiniLM-L-6-v2 1.0.2 - 模型网址
- 配置网址
- 模型网址
- 配置网址
huggingface/cross-encoders/ms-marco-MiniLM-L-12-v2 1.0.2 - 模型网址
- 配置网址
- 模型网址
- 配置网址

语义句子高亮模型

3.0 版本引入

语义句子高亮模型专为与 语义高亮器 配合使用而设计。这些模型分析文档文本并识别与搜索查询语义最相关的句子。

有关如何将这些模型与语义高亮器结合使用的教程,请参阅使用语义高亮

下表提供了语义句子高亮模型列表以及可用于下载它们的工件链接。请注意,您必须在模型名称前加上 opensearch/ 前缀,如模型名称列所示。

模型名称 版本 TorchScript 工件 描述
amazon/sentence-highlighting/opensearch-semantic-highlighter-v1 1.0.0 - 模型网址
- 配置网址
一个经过优化用于识别与高亮相关的语义句子的模型。

先决条件

在具有专用 ML 节点的集群上,指定 "only_run_on_ml_node": "true" 以提高性能。有关更多信息,请参阅 ML Commons 集群设置

此示例使用没有专用 ML 节点的简单设置,并允许在非 ML 节点上运行模型。为确保此基本本地设置正常工作,请指定以下集群设置

PUT _cluster/settings
{
  "persistent": {
    "plugins.ml_commons.only_run_on_ml_node": "false",
    "plugins.ml_commons.model_access_control_enabled": "true",
    "plugins.ml_commons.native_memory_threshold": "99"
  }
}

步骤 1:注册模型组

要注册模型,您有以下选项

  • 您可以使用 model_group_id 将模型版本注册到现有模型组。
  • 如果您不使用 model_group_id,ML Commons 将创建一个带有新模型组的模型。

要注册模型组,请发送以下请求:

POST /_plugins/_ml/model_groups/_register
{
  "name": "local_model_group",
  "description": "A model group for local models"
}

响应包含模型组 ID,您将使用它向此模型组注册模型。

{
 "model_group_id": "wlcnb4kBJ1eYAeTMHlV6",
 "status": "CREATED"
}

要了解有关模型组的更多信息,请参阅模型访问控制

步骤 2:注册本地 OpenSearch 提供的模型

要将 OpenSearch 提供的模型注册到步骤 1 中创建的模型组,请在以下请求中提供步骤 1 中的模型组 ID。

由于预训练模型源自 ML Commons 模型仓库,您只需在注册 API 请求中提供 nameversionmodel_group_idmodel_format

POST /_plugins/_ml/models/_register
{
  "name": "huggingface/sentence-transformers/msmarco-distilbert-base-tas-b",
  "version": "1.0.3",
  "model_group_id": "Z1eQf4oB5Vm0Tdw8EIP2",
  "model_format": "TORCH_SCRIPT"
}

OpenSearch 返回注册操作的任务 ID。

{
  "task_id": "cVeMb4kBJ1eYAeTMFFgj",
  "status": "CREATED"
}

要检查操作状态,请将任务 ID 提供给任务 API

GET /_plugins/_ml/tasks/cVeMb4kBJ1eYAeTMFFgj

操作完成后,状态将变为 COMPLETED

{
  "model_id": "cleMb4kBJ1eYAeTMFFg4",
  "task_type": "REGISTER_MODEL",
  "function_name": "TEXT_EMBEDDING",
  "state": "COMPLETED",
  "worker_node": [
    "XPcXLV7RQoi5m8NI_jEOVQ"
  ],
  "create_time": 1689793598499,
  "last_update_time": 1689793598530,
  "is_async": false
}

记下返回的 model_id,因为部署模型时需要它。

步骤 3:部署模型

部署操作从模型索引中读取模型的块,然后创建模型实例以加载到内存中。模型越大,模型分割的块越多,加载到内存所需的时间也越长。

要部署已注册模型,请在以下请求中提供其在步骤 3 中的模型 ID

POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_deploy

响应中包含任务 ID,您可以使用它来检查部署操作的状态

{
  "task_id": "vVePb4kBJ1eYAeTM7ljG",
  "status": "CREATED"
}

与上一步一样,通过调用任务 API 检查操作状态

GET /_plugins/_ml/tasks/vVePb4kBJ1eYAeTM7ljG

操作完成后,状态将变为 COMPLETED

{
  "model_id": "cleMb4kBJ1eYAeTMFFg4",
  "task_type": "DEPLOY_MODEL",
  "function_name": "TEXT_EMBEDDING",
  "state": "COMPLETED",
  "worker_node": [
    "n-72khvBTBi3bnIIR8FTTw"
  ],
  "create_time": 1689793851077,
  "last_update_time": 1689793851101,
  "is_async": true
}

如果集群或节点重启,则需要重新部署模型。要了解如何设置自动重新部署,请参阅启用自动重新部署

步骤 4(可选):测试模型

使用 预测 API 测试模型。

文本嵌入模型

对于文本嵌入模型,发送以下请求

POST /_plugins/_ml/_predict/text_embedding/cleMb4kBJ1eYAeTMFFg4
{
  "text_docs":[ "today is sunny"],
  "return_number": true,
  "target_response": ["sentence_embedding"]
}

响应包含所提供句子的文本嵌入

{
  "inference_results" : [
    {
      "output" : [
        {
          "name" : "sentence_embedding",
          "data_type" : "FLOAT32",
          "shape" : [
            768
          ],
          "data" : [
            0.25517133,
            -0.28009856,
            0.48519906,
            ...
          ]
        }
      ]
    }
  ]
}

稀疏编码模型

对于稀疏编码模型,发送以下请求

POST /_plugins/_ml/_predict/sparse_encoding/cleMb4kBJ1eYAeTMFFg4
{
  "text_docs":[ "today is sunny"]
}

响应包含词元和权重

{
  "inference_results": [
    {
      "output": [
        {
          "name": "output",
          "dataAsMap": {
            "response": [
              {
                "saturday": 0.48336542,
                "week": 0.1034762,
                "mood": 0.09698499,
                "sunshine": 0.5738209,
                "bright": 0.1756877,
                ...
              }
          }
        }
    }
}

交叉编码器模型

对于交叉编码器模型,发送以下请求

POST _plugins/_ml/models/<model_id>/_predict
{
    "query_text": "today is sunny",
    "text_docs": [
        "how are you",
        "today is sunny",
        "today is july fifth",
        "it is winter"
    ]
}

模型计算 query_texttext_docs 中每个文档的相似度分数,并按照在 text_docs 中提供的顺序返回每个文档的分数列表

{
  "inference_results": [
    {
      "output": [
        {
          "name": "similarity",
          "data_type": "FLOAT32",
          "shape": [
            1
          ],
          "data": [
            -6.077798
          ],
          "byte_buffer": {
            "array": "Un3CwA==",
            "order": "LITTLE_ENDIAN"
          }
        }
      ]
    },
    {
      "output": [
        {
          "name": "similarity",
          "data_type": "FLOAT32",
          "shape": [
            1
          ],
          "data": [
            10.223609
          ],
          "byte_buffer": {
            "array": "55MjQQ==",
            "order": "LITTLE_ENDIAN"
          }
        }
      ]
    },
    {
      "output": [
        {
          "name": "similarity",
          "data_type": "FLOAT32",
          "shape": [
            1
          ],
          "data": [
            -1.3987057
          ],
          "byte_buffer": {
            "array": "ygizvw==",
            "order": "LITTLE_ENDIAN"
          }
        }
      ]
    },
    {
      "output": [
        {
          "name": "similarity",
          "data_type": "FLOAT32",
          "shape": [
            1
          ],
          "data": [
            -4.5923924
          ],
          "byte_buffer": {
            "array": "4fSSwA==",
            "order": "LITTLE_ENDIAN"
          }
        }
      ]
    }
  ]
}

文档分数越高表示相似度越高。在前面的响应中,文档针对查询文本 today is sunny 的评分如下

文档文本 分数
how are you -6.077798
today is sunny 10.223609
today is july fifth -1.3987057
it is winter -4.5923924

包含与查询相同文本的文档得分最高,其余文档根据文本相似度评分。

要了解如何设置向量索引并将文本嵌入模型用于搜索,请参阅语义搜索

要了解如何设置向量索引并将稀疏编码模型用于搜索,请参阅神经稀疏搜索

要了解如何使用交叉编码器模型进行重排序,请参阅重排序搜索结果