无服务器的自动语义丰富 - 亚马逊 OpenSearch 服务

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

无服务器的自动语义丰富

简介

与词法搜索相比,自动语义丰富功能可以帮助将搜索相关性提高多达20%。自动语义丰富消除了管理自己的机器学习(机器学习)模型基础架构和与搜索引擎集成所带来的无差别繁重的工作。该功能适用于所有三种无服务器集合类型:搜索、时间序列和矢量。

什么是语义搜索

传统搜索引擎依靠 word-to-word匹配(称为词法搜索)来查找查询结果。尽管这对于诸如电视型号之类的特定查询效果很好,但它很难进行更抽象的搜索。例如,在搜索 “沙滩鞋” 时,词汇搜索仅匹配目录商品中的单个单词 “鞋子”、“沙滩”、“for” 和 “the”,可能缺少不包含确切搜索词的相关商品,例如 “防水凉鞋” 或 “冲浪鞋”。

语义搜索返回的查询结果不仅包含关键字匹配,还包含用户搜索意图及上下文含义。例如,如果用户搜索 “如何治疗头痛”,则语义搜索系统可能会返回以下结果:

  • 偏头痛疗法

  • 疼痛管理技术

  • Over-the-counter 止痛药

型号详情和性能基准

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

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

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

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

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

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

支持的语言

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

为无服务器集合设置自动语义丰富索引

为文本字段设置启用自动语义扩充功能的索引非常简单,而且在创建新索引期间 APIs,您可以通过控制台和 CloudFormation 模板对其进行管理。要为现有索引启用该功能,您需要在为文本字段启用自动语义丰富功能的情况下重新创建索引。

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

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

aws opensearchserverless create-index \ --id [collection_id] \ --index-name [index_name] \ --index-schema [index_body] \

在以下示例索引架构中,t itle_semantic 字段的字段类型设置为文本,并将参数 semantic_ enrichmentic_enrichmentic 设置为 “已启用” 状态设置 s emantic_enrichmentic_ entrich 参数可以自动扩充标题_语义字段。您可以使用 l anguage_options 字段来指定英语或多语言

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:AWS::OpenSearchServerless::CollectionIndex)来创建语义搜索。

数据摄取和搜索

创建启用了自动语义扩充功能的索引后,该功能将在数据摄取过程中自动运行,无需进行其他配置。

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

  • 分析您为丰富语义而指定的文本字段

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

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

此过程使用内置 OpenSearch的 ML 连接器和采集管道,这些管道是在后台自动创建和管理的。

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

为自动语义增强配置权限

创建自动语义增强索引之前,您需要配置所需的权限。本节介绍所需权限及其设置方法。

IAM 策略权限

使用以下 AWS Identity and Access Management (IAM) 策略授予使用自动语义丰富所需的权限:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AutomaticSemanticEnrichmentPermissions", "Effect": "Allow", "Action": [ "aoss:CreateIndex", "aoss:GetIndex", "aoss:UpdateIndex", "aoss:DeleteIndex", "aoss:APIAccessAll" ], "Resource": "*" } ] }
密钥权限
  • 这些 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" ] }, ]

网络访问权限

要允许服务 APIs 访问私有集合,您必须配置网络策略,允许在服务 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" ], } ]
要配置私有集合的网络访问权限
  1. https://console.aws.amazon.com/aos/家中登录 OpenSearch 服务控制台。

  2. 在左侧导航中,选择网络策略。然后,执行以下操作之一:

    • 选择现有策略名称,然后选择编辑

    • 选择创建网络策略,并配置策略详细信息

  3. 访问权限类型区域中,选择私有(推荐),然后选择 AWS 服务私有访问权限

  4. 在搜索字段中,选择服务,然后选择 aoss.amazonaws.com

  5. 在 “资源类型” 区域中,选中 “启用 OpenSearch 终端节点访问权限” 复选框。

  6. 对于搜索集合,或输入特定的前缀词,在搜索字段中选择集合名称。然后输入或选择要与网络策略相关联的集合名称。

  7. 针对新网络策略选择创建,或针对现有网络策略选择更新

查询重写

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

自动语义扩充的局限性

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

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

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

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

定价

OpenSearch Serverless 会根据索引时稀疏向量生成期间消耗的 OpenSearch 计算单位 (OCUs) 自动开具语义丰富账单。您只需为编制索引期间的实际使用量付费。您可以使用 Amazon CloudWatch 指标 SemanticSearch OCU 监控此消耗量。有关模型代币限制、每个 OCU 的吞吐量以及示例计算示例的具体详细信息,请访问 OpenSearch 服务定价