在 Amazon OpenSearch Service 中使用 AI/ML 连接器增强神经搜索 |亚马逊网络服务

在 Amazon OpenSearch Service 中使用 AI/ML 连接器增强神经搜索 |亚马逊网络服务

源节点: 3068091

随着神经搜索功能的推出 亚马逊开放搜索服务 在 OpenSearch 2.9 中,现在可以轻松地与 AI/ML 模型集成以支持语义搜索和其他用例。自 2020 年推出 k-近邻 (k-NN) 功能以来,OpenSearch Service 已支持词法搜索和向量搜索;然而,配置语义搜索需要构建一个框架来集成机器学习 (ML) 模型以进行摄取和搜索。神经搜索功能有助于在摄取和搜索过程中进行文本到矢量的转换。当您在搜索过程中使用神经查询时,查询将被转换为向量嵌入,并且 k-NN 用于从语料库返回最近的向量嵌入。

要使用神经搜索,您必须设置 ML 模型。我们建议将 AI/ML 连接器配置到 AWS AI 和 ML 服务(例如 亚马逊SageMaker or 亚马逊基岩)或第三方替代品。从 OpenSearch Service 2.9 版本开始,AI/ML 连接器与神经搜索集成,以简化和操作数据语料库和查询到向量嵌入的转换,从而消除向量水合和搜索的大部分复杂性。

在这篇文章中,我们演示了如何通过 OpenSearch Service 控制台将 AI/ML 连接器配置到外部模型。

解决方案概述

具体来说,本文将引导您连接到 SageMaker 中的模型。然后,我们将指导您使用连接器在 OpenSearch Service 上配置语义搜索,作为通过连接到 ML 模型支持的用例示例。 OpenSearch Service 控制台 UI 目前支持 Amazon Bedrock 和 SageMaker 集成,并且 UI 支持的第一方和第三方集成的列表将继续增长。

对于 UI 不支持的任何模型,您可以使用可用的 API 和 机器学习蓝图. 有关更多信息,请参阅 OpenSearch 模型简介。您可以在以下位置找到每个连接器的蓝图 ML Commons GitHub 存储库.

先决条件

在通过 OpenSearch Service 控制台连接模型之前,请创建一个 OpenSearch Service 域。地图 AWS身份和访问管理 (IAM) 角色(按名称) LambdaInvokeOpenSearchMLCommonsRole 作为后端角色 ml_full_access 使用 OpenSearch Dashboards 上的安全插件的角色,如以下视频所示。 OpenSearch 服务集成工作流程已预先填充以使用 LambdaInvokeOpenSearchMLCommonsRole 默认情况下,IAM 角色用于在 OpenSearch Service 域和 SageMaker 上部署的模型之间创建连接器。如果您在 OpenSearch Service 控制台集成上使用自定义 IAM 角色,请确保将自定义角色映射为后端角色 ml_full_access 部署模板之前的权限。

使用 AWS CloudFormation 部署模型

以下视频演示了使用 OpenSearch Service 控制台在几分钟内在 Amazon SageMaker 上部署模型并通过 AI 连接器生成模型 ID 的步骤。第一步是选择 集成 在 OpenSearch Service AWS 控制台的导航窗格中,该窗格会路由到可用集成的列表。集成是通过 UI 设置的,它将提示您进行必要的输入。

要设置集成,您只需提供 OpenSearch Service 域端点并提供模型名称来唯一标识模型连接。默认情况下,模板部署 Hugging Face 句子转换器模型, djl://ai.djl.huggingface.pytorch/sentence-transformers/all-MiniLM-L6-v2.

当你选择 创建堆栈,您将被路由到 AWS CloudFormation 安慰。 CloudFormation 模板部署的架构如下图所示。

CloudFormation 堆栈创建一个 AWS Lambda 部署模型的应用程序 亚马逊简单存储服务 (Amazon S3),创建连接器,并在输出中生成模型 ID。然后,您可以使用此模型 ID 创建语义索引。

如果默认的全 MiniLM-L6-v2 模型不能满足您的目的,您可以通过将模型构件提供为可访问的 S3 对象,在所选模型主机(SageMaker 或 Amazon Bedrock)上部署您选择的任何文本嵌入模型。或者,您可以选择以下选项之一 预训练语言模型 并将其部署到 SageMaker。有关设置端点和模型的说明,请参阅 可用的 Amazon SageMaker 图像.

SageMaker 是一项完全托管的服务,汇集了广泛的工具,可为任何用例提供高性能、低成本的机器学习,并提供模型监控、无服务器托管以及用于持续培训和部署的工作流程自动化等关键优势。 SageMaker 允许您托管和管理文本嵌入模型的生命周期,并使用它们来支持 OpenSearch Service 中的语义搜索查询。连接后,SageMaker 托管您的模型,并使用 OpenSearch 服务根据 SageMaker 的推理结果进行查询。

通过 OpenSearch Dashboards 查看部署的模型

要验证 CloudFormation 模板是否已在 OpenSearch Service 域上成功部署模型并获取模型 ID,您可以通过 OpenSearch Dashboards 开发工具使用 ML Commons REST GET API。

GET _plugins REST API 现在提供额外的 API 来查看模型状态。以下命令允许您查看远程模型的状态:

GET _plugins/_ml/models/<modelid>

