

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon OpenSearch Service 的自動語意擴充
<a name="opensearch-semantic-enrichment"></a>

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

Amazon OpenSearch Service word-to-word比對 （詞搜尋） 來尋找結果，類似於其他傳統搜尋引擎。這種方法非常適合產品代碼或模型編號等特定查詢，但難以進行抽象搜尋，因為了解使用者意圖變得至關重要。例如，當您搜尋 "shoes for the Beach" 時，語彙搜尋會比對目錄項目中的個別單字 "shoes"、"beach"、"for" 和 "the"，可能缺少不包含確切搜尋詞彙的相關產品，例如 "water-resistant shoess" 或 "surf shoes"。

自動語意強化透過同時考慮關鍵字比對和搜尋背後的內容意義來解決此限制。此功能可了解搜尋意圖，並改善高達 20% 的搜尋相關性。針對索引中的文字欄位啟用此功能，以增強搜尋結果。

**注意**  
自動語意擴充適用於執行 2.19 版或更新版本的 OpenSearch Service 網域。此外，具有 OpenSearch 2.19 版的網域也需要接受最新的服務軟體版本更新。目前， 功能適用於公有網域，不支援 VPC 網域。

## 模型詳細資訊和效能基準
<a name="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](https://github.com/beir-cellar/beir) 基準上測量了前 10 個搜尋結果的平均標準化折扣累積收益 (NDCG) (ndcg@10)，在多語言內容的 MIRACL 上測量了平均 ndcg@10。我們透過用戶端、第 90 個百分位數 (p90) 測量和搜尋回應 p90 評估了延遲，並[取得了 值。](https://github.com/beir-cellar/beir)這些基準提供搜尋相關性和回應時間的基準效能指標。以下是關鍵基準號碼 - 
+ 英文 - 相較於語彙搜尋，相關性改善 20%。它也減少了 7.7% 的 P90 搜尋延遲 (BM25 為 26 毫秒，自動語意擴充為 24 毫秒）。
+ 多語言 - 相較於語意搜尋，相關性改善 105%，而相較於語意搜尋，P90 搜尋延遲增加 38.4% (BM25 為 26 毫秒，自動語意擴充為 36 毫秒）。

鑑於每個工作負載的獨特性質，我們建議您在做出實作決策之前，先使用自己的基準標準在開發環境中評估此功能。

## 支援的語言
<a name="semantic-enrichment-languages"></a>

此功能支援英文。此外，模型也支援阿拉伯文、孟加拉文、中文、芬蘭文、法文、印地文、印尼文、日文、韓文、波斯文、俄文、西班牙文、斯瓦希里文和特拉古文。

## 設定網域的自動語意擴充索引
<a name="semantic-enrichment-index-setup"></a>

為您的文字欄位設定啟用自動語意擴充的索引非常簡單，您可以在新索引建立期間透過主控台、APIs 和 CloudFormation 範本進行管理。若要為現有索引啟用它，您需要為文字欄位重新建立已啟用自動語意擴充的索引。

主控台體驗 - AWS 主控台可讓您使用自動語意擴充欄位輕鬆建立索引。選取網域後，您會在主控台頂端找到建立索引按鈕。按一下建立索引按鈕後，您會找到定義自動語意擴充欄位的選項。在一個索引中，您可以結合英文和多語言的自動語意擴充，以及語彙欄位。

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


API 體驗 - 若要使用 AWS 命令列界面 (AWS CLI) 建立自動語意擴充索引，請使用 create-index 命令：

```
aws opensearch create-index \
--domain-name [domain_name] \
--index-name [index_name] \
--index-schema [index_body] \
```

 在下列索引結構描述範例中， *title\$1semantic *欄位的欄位類型設定為*文字*，且參數 *semantic\$1enrichment *設定為狀態 *ENABLED*。設定*語意\$1enrichment* 參數可在 *title\$1semantic* 欄位上啟用自動語意擴充。您可以使用 *language\$1options* 欄位來指定*英文*或*多語言*。

```
    aws opensearch 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 opensearch get-index \
--domain-name [domain_name] \
--index-name [index_name] \
```

## 資料擷取和搜尋
<a name="semantic-enrichment-data-ingest"></a>

建立已啟用自動語意擴充的索引後，此功能會在資料擷取程序期間自動運作，無需額外的組態。

資料擷取：當您將文件新增至索引時，系統會自動：
+ 分析您為語意擴充指定的文字欄位
+ 使用 OpenSearch Service 受管稀疏模型產生語意編碼
+ 將這些豐富的表示與原始資料一起存放

此程序使用 OpenSearch 的內建 ML 連接器和擷取管道，這些管道會在幕後自動建立和管理。

搜尋：語意擴充資料已編製索引，因此查詢會有效率地執行，而不會再次叫用 ML 模型。這表示您可以改善搜尋相關性，而不需要額外的搜尋延遲額外負荷。

## 設定自動語意擴充的許可
<a name="opensearch-semantic-enrichment-permissions"></a>

在建立具有自動語意擴充的索引之前，您需要設定必要的許可。本節說明不同索引操作所需的許可，以及如何針對 AWS Identity and Access Management (IAM) 和精細存取控制案例進行設定。

### IAM 許可
<a name="opensearch-semantic-enrichment-iam-permissions"></a>

自動語意擴充操作需要下列 IAM 許可。這些許可會根據您要執行的特定索引操作而有所不同。

#### CreateIndex API 許可
<a name="opensearch-semantic-enrichment-create-index-permissions"></a>

若要建立具有自動語意擴充的索引，您需要下列 IAM 許可：
+ `es:CreateIndex` – 建立具有語意擴充功能的索引。
+ `es:ESHttpHead` – 執行 HEAD 請求以檢查索引是否存在。
+ `es:ESHttpPut` – 執行建立索引的 PUT 請求。
+ `es:ESHttpPost` – 執行索引操作的 POST 請求。

#### UpdateIndex API 許可
<a name="opensearch-semantic-enrichment-update-index-permissions"></a>

若要使用自動語意擴充更新現有索引，您需要下列 IAM 許可：
+ `es:UpdateIndex` – 更新索引設定和映射。
+ `es:ESHttpPut` – 執行索引更新的 PUT 請求。
+ `es:ESHttpGet` – 執行 GET 請求以擷取索引資訊。
+ `es:ESHttpPost` – 執行索引操作的 POST 請求。

#### GetIndex API 許可
<a name="opensearch-semantic-enrichment-get-index-permissions"></a>

若要擷取具有自動語意擴充之索引的相關資訊，您需要下列 IAM 許可：
+ `es:GetIndex` – 擷取索引資訊和設定。
+ `es:ESHttpGet` – 執行 GET 請求以擷取索引資料。

#### DeleteIndex API 許可
<a name="opensearch-semantic-enrichment-delete-index-permissions"></a>

若要刪除具有自動語意擴充的索引，您需要下列 IAM 許可：
+ `es:DeleteIndex` – 刪除索引及其語意擴充元件。
+ `es:ESHttpDelete` – 執行 DELETE 請求以移除索引。

### 範例 IAM 政策
<a name="opensearch-semantic-enrichment-sample-policy"></a>

下列以身分為基礎的存取政策範例提供使用者使用自動語意擴充管理索引所需的許可：

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "AllowSemanticEnrichmentIndexOperations",
            "Effect": "Allow",
            "Action": [
                "es:CreateIndex",
                "es:UpdateIndex",
                "es:GetIndex",
                "es:DeleteIndex",
                "es:ESHttpHead",
                "es:ESHttpGet",
                "es:ESHttpPut",
                "es:ESHttpPost",
                "es:ESHttpDelete"
            ],
            "Resource": "arn:aws:es:aws-region:111122223333:domain/domain-name"
        }
    ]
}
```

將 *aws-region*、*111122223333* 和 *domain-name* 取代為您的特定值。您可以在資源 ARN 中指定特定索引模式，以進一步限制存取。

### 精細存取控制許可
<a name="opensearch-semantic-enrichment-fgac-permissions"></a>

如果您的 Amazon OpenSearch Service 網域已啟用精細存取控制，則需要 IAM 許可以外的其他許可。每個索引操作都需要下列許可。

#### CreateIndex API 許可
<a name="opensearch-semantic-enrichment-fgac-create-permissions"></a>

啟用精細存取控制時，建立具有自動語意擴充的索引需要下列額外許可：
+ `indices:admin/create` – 建立索引操作。
+ `indices:admin/mapping/put` – 建立和更新索引映射。
+ `cluster:admin/opensearch/ml/create_connector` – 建立機器學習連接器以進行語意處理。
+ `cluster:admin/opensearch/ml/register_model` – 註冊機器學習模型以進行語意擴充。
+ `cluster:admin/ingest/pipeline/put` – 建立用於資料處理的擷取管道。
+ `cluster:admin/search/pipeline/put` – 建立查詢處理的搜尋管道。

#### UpdateIndex API 許可
<a name="opensearch-semantic-enrichment-fgac-update-permissions"></a>

啟用精細存取控制時，更新具有自動語意擴充的索引需要下列額外許可：
+ `indices:admin/get` – 擷取索引資訊。
+ `indices:admin/settings/update` – 更新索引設定。
+ `indices:admin/mapping/put` – 更新索引映射。
+ `cluster:admin/opensearch/ml/create_connector` – 建立機器學習連接器。
+ `cluster:admin/opensearch/ml/register_model` – 註冊機器學習模型。
+ `cluster:admin/ingest/pipeline/put` – 建立擷取管道。
+ `cluster:admin/search/pipeline/put` – 建立搜尋管道。
+ `cluster:admin/ingest/pipeline/get` – 擷取擷取管道資訊。
+ `cluster:admin/search/pipeline/get` – 擷取搜尋管道資訊。

#### GetIndex API 許可
<a name="opensearch-semantic-enrichment-fgac-get-permissions"></a>

啟用精細存取控制時，需要下列額外許可，才能擷取具有自動語意擴充之索引的相關資訊：
+ `indices:admin/get` – 擷取索引資訊。
+ `cluster:admin/ingest/pipeline/get` – 擷取擷取管道資訊。
+ `cluster:admin/search/pipeline/get` – 擷取搜尋管道資訊。

#### DeleteIndex API 許可
<a name="opensearch-semantic-enrichment-fgac-delete-permissions"></a>

啟用精細存取控制時，需要下列額外許可才能刪除具有自動語意擴充的索引：
+ `indices:admin/delete` – 刪除索引操作。

## 查詢重寫
<a name="query-rewrite"></a>

自動語意擴充會自動將您現有的「比對」查詢轉換為語意搜尋查詢，而不需要修改查詢。如果比對查詢是複合查詢的一部分，系統會周遊您的查詢結構、尋找比對查詢，並將它們取代為神經稀疏查詢。目前，此功能僅支援取代「比對」查詢，無論是獨立查詢還是複合查詢的一部分。不支援「多重\$1比對」。此外，此功能支援所有複合查詢來取代其巢狀比對查詢。複合查詢包括：bool、Boosting、 constant\$1score、dis\$1max、 function\$1score 和 hybrid。

## 自動語意擴充的限制
<a name="ase-limitation"></a>

當套用至包含自然語言內容small-to-medium欄位時，自動語意搜尋最有效，例如電影標題、產品描述、評論和摘要。雖然語意搜尋增強了大多數使用案例的相關性，但可能不適用於某些案例。在決定是否針對特定使用案例實作自動語意擴充時，請考慮下列限制。
+ 非常長的文件 – 目前的稀疏模型只會處理每個英文文件的前 8，192 個字符。對於多語言文件，它是 512 個字符。對於冗長的文章，請考慮實作文件區塊，以確保完整的內容處理。
+ 日誌分析工作負載 – 語意擴充會大幅增加索引大小，這對於日誌分析而言可能不必要，其中完全相符通常就足夠。其他語意內容很少改善日誌搜尋的有效性，足以證明增加的儲存需求。
+ 自動語意擴充與衍生來源功能不相容。
+ 調節 – OpenSearch Service 網域的索引推論請求目前上限為 200 TPS。這是軟性限制；請聯絡 AWS Support 以取得更高的限制。

## 定價
<a name="ase-pricing"></a>

 Amazon OpenSearch Service 會根據索引時間產生稀疏向量時消耗的 OpenSearch Compute Units (OCUs) 來計費自動語意擴充。您只需支付索引期間實際用量的費用。您可以使用 Amazon CloudWatch 指標 SemanticSearchOCU 監控此消耗。如需模型字符限制、每個 OCU 的磁碟區輸送量，以及範例計算的特定詳細資訊，請造訪 [ OpenSearch Service 定價](https://aws.amazon.com/opensearch-service/pricing/)。