

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

# 无服务器的自动语义丰富
<a name="serverless-semantic-enrichment"></a>

## 简介
<a name="serverless-semantic-enrichment-intro"></a>

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

## 什么是语义搜索
<a name="serverless-semantic-enrichment-whats-is"></a>

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

 语义搜索返回的查询结果不仅包含关键字匹配，还包含用户搜索意图及上下文含义。例如，如果用户搜索 “如何治疗头痛”，则语义搜索系统可能会返回以下结果：
+ 偏头痛疗法
+ 疼痛管理技术
+ Over-the-counter 止痛药 

## 型号详情和性能基准
<a name="serverless-semantic-enrichment-model-detail"></a>

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

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

 我们在功能开发期间的性能验证使用了 [MS MARCO](https://huggingface.co/datasets/BeIR/msmarco) 段落检索数据集，其中的段落平均为 334 个字符。在相关性评分方面，我们在英语内容的 [BEIR基准测试中测量了前 10 个搜索结果（ndcg @10）的平均标准化折扣累积收益 (NDCG)，在多语言内容的 MIR](https://github.com/beir-cellar/beir) ACL 上测量了平均ndcg @10。[我们通过客户端、第 90 个百分位 (p90) 测量值和搜索响应 p90 取值来评估延迟。](https://github.com/beir-cellar/beir)这些基准提供了搜索相关性和响应时间的基准绩效指标。以下是关键的基准数据- 
+ 英语-与词汇搜索相比，相关性提高了20％。与词法搜索相比，它还将P90的搜索延迟降低了7.7％（BM25 为26毫秒，自动语义丰富为24毫秒）。
+ 多语言-与词法搜索相比，相关性提高了105％，而P90的搜索延迟比词汇搜索增加了38.4％（为26毫秒，自动语BM25 义丰富为36毫秒）。

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

## 支持的语言
<a name="serverless-semantic-enrichment-languages"></a>

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

## 为无服务器集合设置自动语义丰富索引
<a name="serverless-semantic-enrichment-index-setup"></a>

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

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

![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/ase-console-exp-serverless.png)


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

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

 *在以下示例索引架构中，t *itle\$1semantic 字段的字段类型设置为*文本*，并将参数 semantic\$1* enrichmentic\$1enrichmentic 设置为 “已启用” *状态*。**设置 s *emantic\$1enrichmentic\$1* entrich 参数可以自动扩充标题\$1语义字段。**您可以使用 l *anguage\$1options 字段来指定*英语*或多语言*。*

```
    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）来创建语义搜索。

## 数据摄取和搜索
<a name="serverless-semantic-enrichment-data-ingest"></a>

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

数据摄取：当您将文档添加到索引中时，系统会自动：
+ 分析您为丰富语义而指定的文本字段
+ 使用 OpenSearch 服务托管稀疏模型生成语义编码
+ 将这些丰富的表示与您的原始数据一起存储

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

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

## 为自动语义增强配置权限
<a name="serverless-semantic-enrichment-permissions"></a>

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

### IAM 策略权限
<a name="iam-policy-permissions"></a>

使用以下 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

### 配置数据访问权限
<a name="serverless-collection-permissions-data-network"></a>

要设置用于自动语义增强的索引，您必须拥有适当的数据访问策略，这些策略需授予访问索引、管道和模型集合资源的权限。有关数据访问策略的更多信息，请参阅 [Amazon OpenSearch 无服务器的数据访问控制](serverless-data-access.md)。有关配置数据访问策略的过程，请参阅 [创建数据访问策略（控制台）](serverless-data-access.md#serverless-data-access-console)。

#### 数据访问权限
<a name="serverless-collection-data-access-permissions"></a>

```
[
    {
        "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"
        ]
    },
]
```

#### 网络访问权限
<a name="serverless-collection-network-access-permissions"></a>

要允许服务 APIs 访问私有集合，您必须配置网络策略，允许在服务 API 和集合之间进行所需的访问。有关网络策略的更多信息，请参阅 [Amazon OpenSearch Serverless 的网络访问权限](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-network.html)。

```
[
   {
      "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/家](https://console.aws.amazon.com/aos/home)中登录 OpenSearch 服务控制台。

1. 在左侧导航中，选择*网络策略*。然后，执行以下操作之一：
   + 选择现有策略名称，然后选择*编辑*
   + 选择*创建网络策略*，并配置策略详细信息

1. 在*访问权限类型*区域中，选择*私有（推荐）*，然后选择 *AWS 服务私有访问权限*。

1. 在搜索字段中，选择*服务*，然后选择 *aoss.amazonaws.com*。

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

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

1. 针对新网络策略选择*创建*，或针对现有网络策略选择*更新*。

## 查询重写
<a name="serverless-collection-query-rewrite"></a>

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

## 自动语义扩充的局限性
<a name="serverless-collection-ase-limitation"></a>

当应用于包含自然语言内容 small-to-medium的大小字段（例如电影标题、产品描述、评论和摘要）时，自动语义搜索最为有效。尽管语义搜索增强了大多数用例的相关性，但它可能不是某些场景的最佳选择。在决定是否针对您的特定用例实现自动语义丰富时，请考虑以下限制。
+ 很长的文档 — 当前的稀疏模型仅处理每个文档的前 8,192 个英语标记。对于多语言文档，它是 512 个代币。对于篇幅较长的文章，可以考虑实施文档分块，以确保完整的内容处理。
+ 日志分析工作负载 — 语义丰富会显著增加索引大小，这对于通常需要精确匹配的日志分析来说可能是不必要的。额外的语义上下文很少能提高日志搜索的有效性，足以证明存储需求的增加是合理的。
+ 自动语义丰富与 “派生来源” 功能不兼容。
+ 限制 — 对于无服务器，索引推理请求的上限为 100 TPS。 OpenSearch 这是一个软限制；如需更高的限额，请联系 Su AWS pport。

## 定价
<a name="serverless-collection-ase-pricing"></a>

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