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 请求中提供 name
、version
、model_group_id
和 model_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_text
与 text_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 |
包含与查询相同文本的文档得分最高,其余文档根据文本相似度评分。
步骤 5:将模型用于搜索
要了解如何设置向量索引并将文本嵌入模型用于搜索,请参阅语义搜索。
要了解如何设置向量索引并将稀疏编码模型用于搜索,请参阅神经稀疏搜索。
要了解如何使用交叉编码器模型进行重排序,请参阅重排序搜索结果。