ステミングとレマタイズ Python NLTK の例

⚡ スマートサマリー

ステミングとレンマ化は、テキスト正規化技術です。 Python NLTKは、単語のバリエーションを共通の基本形に還元します。語幹抽出は文脈を無視して接尾辞を素早く抽出し、語形変化は意味に基づいて真の辞書単語を返します。

  • 🌱 ステミング: PorterStemmerは接尾辞を切り取って、実際には存在しない可能性のある語根に到達します。
  • 📚 Lemmatization: WordNetLemmatizerは、辞書の基本形である「レマ」を返します。
  • <XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMXA><XNUMXxXNUMX><XNUMXxXNUMXA>️️ 差: 語幹抽出は高速だが、語形変化抽出は遅いものの、より正確で文脈を考慮した処理である。
  • 🔤 正規化: どちらも単語密度を低下させるため、機械は異形を一つの特徴として扱うことができる。
  • 🏷️ POSタグ: 品詞タグを渡すことで、語形変化判定の精度が大幅に向上する。
  • 🤖 AIの利点: よりクリーンで正規化されたテキストは、より強力な機械学習の特徴量とモデルを生み出す。

ステミングとレマタイズ Python NLTK

ステミングとレマタイズとは何か Python NLTK?

ステミングと見出し語化 in Python NLTKは、自然言語処理におけるテキスト正規化技術です。これらの技術は、テキストの前処理に広く用いられています。ステミングとレンマ化の違いは、ステミングは文脈を考慮せずに単語を切り出すため高速であるのに対し、レンマ化は処理前に単語の文脈を把握する必要があるため低速であるという点です。

ステミングとは何ですか?

ステミング は、単語を正規化する方法です。 自然言語処理これは、文中の単語の集合をシーケンスに変換して検索時間を短縮する技術です。この方法では、同じ意味を持つが文脈や文によって多少の違いがある単語を正規化します。言い換えれば、語根は1つですが、同じ単語のバリエーションが多数存在します。たとえば、語根は「eat」で、そのバリエーションは「eats、eating、eaten」などです。同様に、ステミングの助けを借りて、 Pythonそうすれば、あらゆるバリエーションの語源を見つけることができます。

具体的な例を挙げますと、以下の通りです。

He was riding.
He was taking the ride.

上記の2つの文は、どちらも過去の乗馬活動という意味で、意味は同じです。人間であれば、どちらの意味も同じだと容易に理解できます。しかし、機械にとっては、この2つの文は異なります。そのため、同じデータ行に変換するのは困難です。同じデータセットを提供しないと、機械は予測に失敗します。したがって、機械学習用のデータセットを準備するには、各単語の意味を区別する必要があります。ここでは、語幹抽出を用いて、同じ種類のデータを語根から抽出し、分類します。

これを実装するには Python プログラム。NLTKには、 ポーターステマーこのアルゴリズムは、トークン化された単語のリストを受け取り、それらを語幹に分解します。

ステミングを理解するためのプログラム

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

出力:

wait
wait
wait
wait

Code 説明:

  • NLTKにはステムモジュールがあり、これをインポートします。モジュール全体をインポートすると、数千行のコードが含まれるため、プログラムが重くなります。そのため、ステムモジュール全体から「PorterStemmer」のみをインポートしました。
  • 同じ単語の変化データのダミーリストを用意しました。
  • nltk.stem.porter.PorterStemmer クラスに属するオブジェクトが作成されます。
  • 私たちは「for」ループを使って、リストにある単語を一つずつPorterStemmerに渡しました。最終的に、リストにある各単語の語根が出力されました。

上記から、ステミングは重要な前処理ステップであることがわかります。なぜなら、ステミングによって同じ単語内の冗長性やバリエーションが除去されるからです。その結果、データがフィルタリングされ、機械学習の精度向上に役立ちます。それでは、完全な文を入力して出力結果を確認してみましょう。

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

出力:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code 説明:

  • PorterStemmer パッケージは、stem モジュールからインポートされます。
  • 文と単語の両方をトークン化するためのパッケージがインポートされます。
  • 次のステップでトークン化される文が書かれます。
  • PorterStemmer のオブジェクトがここで作成されます。
  • ループが実行され、コードの5行目で作成されたオブジェクトを使用して各単語の語幹抽出が行われます。

要するに、ステミングはデータ前処理モジュールです。英語には一つの単語に多くのバリエーションがあり、それが機械学習の学習や予測において曖昧さを生み出します。成功するモデルを構築するには、ステミングを用いてそのような単語を同じ順序のデータにフィルタリングすることが不可欠です。これは正規化とも呼ばれます。

見出し語化とは何ですか?

