View a markdown version of this page

亚马逊 OpenSearch 服务的自动语义扩展 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 OpenSearch 服务的自动语义扩展

简介

与其他传统搜索引擎类似,亚马逊 OpenSearch 服务使用单词匹配(词汇搜索)来查找结果。这种方法适用于产品代码或型号等特定查询,但在抽象搜索中却很困难,因为在抽象搜索中,理解用户意图变得至关重要。例如,当您搜索 “沙滩鞋” 时,词汇搜索会匹配目录商品中的单个单词 “鞋子”、“沙滩”、“for” 和 “the”,这可能会遗漏不包含确切搜索词的 “防水凉鞋” 或 “冲浪鞋” 等相关商品。

自动语义增强通过同时考虑关键字匹配和搜索背后的上下文含义来解决这一限制。此功能可以了解搜索意图,并将搜索相关性提高多达20%。为索引中的文本字段启用此功能以增强搜索结果。

注意

运行版本 2.19 或更高版本的 OpenSearch 服务域可以使用自动语义扩展。此外, OpenSearch 版本为 2.19 的域还需要更新最新的服务软件版本。该功能适用于公有访问域和 VPC 访问域。对于 VPC 域,在创建或管理语义丰富索引之前,必须对 OpenSearch 服务功能主体进行授权。有关更多信息,请参阅 对 VPC 域使用自动语义扩展

模型细节和性能基准

虽然此功能可在不暴露底层模型的情况下处理幕后的技术复杂性,但我们通过简短的模型描述和基准测试结果提供透明度,以帮助您就关键工作负载中的功能采用做出明智的决策。

自动语义丰富使用服务管理、预训练的稀疏模型,无需自定义微调即可有效运行。该模型分析您指定的字段,根据从不同训练数据中学到的关联将其扩展为稀疏向量。扩展后的术语及其显著性权重以本地 Lucene 索引格式存储,以实现高效检索。我们使用纯文档模式优化了此过程,在该模式下,编码仅在数据摄取期间进行。搜索查询仅进行标记化,而不是通过稀疏模型进行处理,这使得该解决方案既具有成本效益又具有高性能。

我们在功能开发期间的性能验证使用了 MS MARCO 段落检索数据集,其段落平均为 334 个字符。在相关性得分方面,我们在英语内容的 BEIR 基准测试中测量了前 10 个搜索结果(ndcg @10)的平均归一化折扣累积增益 (NDCG),以及多语言内容在 MIRACL 上的平均值 ndcg @10。我们通过客户端、第 90 个百分位数 (p90) 的测量来评估延迟,搜索响应 p90 采用了值。https://github.com/beir-cellar/beir这些基准为搜索相关性和响应时间提供了基准性能指标。以下是关键的基准数据-

  • 英语-与词汇搜索相比,相关性提高了20%。与词法搜索相比,它还将P90的搜索延迟降低了7.7%(BM25为26毫秒,自动语义丰富为24毫秒)。

  • Multi-lingual -与词汇搜索相比,相关性提高了105%,而P90搜索延迟比词汇搜索增加了38.4%(BM25为26毫秒,自动语义丰富为36毫秒)。

鉴于每种工作负载的独特性质,我们建议您在做出实施决策之前,使用自己的基准测试标准在开发环境中评估此功能。

支持的语言

该功能支持英语。此外,该模型还支持阿拉伯语、孟加拉语、中文、芬兰语、法语、印地语、印度尼西亚语、日语、韩语、波斯语、俄语、西班牙语、斯瓦希里语和泰卢固语。

为域名设置自动语义丰富索引

为文本字段设置启用了自动语义增强功能的索引非常简单,并且可以在创建新索引期间通过控制台、API 和 Amazon CloudFormation 模板对其进行管理。要为现有索引启用它,您需要重新创建索引,为文本字段启用自动语义扩展。

控制台体验- Amazon 控制台允许您轻松创建带有自动语义丰富字段的索引。选择域名后,您将在控制台顶部找到 “创建索引” 按钮。单击 “创建索引” 按钮后,您将找到定义自动语义丰富字段的选项。在一个索引中,您可以组合英语和多语言的自动语义增强功能以及词汇字段。

创建显示索引名称字段、语义丰富字段和搜索字段的索引页。

API 体验-要使用 Amazon 命令行接口 (Amazon CLI) 创建自动语义丰富索引,请使用 create-index 命令:

aws opensearch create-index \ --domain-name [domain_name] \ --index-name [index_name] \ --index-schema [index_body] \

在以下索引架构示例中,title_semantic 字段的字段类型设置为文本,并将参数 s em antic_enrichment 设置为 “启用” 状态。 设置 s emantic_enrichtic 参数可以自动扩展 title_semantic 字段的语义。 您可以使用 l anguage_options 字段来指定英语或 MULTI-LINGUAL

