Azure AI Search インデックスの文字列フィールドに言語アナライザーを追加する
"言語アナライザー" は、テキスト アナライザーの固有の種類であり、対象言語の言語規則を使用して字句解析を実行します。 すべての検索可能文字列フィールドには、analyzer プロパティがあります。 翻訳された文字列でコンテンツが構成されている場合 (英語と中国語のテキストが別のフィールドの場合など)、各フィールドで言語アナライザーを指定して、これらのアナライザーの豊富な言語機能にアクセスできます。
言語アナライザーを使用する場合
単語または文の構造を認識することでテキスト解析の価値が高まる場合は、言語アナライザーを検討してください。 一般的な例としては、不規則な動詞の形 ("bring" と "brought") や複数名詞 ("mice" と mouse") の関連付けなどがあります。 言語認識なしでは、これらの文字列は物理的な特性だけで解析され、つながりを見つけることができません。 テキストの大部分にはこのコンテンツが含まれる可能性が高いため、説明、レビュー、または要約で構成されるフィールドは、言語アナライザーの候補として適しています。
また、コンテンツが西洋以外の言語の文字列で構成されている場合も、言語アナライザーを検討してください。 既定のアナライザー (Standard Lucene) は言語に依存しませんが、スペースと特殊文字 (ハイフンとスラッシュ) を使用して文字列を区切るという概念は、西洋以外の言語よりも西洋言語に当てはまります。
たとえば、中国語、日本語、韓国語 (CJK)、およびその他のアジア言語では、スペースは必ずしも単語の区切り記号ではありません。 次の日本語の文字列を考えてみます。 これにはスペースがないため、文字列は実際には句であっても、言語に依存しないアナライザーでは文字列全体が 1 つのトークンとして分析される可能性があります。
これは私たちの銀河系の中ではもっとも重く明るいクラスの球状星団です。
(This is the heaviest and brightest group of spherical stars in our galaxy.)
上記の例では、クエリを正常に実行するには、完全なトークン、またはサフィックス ワイルドカードを使用する部分トークンを含める必要があります。これにより、自然ではない制限的な検索エクスペリエンスが実現します。
エクスペリエンスを向上させるには、個々の単語を検索することです: 明るい (Bright)、私たちの (Our)、銀河系 (Galaxy)。 Azure AI Search で利用できる日本語アナライザーのいずれかを使用すると、この動作が解除される可能性が高くなります。これらのアナライザーの方が、テキストのチャンクをターゲット言語で意味のある単語に分割することにおいて、より適した機能を備えているためです。
Lucene と Microsoft のアナライザーの比較
Azure AI Search では、Lucene によって提供される 35 個の言語アナライザーと、Office および Bing で使用される Microsoft 独自の自然言語処理技術によって提供される 50 個の言語アナライザーがサポートされています。
開発者によっては、使い慣れた簡単なオープン ソース ソリューションである Lucene を好む場合があります。 Lucene 言語アナライザーの方が高速ですが、Microsoft のアナライザーには、レンマ化、単語複混合化 (ドイツ語、デンマーク語、オランダ語、スウェーデン語、ノルウェー語、エストニア語、フィンランド語、ハンガリー語、スロバキア語など) やエンティティの認識 (URL、メール、日付、数字) などの高度な機能があります。 可能であれば、マイクロソフトと Lucene の両方のアナライザーを比較し、より適したものを選んでください。 Analyze API を使用すると、特定のアナライザーを使用して、指定のテキストから生成されたトークンを表示できます。
言語によっては、マイクロソフトのアナライザーでのインデックス作成には、平均して、Lucene の同等機能の 2 ~ 3 倍の時間がかかります。 平均的なサイズのクエリの場合、検索のパフォーマンスはさほど影響はありません。
英語のアナライザー
既定のアナライザーは標準 Lucene であり、英語でも問題なく動作しますが、おそらく Lucene の英語アナライザーや Microsoft の英語アナライザーほどではありません。
Lucene の英語アナライザーでは、標準アナライザーが拡張されています。 単語から所有格 (末尾の 's) が除去され、Porter Stemming アルゴリズムに従ってステミングが適用され、英語のストップワードが除去されます。
Microsoft の英語アナライザーでは、ステミングではなくレンマ化が実行されます。 つまり、語形変化および変則的な語形がより適切に処理され、関連性の高い検索結果が得られます。
言語アナライザーを指定する方法
データを読み込む前に、インデックスの作成時にアナライザーを設定します。
フィールド定義で、フィールドが "検索可能" として属性付けされ、Edm.String 型になっていることを確認します。
"analyzer" プロパティを、サポートされるアナライザーの一覧にある言語アナライザーのいずれかに設定します。
"analyzer" プロパティは、言語アナライザーを受け入れる唯一のプロパティであり、インデックス作成とクエリの両方に使用されます。 その他のアナライザー関連のプロパティ ("searchAnalyzer" と "indexAnalyzer") では、言語アナライザーは受け入れられません。
言語アナライザーはカスタマイズできません。 アナライザーが要件を満たしていない場合は、microsoft_language_tokenizer または microsoft_language_stemming_tokenizer を使用してカスタム アナライザーを作成してから、トークン化前と後の処理用のフィルターを追加します。
次の例は、インデックス内の言語アナライザーの仕様を示しています。
{
"name": "hotels-sample-index",
"fields": [
{
"name": "Description",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "en.microsoft",
"indexAnalyzer": null,
"searchAnalyzer": null
},
{
"name": "Description_fr",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "fr.microsoft",
"indexAnalyzer": null,
"searchAnalyzer": null
},
インデックスの作成とフィールド プロパティの設定の詳細については、Create Index (REST) に関するページを参照してください。 テキストの解析について詳しくは、Azure AI Search でのアナライザーに関する記事をご覧ください。
サポートされる言語アナライザー
サポートされている言語と、Lucene およびマイクロソフトのアナライザーの名前を以下に一覧します。
Language | Microsoft のアナライザーの名前 | Lucene のアナライザーの名前 |
---|---|---|
アラビア語 | ar.microsoft | ar.lucene |
アルメニア語 | hy.lucene | |
ベンガル語 | bn.microsoft | |
バスク語 | eu.lucene | |
ブルガリア語 | bg.microsoft | bg.lucene |
カタルニア語 | ca.microsoft | ca.lucene |
中国語簡体字 | zh-Hans.microsoft | zh-Hans.lucene |
中国語 (繁体字) | zh-Hant.microsoft | zh-Hant.lucene |
クロアチア語 | hr.microsoft | |
チェコ語 | cs.microsoft | cs.lucene |
デンマーク語 | da.microsoft | da.lucene |
オランダ語 | nl.microsoft | nl.lucene |
English | en.microsoft | en.lucene |
エストニア語 | et.microsoft | |
フィンランド語 | fi.microsoft | fi.lucene |
フランス語 | fr.microsoft | fr.lucene |
ガリシア語 | gl.lucene | |
ドイツ語 | de.microsoft | de.lucene |
ギリシャ語 | el.microsoft | el.lucene |
グジャラート語 | gu.microsoft | |
ヘブライ語 | he.microsoft | |
ヒンディー語 | hi.microsoft | hi.lucene |
ハンガリー語 | hu.microsoft | hu.lucene |
アイスランド語 | is.microsoft | |
インドネシア語 | id.microsoft | id.lucene |
アイルランド語 | ga.lucene | |
イタリア語 | it.microsoft | it.lucene |
日本語 | ja.microsoft | ja.lucene |
カンナダ語 | kn.microsoft | |
韓国語 | ko.microsoft | ko.lucene |
ラトビア語 | lv.microsoft | lv.lucene |
リトアニア語 | lt.microsoft | |
マラヤーラム語 | ml.microsoft | |
マレー語 (ラテン) | ms.microsoft | |
マラーティー語 | mr.microsoft | |
ノルウェー語 | nb.microsoft | no.lucene |
ペルシャ語 | fa.lucene | |
ポーランド語 | pl.microsoft | pl.lucene |
ポルトガル語 (ブラジル) | pt-Br.microsoft | pt-Br.lucene |
ポルトガル語 (ポルトガル) | pt-Pt.microsoft | pt-Pt.lucene |
パンジャーブ語 | pa.microsoft | |
ルーマニア語 | ro.microsoft | ro.lucene |
ロシア語 | ru.microsoft | ru.lucene |
セルビア語 (キリル) | sr-cyrillic.microsoft | |
セルビア語 (ラテン) | sr-latin.microsoft | |
スロバキア語 | sk.microsoft | |
スロベニア語 | sl.microsoft | |
スペイン語 | es.microsoft | es.lucene |
スウェーデン語 | sv.microsoft | sv.lucene |
タミル語 | ta.microsoft | |
テルグ語 | te.microsoft | |
タイ語 | th.microsoft | th.lucene |
トルコ語 | tr.microsoft | tr.lucene |
ウクライナ語 | uk.microsoft | |
ウルドゥ語 | ur.microsoft | |
ベトナム語 | vi.microsoft |
名前に Lucene が含まれるすべてのアナライザーでは、Apache Lucene の言語アナライザーが利用されています。