

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

# 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 つのインデックスでは、英語と多言語の自動セマンティックエンリッチメントと、辞書フィールドを組み合わせることができます。

![インデックス名フィールド、セマンティックエンリッチメントフィールド、および辞書検索フィールドを表示するインデックスページを作成します。](http://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/images/ase-console-exp-serverless.png)


 AWS コマンドラインインターフェイス (AWS CLI) を使用して自動セマンティックエンリッチメントインデックスを作成するには、create-index コマンドを使用します。

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

 次の index-schema の例では、 `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:AWS::OpenSearchServerless::CollectionIndex) を使用して、コレクションのプロビジョニング中およびコレクションの作成後にセマンティック検索を作成することもできます。

## 既存のインデックスを更新する
<a name="serverless-semantic-enrichment-update-index"></a>

既存のインデックスを更新して、新しいセマンティックエンリッチメントフィールドを追加したり、既存のフィールドでセマンティックエンリッチメントを有効または無効にしたり、非セマンティックテキストフィールドを追加したりできます。`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]
```

### 新しいセマンティックエンリッチメントフィールドを追加する
<a name="serverless-semantic-enrichment-update-add-field"></a>

セマンティックエンリッチメントを有効にした新しい`text`フィールドを既存のインデックスに追加できます。このサービスは、必要な ML モデル、取り込みパイプライン、検索パイプラインを自動的にセットアップします。更新後にインデックス付けされた新しいドキュメントは自動的に強化されます。

**重要**  
既存のドキュメントはバックフィルされません。セマンティックエンリッチメントフィールドを既存のドキュメントに入力するには、更新後に再度取り込む必要があります。再取り込まれるまで、既存のドキュメントは新しいフィールドでのセマンティック検索の恩恵を受けることはありません。

```
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"
                }
            }
        }
    }
}'
```

### フィールドでセマンティックエンリッチメントを無効にする
<a name="serverless-semantic-enrichment-update-disable-field"></a>

現在有効になっているフィールドでセマンティックエンリッチメントを無効にするには、 `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"
                }
            }
        }
    }
}'
```

### 更新の制限
<a name="serverless-semantic-enrichment-update-limitations"></a>

以下のオペレーションは ではサポートされていない`update-index`ため、インデックスを削除して再作成する必要があります。
+ **現在`language_options`**セマンティックエンリッチメントが有効になっているフィールドの変更。最初に フィールドを無効にしてから、新しい言語オプションで再度有効にします。
+ **ネストされたフィールドの更新。**セマンティックエンリッチメントは最上位`text`フィールドでのみサポートされています。
+ **インデックス の更新`settings`。**

**注記**  
インデックスに、自動セマンティックエンリッチメントによって作成されなかったカスタム取り込みパイプラインまたは検索パイプラインがある場合、更新オペレーションはブロックされます。セマンティックエンリッチメントフィールドを追加する前に、カスタムパイプラインを削除します。

## データの取り込みと検索
<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\_match」はサポートされていません。さらに、この機能は、ネストされた一致クエリを置き換えるすべての複合クエリをサポートします。複合クエリには、bool、Boosting、Constant\_score、dis\_max、 function\_score、ハイブリッドなどがあります。

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

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

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

Amazon OpenSearch Service は、インデックス作成時にスパースベクトル生成中に消費された OpenSearch Compute Units (OCUs) に基づいて、自動セマンティックエンリッチメントを請求します。自動セマンティックエンリッチメントを有効にしたテキストフィールドのインデックス作成中の実際の使用に対してのみ課金されます。1 つのセマンティック検索 OCU は、英語コンテンツに対して 1,110 万トークンを処理できます。24 億個のトークンを処理するには、約 216 個のセマンティック検索 OCU 時間 (24 億/1,110 万) が必要です。セマンティック検索 OCU 時間あたり 0.24 USD の料金では、自動セマンティック検索のために 10 GB のデータを処理するコストは 51 USD (216 OCU 時間 x 0.24 USD/OCU 時間) になります。検索オペレーション中またはデータストレージには、セマンティック検索 OCU の追加料金はかかりません。

Amazon CloudWatch メトリクス を使用して、この消費量をモニタリングできます`SemanticSearchOCU`。モデルトークンの制限、OCU あたりのボリュームスループット、およびサンプル計算の例の詳細については、[OpenSearch Service の料金](https://aws.amazon.com/opensearch-service/pricing/)」を参照してください。