如下图所示, DEPLOYED 响应中的状态表示模型已成功部署在 OpenSearch 服务集群上。

或者,您可以使用以下命令查看部署在 OpenSearch Service 域上的模型 机器学习 OpenSearch 仪表板页面。

此页面列出了模型信息以及所有已部署模型的状态。

使用模型 ID 创建神经管道

当模型的状态显示为 DEPLOYED 在开发工具或绿色和 响应 在 OpenSearch Dashboards 中,您可以使用模型 ID 来构建神经摄取管道。以下摄取管道在您域的 OpenSearch Dashboards 开发工具中运行。确保将模型 ID 替换为为域中部署的模型生成的唯一 ID。

PUT _ingest/pipeline/neural-pipeline
{
  "description": "Semantic Search for retail product catalog ",
  "processors" : [
    {
      "text_embedding": {
        "model_id": "sfG4zosBIsICJFsINo3X",
        "field_map": {
           "description": "desc_v",
           "name": "name_v"
        }
      }
    }
  ]
}

使用神经管道作为默认管道创建语义搜索索引

现在,您可以使用配置为使用您在上一步中创建的新神经管道的默认管道来定义索引映射。确保向量场声明为 knn_vector 并且维度适合 SageMaker 上部署的模型。如果您保留了在 SageMaker 上部署全 MiniLM-L6-v2 模型的默认配置,请按原样保留以下设置并在开发工具中运行命令。

PUT semantic_demostore
{
  "settings": {
    "index.knn": true,  
    "default_pipeline": "neural-pipeline",
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "desc_v": {
        "type": "knn_vector",
        "dimension": 384,
        "method": {
          "name": "hnsw",
          "engine": "nmslib",
          "space_type": "cosinesimil"
        }
      },
      "name_v": {
        "type": "knn_vector",
        "dimension": 384,
        "method": {
          "name": "hnsw",
          "engine": "nmslib",
          "space_type": "cosinesimil"
        }
      },
      "description": {
        "type": "text" 
      },
      "name": {
        "type": "text" 
      } 
    }
  }
}

摄取样本文档以生成向量

对于此演示,您可以摄取 零售演示店产品目录样本 新的 semantic_demostore 指数。将用户名、密码和域端点替换为您的域信息,并将原始数据提取到 OpenSearch 服务中:

curl -XPOST -u 'username:password' 'https://domain-end-point/_bulk' --data-binary @semantic_demostore.json -H 'Content-Type: application/json'

验证新的semantic_demostore索引

现在您已将数据集引入 OpenSearch Service 域,请验证是否使用简单搜索获取所有字段来生成所需的向量。验证字段是否定义为 knn_vectors 具有所需的向量。

使用比较搜索结果工具比较由神经搜索支持的词汇搜索和语义搜索

比较搜索结果工具 OpenSearch Dashboards 上的可用于生产工作负载。您可以导航至 比较搜索结果 页面并比较配置为使用之前生成的模型 ID 的词汇搜索和神经搜索之间的查询结果。

清理

您可以按照本文中的说明通过删除 CloudFormation 堆栈来删除您创建的资源。这将删除 Lambda 资源和包含部署到 SageMaker 的模型的 S3 存储桶。完成以下步骤:

  1. 在 AWS CloudFormation 控制台上,导航到您的堆栈详细信息页面。
  2. 删除.

  1. 删除 进行确认。

您可以在 AWS CloudFormation 控制台上监控堆栈删除进度。

请注意,删除 CloudFormation 堆栈不会删除部署在 SageMaker 域上的模型以及创建的 AI/ML 连接器。这是因为这些模型和连接器可以与域内的多个索引相关联。要专门删除模型及其关联的连接器,请使用模型 API,如以下屏幕截图所示。

首先, undeploy OpenSearch 服务域内存中的模型:

POST /_plugins/_ml/models/<model_id>/_undeploy

然后您可以从模型索引中删除该模型:

DELETE /_plugins/_ml/models/<model_id>

最后,从连接器索引中删除连接器:

DELETE /_plugins/_ml/connectors/<connector_id>

结论

在本文中,您学习了如何在 SageMaker 中部署模型、使用 OpenSearch Service 控制台创建 AI/ML 连接器以及构建神经搜索索引。在 OpenSearch Service 中配置 AI/ML 连接器的功能通过与外部模型的本地集成来简化矢量水合过程。您可以使用神经摄取管道和神经搜索在几分钟内创建神经搜索索引,神经搜索使用模型 ID 在摄取和搜索期间动态生成向量嵌入。

要了解有关这些 AI/ML 连接器的更多信息,请参阅 适用于 AWS 服务的 Amazon OpenSearch Service AI 连接器, 用于语义搜索的 AWS CloudFormation 模板集成为第三方 ML 平台创建连接器.


作者简介

阿鲁纳戈文达拉朱 是 Amazon OpenSearch 专家解决方案架构师,曾与许多商业和开源搜索引擎合作。她对搜索、相关性和用户体验充满热情。她在将最终用户信号与搜索引擎行为相关联方面的专业知识帮助许多客户改善了他们的搜索体验。

达格尼·布劳恩 是 AWS 的首席产品经理,专注于 OpenSearch。

时间戳记:

更多来自 AWS 大数据