

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Serverless の自動セマンティックエンリッチメント
<a name="serverless-semantic-enrichment"></a>

## 序章
<a name="serverless-semantic-enrichment-intro"></a>

自動セマンティックエンリッチメント機能は、辞書検索よりも検索の関連性を最大 20% 向上させるのに役立ちます。自動セマンティックエンリッチメントにより、独自の ML (機械学習) モデルインフラストラクチャと検索エンジンとの統合を管理するという差別化されていない手間が省けます。この機能は、検索、時系列、ベクトルの 3 つのサーバーレスコレクションタイプすべてで使用できます。

## セマンティック検索とは
<a name="serverless-semantic-enrichment-whats-is"></a>

 従来の検索エンジンは、クエリの結果を見つけるためにword-to-word一致 (辞書検索と呼ばれます) に依存しています。これはテレビのモデル番号などの特定のクエリに適していますが、より抽象的な検索には苦労します。例えば、「ビーチの靴」を検索する場合、辞書検索はカタログアイテム内の個々の単語「靴」、「ビーチ」、「for」、「the」に一致するだけで、正確な検索語を含まない「耐水性サンドラル」や「surf" などの関連製品が欠落している可能性があります。

 セマンティック検索は、キーワードマッチングだけでなく、ユーザーの検索のインテントとコンテキストの意味を組み込んだクエリ結果を返します。例えば、ユーザーが「どのように頭を悩ますか」を検索すると、セマンティック検索システムが次の結果を返します。
+ 片頭痛の治療法
+ 疼痛管理技術
+ 市販の鎮痛剤 