レンマ化 NLTK のレンマ化は、意味と文脈に基づいて単語の語幹を見つけるアルゴリズム処理です。レンマ化は通常、語の形態素解析を指し、語尾の屈折を取り除くことを目的としています。これは、語幹として知られる単語の基本形または辞書形を返すのに役立ちます。NLTK のレンマ化メソッドは、WordNet の組み込みの morph 関数に基づいています。テキストの前処理には、ステミングとレンマ化の両方が含まれます。多くの人がこの 2 つの用語を混同しています。これらを同じものとして扱う人もいますが、ステミングとレンマ化には違いがあります。以下の理由から、レンマ化が前者よりも好まれます。

見出し語化が語幹解析よりも優れているのはなぜですか?

ステミングアルゴリズムは、単語から接尾辞を切り取ることで機能します。より広い意味では、単語の先頭または末尾を切り取ります。一方、レンマ化はより強力な操作であり、単語の形態論的分析を考慮に入れます。これは、すべての活用形の基本形であるレンマを返します。辞書を作成し、単語の適切な形を探すには、深い言語学的知識が必要です。ステミングは一般的な操作ですが、レンマ化は辞書で適切な形を検索するインテリジェントな操作です。したがって、レンマ化はより良い辞書を作成するのに役立ちます。 機械学習 機能。

Code レンマ化とステミングを区別する

ステミング Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

出力:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

レンマ化 Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

出力:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

成果物の議論

「studies」と「studying」の語幹抽出を見ると、出力は同じ(studi)ですが、NLTKの語幹抽出器は、両方のトークンに対して異なる語幹を生成します。「studies」には「study」、「studying」には「studying」とします。そのため、機械学習モデルを訓練するための特徴量セットを作成する際には、語幹抽出が優先されることが望ましいでしょう。

Lemmatizer の使用例

レマタイザーはテキストの曖昧さを最小限に抑えます。bicycle や bicycles のような単語は、基本語 bicycle に変換されます。意味は同じでも表現が異なるすべての単語を基本形に変換し、単語密度とヘルパーを削減します。ping 機械学習モデルのトレーニング用に、正確な特徴量を準備しましょう。データがきれいであればあるほど、機械学習モデルの精度は向上します。NLTK Lemmatizerは、メモリと計算コストの削減にも貢献します。

WordNetの語形変化と品詞タグ付けの使用例を示すリアルタイムの例 Python:

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV
	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

出力:

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code 説明:

  • コーパスリーダーであるwordnetがインポートされ、wordnetからWordNetLemmatizerがインポートされます。
  • 単語のトークン化と品詞タグはnltkからインポートされ、デフォルト辞書はcollectionsからインポートされます。
  • pos_tagの最初の文字をキーとし、それをWordNet辞書の値にマッピングした辞書が作成されます。
  • テキストが書き込まれ、トークン化され、ループ内で使用するオブジェクト lemma_function が作成されます。
  • ループが実行され、lemmatize はトークンとマップの 2 つの引数を取ります。ping wordnet値を持つpos_tag。

Python レンマ化は WordNet辞書したがって、次にそのトピックを研究することが不可欠です。

よくあるご質問

PorterステマーはNLTKのPorterStemmerクラスです。接尾辞除去を適用します。ping マーティン・ポーターが1980年に考案したアルゴリズムのルールに従って、英語の単語を語幹に還元するため、「waiting」「waited」「waits」はすべて「wait」になります。

検索インデックス作成、大規模な感情分析、特徴量削減など、読みやすさよりも速度と簡潔さが重要な場合は、ステミングを使用してください。出力が有効な、人間が読める単語でなければならない場合は、レンマ化を選択してください。

テキスト正規化とは、単語の異なる形式を共通の表現に変換する技術です。ステミングとレンマ化は、単語密度を低減する2つの正規化手法であり、モデルが「study」と「studies」のような異形を単一の特徴として扱うことを可能にします。

NLTKは、語幹抽出にPorterStemmer(およびSnowballなどの他の語幹抽出ツール)を、語形変化抽出にWordNetLemmatizerを提供しています。語形変化抽出ツールは、WordNet辞書を利用して各単語の正しい基本形を返します。

重複する単語のバリエーションが削除されるため、機械学習モデルはよりクリーンで低次元の特徴を認識できます。重複するトークンが少なくなれば、トレーニング中の曖昧さが減り、未知のテキストに対する予測精度が向上します。

最新のAIモデルは文脈を自動的に推論しますが、NLTKのWordNetLemmatizerは品詞タグによって曖昧さを解消する必要があります。このタグを指定することで、適切な語幹を選択できるようになります。例えば、「learning」が動詞としてタグ付けされている場合は、「learn」に変換されます。

単語は名詞にも動詞にもなり得ますが、語幹はそれぞれ異なります。品詞タグがない場合、WordNetLemmatizerは名詞とみなします。動詞や形容詞などの適切なタグを渡すと、適切な基本形が得られます。

いいえ。語幹抽出では接尾辞のみが切り取られるため、「studies」は「studi」、「cries」は「cri」となり、これらは有効な単語ではありません。一方、語幹抽出では、「study」のような辞書に載っている実際の単語が常に返されます。