利用分析器和語彙基元化的字詞改善索引

已完成

Azure AI 搜尋服務預設會設定為分析文字,並識別在您的索引中有幫助的權杖。 正確的權杖可確保使用者快速找到所需的文件。 在大部分情況下,預設組態會產生最佳索引。 不過,當您有不尋常的或唯一欄位時,您可能會想要設定文字的確切分析方式。

在這裡,您將了解如何定義自訂分析器,以控制欄位內容如何分割成權杖,以包含在索引中。

當 AI 搜尋為您的內容編制索引時,其會擷取文字。 若要建置有用的索引,其字詞可協助使用者找出文字需要處理的文件。 例如:

  • 文字應該分成字詞,通常使用空白和標點符號字元做為分隔符號。
  • 因為使用者不會搜尋停用字詞 (例如 "the" 和 "it"),所以它們都應該移除。
  • 字詞應該縮減成其根本形式。 例如,過去式的字詞 (例如 "ran"),應該以現在式字詞取代 (例如 "run")。

在 AI 搜尋中,這種處理是由分析器執行。 如果您未指定欄位的分析器,則會使用預設的 Lucene 分析器。 因為預設 Lucene 分析器可以處理許多語言,並傳回索引的實用權杖,所以其為大部分欄位的絕佳選擇。

或者,您可以指定 AI 搜尋內建的其中一個分析器。 內建分析器有兩種類型:

  • 語言分析器。 如果您需要特定語言的進階功能,例如詞形歸併還原、字組分解和實體辨識,請使用內建語言分析器。 Microsoft 提供 50 種用於不同語言的分析器。
  • 特製化分析器。 這些分析器與語言無關,並用於特殊欄位,例如郵遞區號或產品識別碼。 例如,您可以使用 PatternAnalyzer 並指定規則運算式來比對權杖分隔符號。

什麼是自訂分析器?

內建分析器可提供許多選項,但有時候您需要針對欄位使用具有不尋常行為的分析器。 在這些情況下,您可以建立自訂分析器

自訂分析器包含:

  • 字元篩選。 這些篩選會先處理字串,再傳至權杖化工具。
  • 權杖化工具。 這些元件會將文字分割成權杖,以新增至索引。
  • 權杖篩選。 這些篩選會移除或修改權杖化工具所發出的權杖。

讓我們更加深入地檢驗這些元件。

字元篩選

部分作業可能需要在文字上完成,才能分割成權杖。 字元篩選可實現這些作業。 您可以使用下列三個字元篩選:

  • html_strip。 此篩選會移除 HTML 建構,例如標籤和屬性。
  • mapping。 此篩選可讓您指定對應,以另一個字串取代一個字串。 例如,您可以指定以 Texas 取代 TX 的對應。
  • pattern_replace。 此篩選可讓您指定規則運算式,可識別輸入文字中的模式,以及應該如何取代相符的文字。

權杖化工具

權杖化工具是一種元件,可將文字分割為將儲存在索引中的權杖。 權杖化工具也會將字詞細分成其根本形式。 權杖通常是單一字詞,但您可能想要建立不尋常的權杖,例如:

  • 完整的郵政位址。
  • 完整的 URL 或電子郵件地址。
  • 以特定語言文法為基礎的字詞。

有 13 個不同的權杖化工具可供選擇。 這些權杖化工具包括:

  • 傳統。 此權杖化工具會根據歐洲語言的文法來處理文字。
  • 關鍵字。 此權杖化工具會將整個輸入作為單一權杖發出。 針對應一律編制索引為一個值的欄位,請使用此權杖化工具。
  • 小寫。 此權杖化工具會將文字分割為非字母,然後將產生的權杖修改為全小寫。
  • microsoft_language_tokenizer。 此權杖化工具會根據您指定的語言文法來分割文字。
  • pattern。 此權杖化工具會分割在符合所指定規則運算式的文字上。
  • whitespace。 此權杖化工具會將文字分割在具有空白字元的位置。

注意

如需權杖化工具選的完整清單,請參閱下方深入了解一節內的將自訂分析器新增至 Azure AI 搜尋索引中的字串欄位

權杖篩選