## モデルの詳細とパフォーマンスベンチマーク
<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)を使用して最適化されています。検索クエリは、スパースモデルを介して処理されるのではなく、単にトークン化されるため、ソリューションのコスト効率とパフォーマンスの両方が向上します。

 機能開発中のパフォーマンス検証では、平均 334 文字のパッセージを含む [MS MARCO](https://huggingface.co/datasets/BeIR/msmarco) パッセージ取得データセットを使用しました。関連性スコアリングについては、英語コンテンツの [BEIR](https://github.com/beir-cellar/beir) ベンチマークでは最初の 10 件の検索結果 (ndcg@10) の平均正規化割引累積ゲイン (NDCG) を、多言語コンテンツの MIRACL では平均 ndcg@10 を測定しました。クライアント側の 90 パーセンタイル (p90) 測定値と検索レスポンス p90 が[値を取り、レイテンシーを評価しました。](https://github.com/beir-cellar/beir)これらのベンチマークは、検索の関連性と応答時間の両方のベースラインパフォーマンス指標を提供します。主なベンチマーク番号は次のとおりです - 
+ 英語 - 辞書検索と比べて関連性が 20% 向上しました。また、辞書検索よりも P90 検索レイテンシーが 7.7% 低下しました (BM25 は 26 ミリ秒、自動セマンティックエンリッチメントは 24 ミリ秒）。
+ 多言語 - レキシカル検索に比べて関連性が 105% 向上しましたが、P90 検索レイテンシーはレキシカル検索に比べて 38.4% 増加しました (BM25 は 26 ミリ秒、自動セマンティックエンリッチメントは 36 ミリ秒）。

各ワークロードの固有の性質を考慮すると、実装を決定する前に、独自のベンチマーク基準を使用して開発環境でこの機能を評価することをお勧めします。

## サポートされている言語
<a name="serverless-semantic-enrichment-languages"></a>

この機能は英語をサポートしています。さらに、このモデルはアラビア語、ベンガル語、中国語、フィンランド語、フランス語、ヒンディー語、インドネシア語、日本語、韓国語、ペルシャ語、ロシア語、スペイン語、スワヒリ語、テルグ語もサポートしています。

## サーバーレスコレクションの自動セマンティックエンリッチメントインデックスを設定する
<a name="serverless-semantic-enrichment-index-setup"></a>

テキストフィールドの自動セマンティックエンリッチメントを有効にしてインデックスを設定することは簡単で、新しいインデックスの作成時にコンソール、APIs、 CloudFormation テンプレートを使用して管理できます。既存のインデックスに対して有効にするには、テキストフィールドに対してセマンティック自動エンリッチメントを有効にしてインデックスを再作成する必要があります。

コンソールエクスペリエンス - AWS コンソールでは、自動セマンティックエンリッチメントフィールドを使用してインデックスを簡単に作成できます。コレクションを選択すると、コンソールの上部にインデックス作成ボタンが表示されます。インデックスの作成ボタンをクリックすると、自動セマンティックエンリッチメントフィールドを定義するオプションが表示されます。1 つのインデックスでは、英語と多言語の自動セマンティックエンリッチメントの組み合わせと、辞書フィールドを組み合わせることができます。

![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/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] \
```

 次の index-schema の例では、 *title\$1semantic *フィールドのフィールドタイプを *text* に設定し、パラメータ *semantic\$1enrichment *を status *ENABLED* に設定します。*semantic\$1enrichment* パラメータを設定すると、 *title\$1semantic フィールドで自動セマンティック*エンリッチメントが有効になります。*language\$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 Service マネージドスパースモデルを使用してセマンティックエンコーディングを生成します
+ これらの強化された表現を元のデータとともに保存します。

このプロセスでは、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 のデータアクセスコントロール](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>

サービス API がプライベートコレクションにアクセスできるようにするには、サービス 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. OpenSearch Service コンソール ([https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home)) にサインインします。

1. 左のナビゲーションペインの *[ネットワークポリシー]* を選択します。次に、以下のいずれかを行ってください。
   + 既存のポリシー名を選択し、*[編集]* を選択します
   + *[ネットワークポリシーを作成]* を選択し、ポリシーの詳細設定をおこないます。

1. *[アクセスタイプ]* エリアで、*[プライベート (推奨)]* を選択し、*[AWS サービスプライベートアクセス]* を選択します。

1. 検索フィールドで、*[サービス]* を選択し、*aoss.amazonaws.com* を選択します。

1. *[リソースタイプ]* エリアで、*[OpenSearch エンドポイントへのアクセスを有効にする]* ボックスを選択します。

1. *[コレクションの検索] または [プレフィックス用語の入力]* では、検索フィールドで *[コレクション名]* を選択します。次に、ネットワークポリシーに関連付けるコレクションの名前を入力または選択します。

1. 新しいネットワークポリシーの場合は *[作成]*、既存のネットワークポリシーの場合は *[更新]* を選択します。

## クエリの書き換え
<a name="serverless-collection-query-rewrite"></a>

自動セマンティックエンリッチメントは、既存の「一致」クエリを、クエリの変更を必要とせずにセマンティック検索クエリに自動的に変換します。一致クエリが複合クエリの一部である場合、システムはクエリ構造を横断し、一致クエリを検索して、それらをニューラルスパースクエリに置き換えます。現在、この機能では、スタンドアロンクエリでも複合クエリの一部でも、「一致」クエリの置き換えのみがサポートされています。「multi\$1match」はサポートされていません。さらに、この機能は、ネストされた一致クエリを置き換えるすべての複合クエリをサポートします。複合クエリには、bool、Boosting、Constant\$1score、dis\$1max、 function\$1score、ハイブリッドなどがあります。

## 自動セマンティックエンリッチメントの制限
<a name="serverless-collection-ase-limitation"></a>

自動セマンティック検索は、映画のタイトル、製品説明、レビュー、概要など、自然言語コンテンツを含むsmall-to-medium規模のフィールドに適用すると最も効果的です。セマンティック検索はほとんどのユースケースの関連性を高めますが、特定のシナリオでは最適ではない場合があります。特定のユースケースに自動セマンティックエンリッチメントを実装するかどうかを決定するときは、以下の制限を考慮してください。
+ 非常に長いドキュメント – 現在のスパースモデルは、各ドキュメントの最初の 8,192 トークンのみを英語で処理します。多言語ドキュメントの場合、トークンは 512 個です。長い記事については、完全なコンテンツ処理を確保するためにドキュメントチャンキングの実装を検討してください。
+ ログ分析ワークロード – セマンティックエンリッチメントはインデックスサイズを大幅に増やします。これは、完全一致が通常十分であるログ分析には不要である可能性があります。セマンティックコンテキストを追加すると、増加したストレージ要件を正当化するのに十分なログ検索の有効性が向上することはめったにありません。
+ 自動セマンティックエンリッチメントは、派生ソース機能と互換性がありません。
+ スロットリング — インデックス推論リクエストは現在、OpenSearch Serverless では 100 TPS に制限されています。これはソフト制限です。より高い制限については AWS サポートにお問い合わせください。

## 料金
<a name="serverless-collection-ase-pricing"></a>

 OpenSearch Serverless は、インデックス作成時にスパースベクトル生成中に消費された OpenSearch コンピューティングユニット (OCUs) に基づいて、自動セマンティックエンリッチメントを請求します。インデックス作成中の実際の使用量に対してのみ課金されます。Amazon CloudWatch メトリクス SemanticSearchOCU を使用して、この消費量をモニタリングできます。モデルトークンの制限、OCU あたりのボリュームスループット、サンプル計算の例の詳細については、[OpenSearch Service の料金](https://aws.amazon.com/opensearch-service/pricing/)」を参照してください。