

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

# Serverless 的自動語意擴充
<a name="serverless-semantic-enrichment"></a>

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

相較於語義搜尋，自動語意擴充功能可協助將搜尋相關性提高高達 20%。自動語意擴充可免除管理您自己的 ML （機器學習） 模型基礎設施以及與搜尋引擎整合的繁重工作。此功能適用於所有三種無伺服器集合類型：搜尋、時間序列和向量。

## 什麼是語意搜尋
<a name="serverless-semantic-enrichment-whats-is"></a>

 傳統搜尋引擎依賴word-to-word字比對 （稱為語彙搜尋） 來尋找查詢的結果。雖然這適用於電視型號等特定查詢，但它難以進行更抽象的搜尋。例如，在搜尋 "shoes for the Beach" 時，語彙搜尋只會比對目錄項目中的個別單字 "shoes"、"beach"、"for" 和 "the"，可能會缺少不包含確切搜尋詞彙的相關產品，例如 "water-resistantss" 或 "surf shoes"。

 語意搜尋會傳回查詢結果，不僅包含關鍵字比對，還包含使用者搜尋的意圖和內容意義。例如，如果使用者搜尋「如何治療問題」，語意搜尋系統可能會傳回下列結果：
+ Migraine 補救措施
+ 疼痛管理技巧
+ 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](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="serverless-semantic-enrichment-languages"></a>

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

## 為無伺服器集合設定自動語意擴充索引
<a name="serverless-semantic-enrichment-index-setup"></a>

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

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

![建立顯示索引名稱欄位、語意擴充欄位和語義搜尋欄位的索引頁面。](http://docs.aws.amazon.com/zh_tw/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] \
```

 在下列索引結構描述範例中， *title\_semantic *欄位的欄位類型設定為*文字*，且參數 *semantic\_enrichment *設定為狀態 *ENABLED*。設定*語意\_enrichment* 參數可在 *title\_semantic* 欄位上啟用自動語意擴充。您可以使用 *language\_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)，在集合佈建期間和建立集合之後建立語意搜尋。

## 資料擷取和搜尋
<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>

若要允許服務 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. 登入 OpenSearch Service 主控台，網址為 https：//[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>

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

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

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

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

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