言語形態論および情報検索において、ステミングとは、屈折語(または派生語)を語幹、基本形、または語根形(一般的には書き言葉の形)に還元するプロセスです。語幹は、単語の形態論的な語根と同一である必要はありません。関連する単語が同じ語幹にマッピングされれば、通常は十分です。たとえこの語幹自体が有効な語根でなくても構いません。ステミングのアルゴリズムは、 1960年代からコンピュータ科学で研究されてきました。多くの検索エンジンは、同じ語幹を持つ単語を同義語として扱い、クエリ拡張の一種として、このプロセスを融合と呼びます。
単語の語幹を抽出するコンピュータプログラムまたはサブルーチンは、語幹抽出プログラム、語幹抽出アルゴリズム、または語幹抽出器と呼ばれることがあります。
英語の語幹「cat」を基準とする語幹抽出器は、 「cats」、「catlike」、「catty」などの文字列を識別するはずです。語幹抽出アルゴリズムは、 「fishing」、「fished」、「fisher」などの単語を「fish」という語幹に還元することもあります。語幹は必ずしも単語である必要はなく、例えばポーターアルゴリズムは「argue」、「arguged」、「argues」、「arguing」、 「argus 」を「argu」という語幹に還元します。
最初に発表されたステマーは、1968年にジュリー・ベス・ロビンスによって書かれた。 [ 1 ]この論文は、発表時期が早いという点で注目に値し、この分野のその後の研究に大きな影響を与えた。彼女の論文は、プリンストン大学のジョン・W・テューキー教授によるステミングアルゴリズムの3つの主要な試み、ジェラード・サルトン教授の指導の下、ハーバード大学のマイケル・レスクによって開発されたアルゴリズム、そしてカリフォルニア州ロスアルトスのR&Dコンサルタンツのジェームズ・L・ドルビーによって開発された3番目のアルゴリズムに言及している。
後に開発されたステマーはマーティン・ポーターによって作成され、1980年7月号の学術誌『 Program』に掲載された。このステマーは非常に広く使用され、英語のステミングにおける事実上の標準アルゴリズムとなった。ポーター博士は、ステミングと情報検索に関する業績により、2000年にトニー・ケント・ストリックス賞を受賞した。
ポーターのステミングアルゴリズムの実装は数多く作成され、自由に配布されていましたが、これらの実装の多くには微妙な欠陥がありました。その結果、これらのステマーは本来の性能を発揮できませんでした。このエラーの原因を取り除くため、マーティン・ポーターは2000年頃に、公式のフリーソフトウェア(主にBSDライセンス)実装[ 2 ]をリリースしました。彼はその後数年間、ステミングアルゴリズムを作成するためのフレームワークであるSnowballを構築し、改良された英語ステマーと他のいくつかの言語のステマーを実装することで、この研究を拡張しました。
Paice-Husk Stemmerは、1980年代後半にランカスター大学のChris D Paiceによって開発された反復型ステマーで、外部に保存されたステミング規則セットを特徴としています。標準の規則セットは「強力な」ステマーを提供し、語尾の削除または置換を指定できます。置換手法により、再コード化や部分一致を行うための別の段階が不要になります。Paiceはまた、過剰ステミングと不足ステミングのエラー数をカウントすることに基づく、ステマーを比較するための直接的な測定方法も開発しました。
語幹抽出アルゴリズムにはいくつかの種類があり、性能や精度、特定の語幹抽出上の障害をどのように克服するかという点で違いがあります。
単純な語幹抽出器は、参照テーブルから活用形を検索します。この方法の利点は、シンプルで高速であり、例外処理が容易であることです。欠点は、すべての活用形を明示的にテーブルにリストする必要があることです。そのため、たとえ完全に規則的な単語(例:cats ~ cat)であっても、新しい単語や馴染みのない単語は処理されません。また、テーブルが大きくなる可能性があります。英語のように形態論が単純な言語では、テーブルのサイズはそれほど大きくありませんが、トルコ語のように活用が多い言語では、語根ごとに数百もの活用形が存在する可能性があります。
検索アプローチでは、過剰な語幹抽出を避けるために、予備的な品詞タグ付けを使用する場合があります。[ 3 ]
ステマーが使用するルックアップテーブルは、一般的に半自動的に生成されます。例えば、単語が「run」の場合、逆アルゴリズムによって「running」、「runs」、「runned」、「runly」といった形式が自動的に生成される可能性があります。最後の2つの形式は有効な構文ですが、使用頻度は低いでしょう。
接尾辞除去アルゴリズムは、活用形と語根の関係を表すルックアップテーブルに依存しません。代わりに、通常はより小さな「ルール」のリストが格納され、入力された単語の形に基づいてアルゴリズムがその語根の形を見つけるための道筋を示します。ルールの例としては、次のようなものがあります。
接尾辞除去アプローチは、保守担当者が言語学と形態論の課題と接尾辞除去ルールの符号化について十分な知識を持っていることを前提として、総当たりアルゴリズムよりも保守がはるかに簡単であるという利点があります。接尾辞除去アルゴリズムは、例外的な関係(「ran」と「run」など)を扱う際のパフォーマンスが低いため、粗雑だと見なされることがあります。接尾辞除去アルゴリズムによって生成されるソリューションは、例外がほとんどないよく知られた接尾辞を持つ語彙カテゴリに限定されます。しかし、すべての品詞にそのようなよく定式化されたルールセットがあるわけではないため、これは問題です。レンマ化は、この課題を改善しようとします。
接頭辞の削除も実装される可能性があります。もちろん、すべての言語が接頭辞や接尾辞を使用するわけではありません。
接尾辞除去アルゴリズムは、さまざまな理由で結果が異なる場合があります。その理由の1つは、アルゴリズムが出力語が与えられた言語の実際の単語である必要があるかどうかを制約するかどうかです。一部のアプローチでは、単語が実際に言語の語彙(言語内のすべての単語の集合)に存在することを要求しません。一方、接尾辞除去アプローチの中には、実際の単語として存在するすべての既知の形態素語根のデータベース(大規模なリスト)を保持するものがあります。これらのアプローチでは、決定を下す前に、そのリストに用語が存在するかどうかを確認します。通常、用語が存在しない場合は、代替アクションが実行されます。この代替アクションには、他のいくつかの基準が含まれる場合があります。出力用語が存在しない場合、アルゴリズムは代替の接尾辞除去ルールを試行する可能性があります。
同じ入力語に対して2つ以上の接尾辞除去ルールが適用される場合があり、どのルールを適用すべきか曖昧さが生じます。アルゴリズムは、(人手で、または確率的に)いずれかのルールに優先順位を割り当てる場合があります。あるいは、アルゴリズムは、一方のルールの適用によって存在しない語が生成され、もう一方の重複するルールでは存在しない語が生成されないため、一方のルールの適用を拒否する場合があります。たとえば、英語の単語friendliesが与えられた場合、アルゴリズムは接尾辞 iesを識別し、適切なルールを適用してfriendlという結果を得る可能性があります。friendlはおそらく辞書に存在しないため、ルールは拒否されます。
基本的な接尾辞除去の改良点の1つは、接尾辞置換の使用です。除去ルールと同様に、置換ルールは接尾辞を別の接尾辞に置き換えます。たとえば、ies をyに置き換えるルールが存在する可能性があります。これがアルゴリズムにどのように影響するかは、アルゴリズムの設計によって異なります。例として、アルゴリズムは、ies の接尾辞除去ルールと接尾辞置換ルールの両方が適用されることを認識する場合があります。除去ルールでは辞書に存在しない用語が生成されますが、置換ルールでは生成されないため、代わりに置換ルールが適用されます。この例では、friendlies はfriendl 'ではなくfriendlyになります。
さらに詳しく見ていくと、一般的な手法として、ルールを循環的に(コンピュータ科学者が言うところの再帰的に)適用する方法があります。この例のシナリオでは、接尾辞置換ルールを適用した後、2回目の処理で「friendly」という語に一致するルールを特定します。このとき、 「ly」を削除するルールが特定され、受け入れられる可能性が高いです。まとめると、「friendlies」は(置換によって)「friendly」となり、さらに(削除によって)「friend」となります。
この例は、ルールベースのアプローチと総当たりアプローチの違いを説明するのにも役立ちます。総当たりアプローチでは、アルゴリズムは何十万もの活用形の中から「friendlies」を探し出し、理想的には対応する語根「friend」を見つけます。一方、ルールベースのアプローチでは、前述の3つのルールを順番に適用して、同じ解に収束させます。総当たりアプローチは、検索アルゴリズムが解に直接アクセスできるのに対し、ルールベースのアプローチは複数の選択肢とその組み合わせを試してから、最も良さそうな結果を選択するため、処理速度が遅くなる可能性が高いでしょう。
単語の語幹を決定する問題に対するより複雑なアプローチは、語幹抽出法です。このプロセスでは、まず単語の品詞を決定し、品詞ごとに異なる正規化規則を適用します。言語によっては語幹抽出規則が品詞によって変化するため、語幹の探索を試みる前に品詞を最初に検出する必要があります。
このアプローチは、正しい語彙カテゴリー(品詞)を取得できることに大きく依存します。特定のカテゴリーの正規化ルールには重複がありますが、間違ったカテゴリーを識別したり、正しいカテゴリーを生成できなかったりすると、接尾辞除去アルゴリズムに比べてこのアプローチの利点が制限されます。基本的な考え方は、ステマーが語幹抽出対象の単語についてより多くの情報を把握できれば、より正確な正規化ルールを適用できるということです(接尾辞除去ルールとは異なり、語幹を変更することもできます)。
確率的アルゴリズムは、確率を用いて単語の語根形を識別する手法です。確率的アルゴリズムは、語根形と活用形の関係表に基づいて学習(「学習」)を行い、確率モデルを構築します。このモデルは通常、接尾辞除去や語幹抽出と同様の複雑な言語規則の形で表現されます。語幹抽出は、学習済みモデルに活用形を入力し、モデルが内部規則セットに従って語根形を生成することで行われます。これもまた、接尾辞除去や語幹抽出と同様の手法ですが、最も適切な規則を適用するか、語幹抽出を行って同じ単語を返すか、あるいは2つの異なる規則を順次適用するかといった判断は、出力単語が正解である確率が最も高くなる(つまり、不正解である確率が最も低くなる)という基準に基づいて行われます。
語形変化アルゴリズムの中には、複数の品詞に属する可能性のある単語に対して、それぞれの品詞に確率を割り当てるという確率的なものがあります。これは、周囲の単語(文脈)を考慮に入れる場合と入れない場合の両方があります。文脈自由文法は、このような追加情報を一切考慮に入れません。いずれの場合も、それぞれの品詞に確率を割り当てた後、最も可能性の高い品詞が選択され、そこから適切な正規化規則が入力単語に適用されて、正規化された(語幹)形が生成されます。
ハイブリッドアプローチでは、上記のアプローチのうち2つ以上を組み合わせて使用します。簡単な例としては、まず総当たり検索でルックアップテーブルを参照する接尾辞ツリーアルゴリズムが挙げられます。ただし、特定の言語における単語間の関係をすべて格納しようとするのではなく、ルックアップテーブルは小さく保たれ、「ran => run」のようなごく少数の「頻繁な例外」のみを格納するために使用されます。単語が例外リストに含まれていない場合は、接尾辞除去または語幹抽出を適用して結果を出力します。
言語学では、接辞という用語は接頭辞または接尾辞のいずれかを指します。接尾辞の処理に加えて、いくつかの手法では一般的な接頭辞の除去も試みています。たとえば、indefinitely という単語が与えられた場合、先頭の「in」は除去可能な接頭辞であることがわかります。前述の手法の多くは適用されますが、接辞除去と呼ばれています。いくつかのヨーロッパ言語における接辞ステミングの研究は、こちらで見つけることができます。[ 5 ]
このようなアルゴリズムは、語幹データベース(例えば、語幹を含む文書のセット)を使用します。前述のように、これらの語幹は必ずしも有効な単語そのものではなく(「browse」や「browsing」の「brows」のように、よく使われる部分文字列です)、単語の語幹を抽出するために、アルゴリズムはデータベース内の語幹と照合し、候補となる語幹の単語内での相対的な長さなど、さまざまな制約を適用します(例えば、「be」、「been」、「being」などの語幹である短い接頭辞「be」は、「beside」の語幹とはみなされません)。
この分野の初期の学術研究の多くは英語に焦点を当てており(ポーターステマーアルゴリズムが多用された)、他の多くの言語も調査されている。[ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ]
ヘブライ語とアラビア語は、依然として語幹抽出の研究において難しい言語とみなされています。英語の語幹抽出は比較的単純で(「dries」が動詞「dry」の三人称単数現在形であること、「axes」が「axe」と「axis」の複数形であることなど、時折問題が発生する程度)、対象言語の形態論、正書法、文字符号化が複雑になるにつれて、語幹抽出の設計は難しくなります。例えば、イタリア語の語幹抽出は英語の語幹抽出よりも複雑で(動詞の活用が多いため)、ロシア語の語幹抽出はさらに複雑で(名詞の活用が多いため)、ヘブライ語の語幹抽出はさらに複雑で(非連結形態論、母音のない表記体系、接頭辞除去の必要性のため:ヘブライ語の語幹は2文字、3文字、または4文字で、それ以上は不可)、などです。[ 11 ]
多言語ステミングは、検索クエリを解釈する際に、単一言語の規則だけでなく、2つ以上の言語の形態素規則を同時に適用します。多言語ステミングを利用した商用システムも存在します。
語幹抽出アルゴリズムには、過剰語幹抽出と不足語幹抽出という2種類のエラーがあります。過剰語幹抽出とは、本来同じ語幹になるべきではない2つの活用語が同じ語幹に抽出されてしまうエラー(偽陽性)です。不足語幹抽出とは、本来同じ語幹になるべき2つの活用語が同じ語幹に抽出されないエラー(偽陰性)です。語幹抽出アルゴリズムは、これらのエラーをそれぞれ最小限に抑えるように設計されていますが、一方のエラーを減らすと他方のエラーが増える可能性があります。
例えば、広く使われているPorterの語幹抽出器は、「universal」「university」「universe」を「univers」と語幹抽出します。これは過剰な語幹抽出の一例です。これら3つの単語は語源的には関連していますが、現代における意味は大きく異なるため、検索エンジンで同義語として扱うと、検索結果の関連性が低下する可能性があります。
ポーターの語幹抽出器における語幹の不完全抽出の例としては、「alumnus」→「alumnu」、「alumni」→「alumni」、「alumna」/「alumnae」→「alumna」などが挙げられる。この英単語はラテン語の形態論を保持しているため、これらの類似語は混同されない。
語幹抽出は、基本的な意味が似ている単語をグループ化するための近似的な方法として用いられます。例えば、「daffodils」という単語を含むテキストは、「daffodil」(語尾にsがない)という単語を含むテキストと密接に関連していると考えられます。しかし、形態論的に同じ語幹を持つ単語でも、慣用的な意味が密接に関連していない場合もあります。「marketing」を検索しているユーザーは、「markets」という単語を含むドキュメントのほとんどでは満足せず、「marketing」という単語を含まないドキュメントに満足しないでしょう。
ステマーは、 Web検索エンジンなどのクエリシステムの要素として使用できます。しかし、英語のクエリシステムにおけるステミングの有効性はすぐにかなり限定的であることが判明し、このため初期の情報検索研究者はステミングを一般的に無関係とみなすようになりました。[ 12 ]代わりに、ステムではなくnグラムを検索する代替アプローチが使用される場合があります。また、ステマーは英語以外の言語でより大きな利点を提供する可能性があります。[ 13 ] [ 14 ]
ステミングは、ドメイン分析におけるドメイン語彙を決定するために使用されます。[ 15 ]
多くの商用企業は少なくとも1980年代からステミングを使用しており、多くの言語でアルゴリズム的および語彙的ステマーを開発してきました。[ 16 ] [ 17 ]
Snowballのステマーは、市販の語彙ステマーと比較され、結果は様々であった。[ 18 ] [ 19 ]
Google検索は2003年に単語ステミングを採用しました。[ 20 ]以前は「fish」で検索しても「fishing」は返されませんでした。他のソフトウェアの検索アルゴリズムは、単語ステミングの使用方法が異なります。単に部分文字列を検索するプログラムは、「fishing」の中に「fish」を見つけるのは当然ですが、「fishes」を検索すると「fish」という単語は見つかりません。
ステミングは、テキストマイニング分析を実行する前に、テキストを前処理するタスクとして使用されます。