在權杖化工具將傳入文字分割成權杖之後,您可能會想要新增一些額外的處理,例如移除停用字詞或修剪標點符號。 您可以藉由指定權杖篩選來執行此處理。 有四十一種不同權杖篩選器可供使用,包括:

  • 特定語言的篩選,例如 arabic_normalization。 這些篩選會套用特定語言的文法規則,以確保移除字詞的形式,並以根本形式取代。
  • 單引號。 此篩選會從權杖中移除任何單引號,以及單引號之後的任何字元。
  • 傳統。 此篩選會從縮寫中移除英文所有格和句號。
  • 保留。 此篩選會從您指定的清單中,移除不包含一個或多個字詞的任意權杖。
  • 長度。 此篩選會移除任何超過指定最小值或小於指定最大值的權杖。
  • 修剪。 此篩選會從權杖中移除任何前置和後置空白字元。

注意

如需權杖篩選的完整清單,請參閱下方深入了解一節內的將自訂分析器新增至 Azure AI 搜尋索引中的字串欄位

建立自訂分析器

您可以在定義索引時,藉由指定自訂分析器來建立自訂分析器。 您必須使用 JSON 程式碼來執行此動作 - 您無法在 Azure 入口網站中指定自訂索引。 請在設計階段使用索引的 analyzers 區段。 您只能包含一個權杖化工具,但可以包含一個或多個字元篩選和一個或多個權杖篩選。 請為分析器使用唯一名稱,並將 @odata.type 屬性設定為 Microsoft.Azure.Search.CustomAnalyzer

在此範例中,字元篩選會移除 HTML 格式、權杖化工具會根據冰島文的文法分割文字,而權杖篩選會移除單引號:

"analyzers":(optional)[
   {
      "name":"ContosoAnalyzer",
      "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
      "charFilters":[
         "WebContentRemover"
      ],
      "tokenizer":"IcelandicTokenizer",
      "tokenFilters":[
         "ApostropheFilter"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"WebContentRemover",
      "@odata.type":"#html_strip"
   }
],
"tokenizers":(optional)[
   {
      "name":"IcelandicTokenizer",
      "@odata.type":"#microsoft_language_tokenizer",
      "language":"icelandic",
      "isSearchTokenizer":false,
   }
],
"tokenFilters":(optional)[
   {
      "name":"ApostropheFilter",
      "@odata.type":"#apostrophe"
   }
]

測試自訂分析器

將自訂分析器定義為索引的一部分之後,您就可以使用 REST API 的分析文字函數來提交測試文字,並確保分析器正確傳回權杖。 請使用任何 REST 測試工具來制定這些要求,例如熱門的 Postman 應用程式。

您的測試 REST 要求看起來應該像這樣:

POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
   Content-Type: application/json
   api-key: <api key>

在此要求中:

  • 以 AI 搜尋資源的名稱取代 <search service name>
  • <index name> 取代為索引的名稱,其包含自訂分析器。
  • <api-version> 取代為 REST API 的版本號碼。
  • <api-key> 取代為 AI 搜尋資源的存取金鑰。 您可以從 Azure 入口網站取得此金鑰。

您的要求也必須包含 JSON 本文,如下所示:

{
  "text": "Test text to analyze.",
  "analyzer": "<analyzer name>"
}

<analyzer name> 取代為您定義自訂分析器時所指定的名稱。 請務必以許多不同的 text 值進行測試,直到您確定自訂分析器正常運作為止。

針對欄位使用自訂分析器

定義並測試自訂分析器之後,您就可以設定索引來加以使用。 您可以為索引中的每個欄位指定分析器。

當您想要針對索引編制和搜尋使用相同的分析器時,可以使用 analyzer 欄位:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": "ContosoAnalyzer",
   "indexAnalyzer": null,
   "searchAnalyzer": null
 },

您也可以在編制欄位索引和搜尋欄位時,使用不同的分析器。 當您將欄位編制索引及分析查詢時,如果您需要一組不同的處理步驟,請使用此組態:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": null,
   "indexAnalyzer": "ContosoIndexAnalyzer",
   "searchAnalyzer": "ContosoSearchAnalyzer"
 },

深入了解

將自訂分析器新增至 Azure AI 搜尋索引中的字串欄位