アナライザーとトークン化された用語を使用してインデックスを改善する

完了

Azure AI 検索は既定で、テキストを分析し、インデックスに役立つトークンを識別するように構成されています。 適切なトークンがあると、ユーザーは必要なドキュメントをすばやく見つけることができます。 ほとんどの場合は、既定の構成で最適なインデックスが生成されます。 ただし、通常とは異なるフィールドや独特のフィールドがある場合は、テキストの分析方法を正確に構成することをお勧めします。

ここでは、フィールドの内容をトークンに分割してインデックスに含めるための方法を制御する、カスタム アナライザーの定義方法について説明します。

AI 検索では、コンテンツのインデックスを作成する際、テキストを取得します。 ユーザーがドキュメントを検索する際に役立つ用語を含んだ、有用なインデックスを作成するには、テキストを処理する必要があります。 次に例を示します。

  • テキストは単語に分割する必要があり、多くの場合、空白文字と句読点文字が区切り記号として使用されます。
  • "the" や "it" などのストップワードは、ユーザーの検索語には含まれないため、削除する必要があります。
  • 単語は原形に戻す必要があります。 たとえば、過去時制の単語 ("ran" など) は、現在時制の単語 ("run" など) に置き換える必要があります。

AI 検索では、この種の処理はアナライザーによって実行されます。 フィールドに対してアナライザーを指定しなかった場合は、既定の Lucene アナライザーが使用されます。 既定の Lucene アナライザーは、多数の言語を処理でき、インデックス用の有用なトークンを返すことができるため、ほとんどのフィールドに適しています。

また、AI 検索に組み込まれているアナライザーの中から、いずれかを指定することもできます。 組み込みのアナライザーには、次の 2 種類があります。

  • 言語アナライザー。 レンマ化、複合語の分割、エンティティ認識など、特定の言語に対して高度な機能が必要な場合は、組み込みの言語アナライザーを使用します。 Microsoft では、さまざまな言語用に 50 個のアナライザーを提供しています。
  • 特殊アナライザー。 これらのアナライザーは言語に依存せず、郵便番号や製品 ID などの特殊なフィールドに使用されます。 たとえば、PatternAnalyzer を使用すると、トークン区切り記号に一致する正規表現を指定できます。

カスタム アナライザーとは

組み込みのアナライザーには多くのオプションが用意されていますが、場合によっては、フィールドに対して通常とは異なる動作をするアナライザーが必要になることもあります。 そのような場合は、カスタム アナライザーを作成できます。

カスタム アナライザーは、次の要素で構成されます。

  • 文字フィルター。 これらのフィルターは、文字列がトークナイザーに到達する前に、それらの文字列を処理します。
  • トークナイザー。 これらのコンポーネントは、テキストをトークンに分割して、インデックスに追加できるようにします。
  • トークン フィルター。 これらのフィルターは、トークナイザーから送信されたトークンを削除または変更します。

これらのコンポーネントについて詳しく見ていきましょう。

文字フィルター

場合によっては、テキストをトークンに分割する前に、テキストに対して何らかの操作を実行する必要があります。 それらの操作を可能にするのが、文字フィルターです。 使用できる文字フィルターは 3 つあります。

  • html_strip。 このフィルターは、タグや属性などの HTML コンストラクトを削除します。
  • mapping。 このフィルターを使用すると、ある文字列を別の文字列に置き換えるマッピングを指定できます。 たとえば、"TX" を "Texas" に置き換えるマッピングを指定することもできます。
  • pattern_replace。 このフィルターを使用すると、入力テキストのパターンを識別する正規表現と、一致するテキストの置換方法を指定できます。

Tokenizer

トークナイザーは、テキストをトークンに分割して、インデックスに格納できるようにするコンポーネントです。 トークナイザーは、単語を原形に戻します。 多くの場合、トークンは 1 つの単語ですが、次のように、通常とは異なるトークンを作成することもできます。

  • 完全な住所。
  • 完全な URL または電子メール アドレス。
  • 特定の言語の文法に基づく単語。

選択できるトークナイザーは 13 種類あります。 それらのトークナイザーは次のとおりです。

  • classic。 このトークナイザーは、ヨーロッパ言語の文法に基づいてテキストを処理します。
  • keyword: このトークナイザーは、入力全体を 1 つのトークンとして出力します。 このトークナイザーは、インデックスを常に 1 つの値として作成する必要があるフィールドに対して使用します。
  • lowercase。 このトークナイザーは、テキストを文字以外の箇所で分割し、結果のトークンをすべて小文字に変更します。
  • microsoft_language_tokenizer。 このトークナイザーは、指定した言語の文法に基づいてテキストを分割します。
  • pattern。 このトークナイザーは、指定した正規表現と一致する箇所でテキストを分割します。
  • whitespace。 このトークナイザーは、空白がある箇所でテキストを分割します。

Note

トークナイザーのすべての一覧については、後述の「詳細情報」セクションの「Azure AI 検索インデックスの文字列フィールドにカスタム アナライザーを追加する」を参照してください。

トークン フィルター

トークナイザーによって入力テキストがトークンに分割されたら、ストップワードの削除や句読点のトリミングなど、特別な処理を追加することができます。 この処理は、トークン フィルターを指定することで実行できます。 使用できるトークン フィルターは 41 種類あります。これには以下のものが含まれます。

  • 言語固有のフィルター (arabic_normalization など)。 これらのフィルターは、言語固有の文法規則を適用して単語の活用形を削除し、原形に置き換えます。
  • apostrophe。 このフィルターは、アポストロフィをトークンから削除し、アポストロフィの後の任意の文字を削除します。
  • classic。 このフィルターは、英語の所有格と頭字語のドットを削除します。
  • keep。 このフィルターは、指定したリスト内の単語を 1 つ以上含んでいないトークンを削除します。
  • ポインター。 このフィルターでは、指定した最小値より長いトークンや、指定した最大値より短いトークンがすべて削除されます。
  • trim。 このフィルターは、先頭と末尾の空白をトークンから削除します。

Note

トークン フィルターのすべての一覧については、後述の「詳細情報」セクションの「Azure AI 検索インデックスの文字列フィールドにカスタム アナライザーを追加する」を参照してください。

カスタム アナライザーを作成する

カスタム アナライザーを作成する場合は、インデックスを定義する際にアナライザーを指定します。 これは JSON コードで行う必要があります。Azure portal でカスタム インデックスを指定する方法はありません。 設計時に、インデックスの analyzers セクションを使用します。 トークナイザーは 1 つしか含めることができませんが、1 つ以上の文字フィルターと 1 つ以上のトークン フィルターを含めることができます。 アナライザーには一意の名前を使用し、@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 の Analyze Text 関数を使用してテスト テキストを送信し、アナライザーがトークンを正しく返すかどうかを確認することができます。 これらの要求は、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>

この要求では、次のことを行ってください。

  • <search service name> を AI 検索リソースの名前に置き換えてください。
  • <index name> を、カスタム アナライザーが含まれているインデックスの名前に置き換えてください。
  • <api-version> を REST API のバージョン番号に置き換えてください。
  • <api-key> を AI 検索リソースのアクセス キーに置き換えてください。 このキーは、Azure portal から取得できます。

要求には、次のような 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"
 },