ステミングとレマタイゼーションは、単語の変化形を1つの基本形に縮小するテキスト前処理技術です。
研究者たちは人工知能が推論できるかどうかについて議論しており、この議論は計算言語学にまで及んでいます。チャットボットやディープラーニング・モデルは言語形式のみを処理できるのか、それとも意味を理解できるのか。2この問題についてどう考えるにせよ、機械学習モデルは異なる単語を1つの基本語の形態素的な変異形として認識するように訓練されなければなりません。つまり、意味ではなく形態に基づいて単語を処理します。派生した単語形を1つの語幹に減らすことで、ステミングとレマタイゼーションは、情報検索システムやディープラーニング・モデルが形態的に関連する単語を同等に扱うのを助けます。
多くのテキスト・マイニング・タスク、例えばテキスト分類、クラスタリング、インデックス作成などで、ステミングとレマタイゼーションは、機械学習アルゴリズムの次元を縮小し、形態的に関連する単語をグループ化することで、精度を向上させるのに役立ちます。アルゴリズムの次元削減は、NLPにおけるトピック・モデルや単語ベクトル・モデルなどの統計モデルの精度と精密度を向上させることができます。3
ステミングとレマタイゼーションは、生のテキスト・データを機械で処理できるように構造化された形式に変換するテキスト・マイニング・パイプラインの一段階として機能します。ステミングとレマタイゼーションはどちらも、語形変化した単語から接辞を取り除き、語根だけを残します。4これらのプロセスは、単語トークンの最初と最後から文字を削除することになります。結果として得られた語根、つまりベースとなる単語は、さらなる処理のために渡されます。この基本的な類似性以外にも、ステミングとレマタイゼーションには、さまざまな形式の単語を1つの共通の基本形に縮小する方法に大きな違いがあります。
ステミング・アルゴリズムは大きく異なりますが、いくつかの一般的な動作モードを共有しています。ステマーは、事前定義された一般的な接尾辞のリストに対して入力単語トークンを処理することで、単語の接尾辞を除去します。その後、ステマーは、見つかった接尾辞文字列を、接尾辞に関連するルールや条件に違反しない限り、単語から削除します。一部のステマー(たとえば、Lovinsステマー)は、結果として得られる語幹を、不正な語幹を修正するための追加のルール・セットに通します。
最も広く使用されているアルゴリズムはPorterステミング・アルゴリズムであり、その更新版であるSnowballステマーです。ステミングをよりよく理解するために、シェイクスピアの『ハムレット』から「There is nothing either good or bad but thinking makes it so.(良いことも悪いこともない。ただ考えることでそうなるのだ。)」という一節をSnowballステマーで処理できます。
Pythonの自然言語ツールキット(NLTK)には、SnowballとPorterのステマーの組み込み関数が含まれています。NLTKを使用して『ハムレット』の引用をトークン化した後、次のコードを使用して、トークン化されたテキストをSnowballステマーに渡すことができます。
from nltk.stem.snowball import SnowballStemmer from nltk.tokenize import word_tokenize stemmer = SnowballStemmer("english", True) text = "There is nothing either good or bad but thinking makes it so." words = word_tokenize(text) stemmed_words = [stemmer.stem(word) for word in words] print("Original:", text) print("Tokenized:", words) print("Stemmed:", stemmed_words)
コードの出力は次のとおりです。
原文: There is nothing either good or bad but thinking makes it so. トークン化: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.'] ステミング: ['there', 'is', 'noth', 'either', 'good', 'or', 'bad', 'but', 'think', 'make', 'it', 'so', '.']
SnowballおよびPorterステミング・アルゴリズムは、他のステマーよりも接尾辞を除去するためのより数学的な方法を持っています。要するに、ステマーは、トークン内の母音と子音のグループ数に応じて削除する接尾辞文字列を指定するルールのリストに対して、すべての単語トークンを処理します。5もちろん、英語は一般的な語彙規則には従いますが、絶対的な規則ではないため、ステミング・アルゴリズムの体系的な基準は、nothのようなエラーを返します。
ステマーは、現在進行形を表す一般的な語尾である-ingを削除します。しかし、『ハムレット』の引用では、-ingを削除すると誤って語幹nothが生成されます。これにより、その後の言語分析でnothingをanythingやsomethingなどの類似の名詞と関連付けることが妨げられる可能性があります。さらに、ステマーは不規則動詞isを変更せずに残します。Snowballステマーも同様に、wasやareなどのto beの他の活用形をステム化せずに残します。これにより、モデルが特定の動詞の不規則な活用を適切に関連付けることができなくなる可能性があります。
文献では、一般的にステミングを単語から接辞を取り除き、語幹化された単語列を得るプロセスと定義し、レマタイゼーションを形態的な変異形を1つの辞書の基本形に縮小するより大きな取り組みと定義しています。6ステミングとレマタイゼーションの実際的な違いは、ステミングが単に単語トークンの末尾から一般的な接尾辞を削除するのに対し、レマタイゼーションは、出力単語が辞書で見つけることができる単語の既存の正規化された形(例えば、レマ)であることを保証することです。7
レマタイゼーションは辞書の基本形を出力することを目的としているため、ステミングよりも堅牢な形態素解析が必要です。品詞(POS)タグ付けはレマタイゼーションにおける重要なステップです。POSは基本的に、文中での構文上の機能を示す各単語にタグを割り当てます。PythonのNLTKはWordNetレマタイゼーション・アルゴリズムの関数を提供しており、それによって『ハムレット』の一節をレマタイゼーションすることができます。
from nltk.stem import WordNetLemmatizer from nltk.corpus import wordnet from nltk import word_tokenize, pos_tag def get_wordnet_pos(tag): if tag.startswith('J'): return wordnet.ADJ elif tag.startswith('V'): return wordnet.VERB elif tag.startswith('N'): return wordnet.NOUN elif tag.startswith('R'): return wordnet.ADV else: return wordnet.NOUN def lemmatize_passage(text): words = word_tokenize(text) pos_tags = pos_tag(words) lemmatizer = WordNetLemmatizer() lemmatized_words = [lemmatizer.lemmatize(word, get_wordnet_pos(tag)) for word, tag in pos_tags] lemmatized_sentence = ' '.join(lemmatized_words) return lemmatized_sentence text = "There is nothing either good or bad but thinking makes it so." result = lemmatize_passage(text) print("Original:", text) print("Tokenized:", word_tokenize(text)) print("Lemmatized:", result)
コードは次を返します。
原文: There is nothing either good or bad but thinking makes it so. トークン化: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.'] レマタイゼーション: There be nothing either good or bad but think make it so .
WordNetLemmatizerは、Snowballステマーとよく似ており、動詞の活用を基本形(例えば、thinkingをthinkに、makesをmakeに)に減らします。しかし、Snowballステミング・アルゴリズムとは異なり、レマタイザーはnothingを名詞と識別し、その-ing語尾を適切にそのままにし、さらにisをその基本形であるbeに変更します。このようにして、レマタイザーは不規則な動詞形をより適切に統合します。
ステミングとレマタイゼーションは、主に英語のテキスト・データの正規化をサポートします。両方のテキスト正規化手法は、フランス語、ドイツ語、スペイン語など、他のローマ字言語もサポートしています。ロシア語などの他のスクリプトは、Snowballステマーによってさらにサポートされています。他の言語、特にアラビア語のステミングおよびレマタイゼーション・アルゴリズムの開発は、最近の継続的な研究分野です。アラビア語は、凝集的な形態、正書法の変化、語彙の曖昧さなどの特徴により、特に困難です。8全体として、これらの要素は、形態変化した単語の中から基本的な単語形を識別する体系的な方法を難しくします。少なくとも英語と比較した場合にはそうです。
この一般的な制限に加えて、ステミングとレマタイゼーションにはそれぞれ欠点があります。『ハムレット』の例で示したように、ステミングは比較的ヒューリスティックで、ルールに基づく文字列の削除プロセスです。過剰ステミングと過少ステミングはよく起こる2つのエラーです。前者は、意味的に異なる2つの単語が同じ語根に還元される場合(たとえば、newsがnewに還元されるなど)、後者は意味的に関連する2つの単語が同じ語根に還元されない場合(たとえば、knavishとknaveがそれぞれknavishとknaveのまま残るなど)です。9さらに、ステミングは単語から接尾辞のみを削除するため、レマタイゼーションのように不規則な動詞形や接頭辞を考慮することはできません。もちろん、ステミングは比較的シンプルで実装が容易ですが、レマタイゼーションは処理するデータのサイズによっては計算コストが高く、時間がかかる可能性があります。
IBM® watsonx Orchestrateを使用すると、スケーラブルなAIアシスタントとエージェントを簡単に設計し、反復的なタスクを自動化し、複雑なプロセスを簡素化できます。
ライブラリー、サービス、アプリケーションの強力かつ柔軟なポートフォリオにより、人工知能のビジネス価値を促進します。
AIの導入で重要なワークフローと業務を再構築し、エクスペリエンス、リアルタイムの意思決定とビジネス価値を最大化します。
IBM Graniteは、ビジネス向けにカスタマイズされ、AIアプリケーションの拡張に合わせて最適化された、オープンで高性能、かつ信頼性の高いAIモデル・ファミリーです。言語、コード、時系列、ガードレールのオプションをご覧ください。
自然言語処理がコンピューターとのより自然な対話にどのように役立つかをご覧ください。
2,000の組織を対象に、AIへの取り組みについて調査を行い、何が機能し、何が機能していないのか、どうすれば前進できるのかを明らかにしました。
IBM DeveloperのWebサイトのブログ、記事、ニュースレターには、IBMの組み込み型AIに関する詳細が記載されています。
ハンズオン・ラボ、コース、指導付きプロジェクト、トライアルなどで、基本的な概念を学び、スキルを身につけていただけます。
1 Nitin Indurkhya、Fred Damerau共著、Handbook of Natural Language Processing、第2版、CRC Press、2010年。
2 Zhaofeng Wu, Linlu Qiu, Alexis Ross, Ekin Akyürek, Boyuan Chen, Bailin Wang, Najoung Kim, Jacob Andreas, Yoon Kim, "Reasoning or Reciting? Exploring the Capabilities and Limitations of Language Models Through Counterfactual Tasks," 2023, https://arxiv.org/abs/2307.02477. Gati Aher, Rosa Arriaga, Adam Kalai, "Using Large Language Models to Simulate Multiple Humans and Replicate Human Subject Studies," Proceedings of the 40th International Conference on Machine Learning, PMLR, Vol. 202, 2023, pp. 337-371, https://proceedings.mlr.press/v202/aher23a.html. Emily Bender and Alexander Koller, “Climbing towards NLU: On Meaning, Form and Understanding in the Age of Data,” Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, 2020, pp. 5185-5198, 10.18653/v1/2020.acl-main.463.
3 Gary Miner, Dursun Delen, John Elder, Andrew Fast, Thomas Hill, and Robert A. Nisbet, Practical Text Mining and Statistical Analysis for Non-Structured Text Data Applications, Academic Press, 2012.
4 Christopher Manning and Hinrich Schütze, Foundations of Statistical Natural Language Processing, MIT Press, 1999.
5 Martin Porter, "An algorithm for suffix stripping", Program: electronic library and information systems, Vol. 14, No. 3, 1980, pp. 130-137, https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html. Martin Porter, “Snowball: A language for stemming algorithms,” 2001, https://snowballstem.org/texts/introduction.html.
6 Nitin Indurkhya、Fred Damerau共著、Handbook of Natural Language Processing、第2版、CRC Press、2010年。Christopher Manning、Hinrich Schütze共著、Foundations of Statistical Natural Language Processing、MIT Press、1999年。
7 Janez Brank, Dunja Mladenic and Marko Grobelnik, “Feature Construction in Text Mining,” Encyclopedia of Machine Learning and Data Mining, Springer, 2017.
8 Abed Alhakim Freihat, Gábor Bella, Mourad Abbas, Hamdy Mubarak, and Fausto Giunchiglia, "ALP: An Arabic Linguistic Pipeline," Analysis and Application of Natural Language and Speech Processing, 2022, pp.67-99, https://link.springer.com/chapter/10.1007/978-3-031-11035-1_4. Abdul Jabbar, Sajid Iqbal, Manzoor Ilahi Tamimy, Shafiq Hussain and Adnan Akhunzada, "Empirical evaluation and study of text stemming algorithms," Artificial Intelligence Review, Vol. 53, 2020, pp. 5559–5588, https://link.springer.com/article/10.1007/s10462-020-09828-3. Abed Alhakim Freihat, Mourad Abbas, G'abor Bella, Fausto Giunchiglia, "Towards an Optimal Solution to Lemmatization in Arabic," Procedia Computer Science, Vol. 142, 2018, pp. 132-140, https://www.sciencedirect.com/science/article/pii/S1877050918321707?via%3Dihub.
9 Chris Paice, “Stemming,” Encyclopedia of Database Systems, Springer, 2020.