aws opensearch create-index \ --id XXXXXXXXX \ --index-name 'product-catalog' \ --index-schema '{ "mappings": { "properties": { "product_id": { "type": "keyword" }, "title_semantic": { "type": "text", "semantic_enrichment": { "status": "ENABLED", "language_options": "english" } }, "title_non_semantic": { "type": "text" } } } }'

要描述创建的索引,请使用以下命令:

aws opensearch get-index \ --domain-name [domain_name] \ --index-name [index_name] \

更新现有索引

您可以更新现有索引以添加新的语义丰富字段,启用或禁用现有字段的语义扩展,或者添加非语义文本字段。使用该update-index命令并在中仅提供要更改的字段index-schema。请求中未包含的字段保持不变。

注意

索引settings无法更新。如果您在请求中包含一个settings区块,则该操作会返回验证错误。要更改索引设置,必须删除并重新创建索引。

要使用更新索引 Amazon CLI,请使用以下update-index命令:

aws opensearch update-index \ --domain-name [domain_name] \ --index-name [index_name] \ --index-schema [index_body]

添加新的语义丰富字段

您可以向现有索引添加启用了语义丰富功能的新text字段。该服务会自动设置所需的 ML 模型、采集管道和搜索管道。更新后编入索引的新文档将自动丰富。

重要

现有文档未回填。要填充现有文档的语义丰富字段,必须在更新后重新载入它们。在重新摄取之前,现有文档将无法从新字段的语义搜索中受益。

aws opensearch update-index \ --domain-name my-domain \ --index-name product-catalog \ --index-schema '{ "mappings": { "properties": { "description": { "type": "text", "semantic_enrichment": { "status": "ENABLED", "language_options": "english" } } } } }'

禁用字段的语义扩展

要对当前启用语义增强的字段禁用语义扩展,statusDISABLED将设置为。该字段已从采集和搜索管道中移除。基础文本字段及其嵌入字段保留在索引中,但不再丰富。

aws opensearch update-index \ --domain-name my-domain \ --index-name product-catalog \ --index-schema '{ "mappings": { "properties": { "title_semantic": { "type": "text", "semantic_enrichment": { "status": "DISABLED" } } } } }'

更新限制

不支持以下操作,需要您删除并重新创建索引:update-index

  • 更改language_options当前启用了语义增强的字段。首先禁用该字段,然后使用新的语言选项将其重新启用。

  • 更新嵌套字段。仅顶级text字段支持语义扩展。

  • 更新索引settings

注意

如果索引的自定义采集或搜索管道不是通过自动语义丰富创建的,则更新操作将被阻止。在添加语义丰富字段之前,移除自定义管道。

数据摄取和搜索

创建启用了自动语义增强的索引后,该功能将在数据摄取过程中自动运行,无需额外配置。

数据提取:当您将文档添加到索引时,系统会自动:

  • 分析您为增强语义而指定的文本字段

  • 使用 OpenSearch 服务管理的稀疏模型生成语义编码

  • 将这些丰富的表示形式与您的原始数据一起存储

此流程使用内置 OpenSearch的 ML 连接器和采集管道,它们是在幕后自动创建和管理的。

搜索:语义丰富数据已经编制了索引,因此查询无需再次调用 ML 模型即可高效运行。这意味着您可以提高搜索相关性,而不会产生额外的搜索延迟开销。

对 VPC 域使用自动语义扩展

运行最新服务软件更新 2.19 或更高 OpenSearch 版本的公共访问域和 VPC 访问域均支持自动语义扩展。

对于 VPC 访问域,Amazon OpenSearch Service 使用托管服务来配置机器学习模型、采集管道和支持语义丰富的搜索管道。由于 VPC 域不可公开访问,因此在创建或管理语义丰富索引之前,您必须授权此托管服务访问您的域。

授权 OpenSearch 服务功能主体

使用 AuthorizeVpcEndpointAccess API 授予访问权限,指定features.opensearchservice.amazonaws.com为服务主体:

aws opensearch authorize-vpc-endpoint-access \ --domain-name domain-name \ --service "features.opensearchservice.amazonaws.com" \ --region region

成功的呼叫返回:

{ "AuthorizedPrincipal": { "PrincipalType": "AWS Service", "Principal": "features.opensearchservice.amazonaws.com" } }

您只需要为每个域名授权一次委托人。对于公共访问域,不需要执行此步骤。

如果您在授权委托人之前尝试在 VPC 域上进行语义丰富索引操作(create-indexupdate-indexget-index、、或delete-index),则该操作会失败,并显示与以下内容类似的错误:

An error occurred (AccessDeniedException) when calling the GetIndex operation: This operation is not authorized for VPC domain. Please authorize 'features.opensearchservice.amazonaws.com' through the AuthorizeVpcEndpointAccess API.

