本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
无服务器的自动语义丰富
概述
与词法搜索相比,自动语义丰富功能可以帮助将搜索相关性提高多达20%。自动语义丰富消除了管理自己的机器学习(机器学习)模型基础架构和与搜索引擎集成所带来的无差别繁重的工作。该功能适用于所有三种无服务器集合类型:搜索、时间序列和矢量。
语义搜索概念
传统搜索引擎依靠单词匹配(称为词法搜索)来查找查询结果。尽管这适用于电视机型号等特定查询,但对于更抽象的搜索,它可能不会返回相关的结果。例如,在搜索 “沙滩鞋” 时,词汇搜索仅匹配目录商品中的单个单词 “鞋子”、“沙滩”、“for” 和 “the”,可能缺少不包含确切搜索词的相关商品,例如 “防水凉鞋” 或 “冲浪鞋”。
语义搜索返回的查询结果不仅包含关键字匹配,还包含用户搜索意图及上下文含义。例如,如果用户搜索 “如何治疗头痛”,则语义搜索系统可能会返回以下结果:
-
偏头痛疗法
-
疼痛管理技术
-
Over-the-counter 止痛药
型号详情和性能基准
尽管此功能可以在不公开底层模型的情况下处理幕后的技术复杂性,但以下模型描述和基准测试结果可帮助您就关键工作负载中的功能采用做出明智的决策。
自动语义丰富使用服务托管、预训练的稀疏模型,无需自定义微调即可有效运行。该模型分析您指定的字段,根据从各种训练数据中学到的关联将它们扩展为稀疏向量。扩展后的术语及其显著性权重以原生 Lucene 索引格式存储,便于高效检索。我们已经使用仅限文档模式优化了此过程,在这种模式下
功能开发期间的性能验证使用了 MS MARCO
-
英语-与词汇搜索相比,相关性提高了20%。与词法搜索相比,它还将P90的搜索延迟降低了7.7%(BM25为26毫秒,自动语义丰富为24毫秒)。
-
Multi-lingual -与词法搜索相比,相关性提高了105%,而P90搜索延迟比词汇搜索增加了38.4%(BM25为26毫秒,自动语义丰富为36毫秒)。
鉴于每种工作负载的独特性,在做出实施决策之前,您可以使用自己的基准测试标准在开发环境中评估此功能。
支持的语言
该功能支持英语。此外,该模型还支持阿拉伯语、孟加拉语、中文、芬兰语、法语、印地语、印度尼西亚语、日语、韩语、波斯语、俄语、西班牙语、斯瓦希里语和泰卢固语。
为无服务器集合设置自动语义丰富索引
在创建新索引期间,您可以通过控制台、API 和 CloudFormation 模板为文本字段设置启用自动语义丰富功能的索引。要为现有索引启用该功能,必须重新创建索引,同时为文本字段启用自动语义扩充功能。
使用 AWS 控制台,您可以创建带有自动语义丰富字段的索引。选择集合后,可以在控制台顶部找到 “创建索引” 按钮。选择 “创建索引” 后,控制台将提供用于定义自动语义丰富字段的选项。在一个索引中,您可以组合英语和多语言的自动语义扩充以及词汇字段。
要使用 AWS 命令行界面 (AWS CLI) 创建自动语义丰富索引,请使用 create-index 命令:
aws opensearchserverless create-index \ --id [collection_id] \ --index-name [index_name] \ --index-schema [index_body] \
在以下示例索引架构中,该title_semantic字段的字段类型设置为text,参数semantic_enrichment设置为状态。ENABLED设置该semantic_enrichment参数可实现title_semantic字段的自动语义丰富。您可以使用该language_options字段来指定english或multi-lingual。
aws opensearchserverless 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 opensearchserverless get-index \ --id [collection_id] \ --index-name [index_name] \
您还可以在集合配置期间以及创建集合之后使用 CloudFormation 模板 (Type:AWSOpenSearchServerless::::CollectionIndex) 来创建语义搜索。
更新现有索引
您可以更新现有索引以添加新的语义丰富字段,在现有字段上启用或禁用语义丰富功能,或者添加非语义文本字段。使用update-index命令并在中仅提供要更改的字段index-schema。请求中未包含的字段保持不变。
注意
settings无法更新索引。如果您在请求中包含一个settings块,则该操作会返回验证错误。要更改索引设置,必须删除并重新创建索引。
要使用更新索引 AWS CLI,请使用以下update-index命令:
aws opensearchserverless update-index \ --id [collection_id] \ --index-name [index_name] \ --index-schema [index_body]
添加新的语义丰富字段
您可以向现有索引添加启用语义丰富功能的新text字段。该服务会自动设置所需的机器学习模型、采集管道和搜索管道。更新后编入索引的新文档会自动丰富。
重要
现有文档不会回填。要在现有文档上填充语义丰富字段,必须在更新后重新收录它们。在重新摄取之前,现有文档将无法从新字段的语义搜索中受益。
aws opensearchserverless update-index \ --id my-collection-id \ --index-name product-catalog \ --index-schema '{ "mappings": { "properties": { "description": { "type": "text", "semantic_enrichment": { "status": "ENABLED", "language_options": "english" } } } } }'
在字段上禁用语义丰富
要在当前启用语义丰富功能的字段上禁用语义扩展,请将其设置status为。DISABLED该字段已从采集和搜索管道中移除。基础文本字段及其嵌入字段保留在索引中,但不再丰富。
aws opensearchserverless update-index \ --id my-collection-id \ --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 模型即可高效运行。这意味着您可以提高搜索相关性,而不会产生额外的搜索延迟开销。
为自动语义增强配置权限
在创建自动语义丰富索引之前,必须配置所需的权限。本节介绍所需权限及其设置方法。
IAM 策略权限
使用以下 AWS Identity and Access Management (IAM) 策略授予使用自动语义丰富所需的权限:
- 密钥权限
-
-
这些
aoss:*Index权限启用索引管理 -
该
aoss:APIAccessAll权限允许 OpenSearch API 操作 -
要限制对特定集合的权限,请将
"Resource": "*"替换为集合的 ARN
-
配置数据访问权限
要设置用于自动语义增强的索引,您必须拥有适当的数据访问策略,这些策略需授予访问索引、管道和模型集合资源的权限。有关数据访问策略的更多信息,请参阅 Amazon OpenSearch 无服务器的数据访问控制。有关配置数据访问策略的过程,请参阅 创建数据访问策略(控制台)。
数据访问权限
[ { "Description": "Create index permission", "Rules": [ { "ResourceType": "index", "Resource": ["index/collection_name/*"], "Permission": [ "aoss:CreateIndex", "aoss:DescribeIndex", "aoss:UpdateIndex", "aoss:DeleteIndex" ] } ], "Principal": [ "arn:aws:iam::account_id:role/role_name" ] }, { "Description": "Create pipeline permission", "Rules": [ { "ResourceType": "collection", "Resource": ["collection/collection_name"], "Permission": [ "aoss:CreateCollectionItems", "aoss:DescribeCollectionItems" ] } ], "Principal": [ "arn:aws:iam::account_id:role/role_name" ] }, { "Description": "Create model permission", "Rules": [ { "ResourceType": "model", "Resource": ["model/collection_name/*"], "Permission": ["aoss:CreateMLResource"] } ], "Principal": [ "arn:aws:iam::account_id:role/role_name" ] }, ]
网络访问权限
要允许服务 API 访问私有集合,您必须配置网络策略以允许服务 API 与集合之间所需的访问。有关网络策略的更多信息,请参阅 Amazon OpenSearch Serverless 的网络访问权限。
[ { "Description":"Enable automatic semantic enrichment in a private collection", "Rules":[ { "ResourceType":"collection", "Resource":[ "collection/collection_name" ] } ], "AllowFromPublic":false, "SourceServices":[ "aoss.amazonaws.com" ], } ]
要配置私有集合的网络访问权限
-
登录 OpenSearch 服务控制台,网址为https://console.aws.amazon.com/aos/home
。 -
在左侧导航窗格中,选择网络策略。然后,执行以下操作之一:
-
选择现有策略名称,然后选择编辑
-
选择创建网络策略,并配置策略详细信息
-
-
在访问权限类型区域中,选择私有(推荐),然后选择 AWS 服务私有访问权限。
-
在搜索字段中,选择服务,然后选择 aoss.amazonaws.com。
-
在 “资源类型” 区域中,选中 “启用 OpenSearch 端点访问权限” 复选框。
-
对于搜索集合,或输入特定的前缀词,在搜索字段中选择集合名称。然后输入或选择要与网络策略相关联的集合名称。
-
针对新网络策略选择创建,或针对现有网络策略选择更新。
查询重写
自动语义丰富功能无需修改查询即可自动将现有的 “匹配” 查询转换为语义搜索查询。如果匹配查询是复合查询的一部分,则系统会遍历您的查询结构,找到匹配查询,然后将其替换为神经稀疏查询。目前,该功能仅支持替换 “匹配” 查询,无论是独立查询还是复合查询的一部分。 不支持 “多重匹配”。此外,该功能还支持所有复合查询来替换其嵌套的匹配查询。复合查询包括:bool、boosting、constant_score、dis_max、function_score 和混合。
自动语义扩充的局限性
当应用于包含自然语言内容(例如电影标题、产品描述、评论和摘要)的中小型字段时,自动语义搜索最为有效。尽管语义搜索增强了大多数用例的相关性,但它可能不是某些场景的最佳选择。在决定是否针对您的特定用例实现自动语义丰富时,请考虑以下限制。
-
很长的文档 — 当前的稀疏模型仅处理每个文档的前 8,192 个英语标记。对于多语言文档,它是 512 个代币。对于篇幅较长的文章,可以考虑实施文档分块,以确保完整的内容处理。
-
日志分析工作负载 — 语义丰富会显著增加索引大小,这对于通常需要精确匹配的日志分析来说可能是不必要的。额外的语义上下文很少能提高日志搜索的有效性,足以证明存储需求的增加是合理的。
-
自动语义丰富与 “派生来源” 功能不兼容。
定价
Amazon S OpenSearch ervic OpenSearch e 根据索引时稀疏向量生成过程中消耗的计算单位 (OCU) 自动计费语义扩充费用。您只需为启用自动语义丰富功能的文本字段编制索引期间的实际使用量付费。一个语义搜索 OCU 可以处理 1110 万个英语内容令牌。要处理24亿个代币,你需要大约216个语义搜索 OCU-hours (24亿/110万个)。每次语义搜索的价格为0.24美元 OCU-hour,处理10 GB数据以进行自动语义搜索的成本为51美元(216 x 0美元)。 OCU-hours 24/OCU-小时)。在搜索操作或数据存储期间,无需支付额外的语义搜索 OCU 费用。
您可以使用 Amazon CloudWatch 指标监控此消费SemanticSearchOCU。有关模型代币限制、每个 OCU 的吞吐量以及示例计算示例的具体详细信息,请访问OpenSearch 服务定价