授权委托人后,重试该操作。

控制台体验

您可以直接从控制台完成授权并为 VPC 域创建语义丰富索引。在亚马逊 OpenSearch 服务控制台中,选择您的 VPC 域以显示自动语义丰富横幅,然后选择前往索引打开索引选项卡。

如果 OpenSearch 服务功能主体尚未获得访问域的授权,则索引选项卡将显示访问拒绝消息,而不是创建索引按钮。选择授权委托人打开 VPC 终端节点选项卡。

索引选项卡显示带有 “授权主体” 按钮的访问被拒绝横幅。

在 VPC 终端节点选项卡上,选择授权委托人,选择授权其他 Amazon 服务的委托人,然后选择 OpenSearch 服务功能。这将执行与前一节中描述AuthorizeVpcEndpointAccess的 API 相同的授权。

包含 VPC 终端节点和授权委托人面板的 VPC 终端节点选项卡。
选中 “ OpenSearch 服务功能” 的 “授权委托人” 对话框。

返回索引选项卡。创建索引按钮现在可用。选择创建索引打开创建索引页面,您可以在其中定义自动语义丰富字段并为您的 VPC 域创建索引。

授权后的 “索引” 选项卡显示信息横幅和 “创建索引” 按钮。
注意

对于 VPC 域,由于 VPC 网络限制,索引列表无法显示在控制台中。要查看您的索引,请直接使用 OpenSearch 仪表板和仪表板 URL。由于您无法在控制台中查看索引,因此也无法在控制台中更新现有的语义丰富索引。要更新 VPC 域上的语义丰富索引,请使用 update-index API。有关更多信息,请参阅 更新现有索引

为自动语义增强配置权限

在创建具有自动语义增强功能的索引之前,您需要配置所需的权限。本节解释了不同索引操作所需的权限,以及如何为 Amazon Identity and Access Management (IAM) 和细粒度访问控制场景设置这些权限。

IAM 权限

自动语义丰富操作需要以下 IAM 权限。这些权限因您要执行的特定索引操作而异。

CreateIndex API 权限

要创建具有自动语义增强功能的索引,您需要以下 IAM 权限:

  • es:CreateIndex— 创建具有语义丰富功能的索引。

  • es:ESHttpHead— 执行 HEAD 请求以检查索引是否存在。

  • es:ESHttpPut— 执行 PUT 请求以创建索引。

  • es:ESHttpPost— 执行索引操作的 POST 请求。

UpdateIndex API 权限

要使用自动语义增强功能更新现有索引,您需要以下 IAM 权限:

  • es:UpdateIndex— 更新索引设置和映射。

  • es:ESHttpPut— 执行索引更新的 PUT 请求。

  • es:ESHttpGet— 执行 GET 请求以检索索引信息。

  • es:ESHttpPost— 执行索引操作的 POST 请求。

GetIndex API 权限

要使用自动语义增强功能检索有关索引的信息,您需要以下 IAM 权限:

  • es:GetIndex— 检索索引信息和设置。

  • es:ESHttpGet— 执行 GET 请求以检索索引数据。

DeleteIndex API 权限

要删除具有自动语义增强功能的索引,您需要以下 IAM 权限:

  • es:DeleteIndex— 删除索引及其语义丰富组件。

  • es:ESHttpDelete— 执行删除索引的删除请求。

IAM 策略示例

以下基于身份的访问策略示例为用户提供了通过自动语义丰富来管理索引所需的权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSemanticEnrichmentIndexOperations", "Effect": "Allow", "Action": [ "es:CreateIndex", "es:UpdateIndex", "es:GetIndex", "es:DeleteIndex", "es:ESHttpHead", "es:ESHttpGet", "es:ESHttpPut", "es:ESHttpPost", "es:ESHttpDelete" ], "Resource": "arn:aws:es:aws-region:111122223333:domain/domain-name" } ] }

aws-region111122223333、和domain-name替换为您的特定值。您可以通过在资源 ARN 中指定特定的索引模式来进一步限制访问权限。

Fine-grained 访问控制权限

如果您的 Amazon OpenSearch Service 域启用了精细的访问控制,则除了 IAM 权限外,您还需要其他权限。

2026 年 8 月 12 日当天或之后创建的域包括预定义的细粒度访问控制角色automatic_semantic_enrichment_full_access,该角色授予管理语义丰富索引所需的权限。如果您的域使用精细的访问控制,请将您的用户或后端角色映射到,automatic_semantic_enrichment_full_access而不是手动分配单个集群和索引权限。

如果您的域名是在此日期之前创建的,请使用以下部分中描述的精细访问控制权限。每个索引操作都需要以下权限。

CreateIndex API 权限

启用精细访问控制后,创建具有自动语义增强功能的索引需要以下额外权限:

  • indices:admin/create— 创建索引操作。

  • indices:admin/mapping/put— 创建和更新索引映射。

  • cluster:admin/opensearch/ml/create_connector— 为语义处理创建机器学习连接器。

  • cluster:admin/opensearch/ml/register_model— 注册机器学习模型以丰富语义。

  • cluster:admin/ingest/pipeline/put— 为数据处理创建采集管道。

  • cluster:admin/search/pipeline/put— 为查询处理创建搜索管道。

UpdateIndex API 权限

启用精细访问控制后,需要以下额外权限才能使用自动语义增强功能更新索引:

  • indices:admin/get— 检索索引信息。

  • indices:admin/settings/update— 更新索引设置。

  • indices:admin/mapping/put— 更新索引映射。

  • cluster:admin/opensearch/ml/create_connector— 创建机器学习连接器。

  • cluster:admin/opensearch/ml/register_model— 注册机器学习模型。

  • cluster:admin/ingest/pipeline/put— 创建采集管道。

  • cluster:admin/search/pipeline/put— 创建搜索管道。

  • cluster:admin/ingest/pipeline/get— 检索采集管道信息。

  • cluster:admin/search/pipeline/get— 检索搜索管道信息。

GetIndex API 权限

启用精细访问控制后,需要以下额外权限才能检索有关具有自动语义丰富功能的索引信息:

  • indices:admin/get— 检索索引信息。

  • cluster:admin/ingest/pipeline/get— 检索采集管道信息。

  • cluster:admin/search/pipeline/get— 检索搜索管道信息。

DeleteIndex API 权限

启用精细访问控制后,删除具有自动语义增强功能的索引需要以下额外权限:

  • indices:admin/delete— 删除索引操作。

查询重写

自动语义丰富功能可自动将现有的 “匹配” 查询转换为语义搜索查询,无需修改查询。如果匹配查询是复合查询的一部分,则系统会遍历您的查询结构,查找匹配查询,并将其替换为神经稀疏查询。目前,该功能仅支持替换 “匹配” 查询,无论是独立查询还是复合查询的一部分。不支持 “multi_match”。此外,该功能支持所有复合查询以替换其嵌套匹配查询。复合查询包括:bool、boosting、constant_score、dis_max、function_score 和混合查询。

自动语义增强的局限性

当应用于包含自然语言内容(例如电影标题、产品描述、评论和摘要)的中小型字段时,自动语义搜索最有效。尽管语义搜索增强了大多数用例的相关性,但对于某些场景而言,它可能不是最佳选择。在决定是否为您的特定用例实现自动语义丰富时,请考虑以下限制。

  • 超长文档 — 当前的稀疏模型仅处理每个英文文档的前 8,192 个标记。对于多语言文档,它是 512 个令牌。对于篇幅较长的文章,可以考虑实现文档分块以确保完整的内容处理。

  • 日志分析工作负载 — 语义丰富会显著增加索引大小,这对于通常需要精确匹配的日志分析来说可能是不必要的。额外的语义上下文几乎无法提高日志搜索的有效性,不足以证明存储需求的增加是合理的。

  • 自动语义丰富与 “派生源” 功能不兼容。

  • 限制 — 服务域的索引推理请求目前上限为 200 TPS。 OpenSearch 这是软限制;如需更高的限额,请联系 Amazon 支持部门。

定价

亚马逊 OpenSearch 服务根据索引时生成稀疏向量期间消耗的 OpenSearch 计算单元 (OCU) 自动计费语义扩展。您只需为启用了自动语义增强功能的文本字段编制索引期间的实际使用量付费。一个语义搜索 OCU 可以处理英语内容的 1110 万个代币。要处理 24 亿个代币,你需要大约 216 个语义搜索 OCU-hours (24 亿/1110 万个)。如果每个语义搜索的价格为0.24美元 OCU-hour,则为自动语义搜索处理10 GB数据的成本将为51美元(216 x 0美元)。 OCU-hours 24/OCU-小时)。在搜索操作或数据存储期间,没有额外的语义搜索 OCU 费用。

您可以使用亚马逊 CloudWatch 指标监控这种消费SemanticSearchOCU。有关模型代币限制、每个 OCU 的容量吞吐量以及示例计算示例的具体详细信息,请访问OpenSearch 服务定价

支持 Amazon Web Services 区域

自动语义增强可在以下 Amazon Web Services 区域版本中使用:

  • 美国东部(弗吉尼亚州北部)

  • 美国东部(俄亥俄州)

  • 美国西部(俄勒冈州)

  • 亚太地区(孟买)

  • 亚太地区(新加坡)

  • 亚太地区(悉尼)

  • 亚太地区(东京)

  • 欧洲地区(法兰克福)

  • 欧洲地区(爱尔兰)

  • 欧洲地区(斯德哥尔摩)

  • 欧洲(西班牙)