テキストの正規化手法

Pythonで学ぶ自然言語処理(NLP)

Fouad Trad

Machine Learning Engineer

テキストの正規化

  • 正規化は語を標準形にそろえる
  • テキスト分類・検索・感情分析で有用
  • 主な手法:
    • 小文字化
    • ステミング
    • レンマ化

3人が「監督の良い映画が好き」を異なる言い回しで述べている画像:「I enjoy watching movies with great direction!」「I enjoyed watching movies that are well-directed.」「Movies with excellent direction are something I enjoy.」

Pythonで学ぶ自然言語処理(NLP)

小文字化

  • 正規化しないと、これらは別トークンとして扱われる
  • モデルを誤誘導し、語彙が膨らむ
text  = """Data scientists and data 
engineers need DATA"""
lower_text = text.lower()

print(lower_text)
data scientists and data 
engineers need data

「data」「Data」「DATA」に混乱する人の画像。

Pythonで学ぶ自然言語処理(NLP)

小文字化の適用範囲

有用な場面

キーワード分析に依存するタスク

テキストからキーワードを探す人の画像。

Pythonで学ぶ自然言語処理(NLP)

小文字化の適用範囲

有用な場面

キーワード分析に依存するタスク

テキストからキーワードを探す人の画像。

不向きな場面

大文字小文字で意味が変わる語を区別する必要があるタスク

「us(私たち)」の人々と「US(米国)」の国旗を対比する画像。

Pythonで学ぶ自然言語処理(NLP)

ステミング

  • 接尾辞を切って語を語幹に縮約
    • running → run
    • reading → read
  • 似た変種をまとめられる
  • 非単語になることがある
    • organization → organizat

Stem_logo.png

Pythonで学ぶ自然言語処理(NLP)

コードでのステミング

from nltk.stem import PorterStemmer

stemmer = PorterStemmer()
tokens = ['running', 'bats', 'organizations', 'reading']
stemmed = [stemmer.stem(word) for word in tokens]
print(stemmed)
['run', 'bat', 'organizat', 'read']
Pythonで学ぶ自然言語処理(NLP)

レンマ化(Lemmatization)

  • 語を基本形に変換
  • 出力は辞書にある語
    • organizations → organization
  • 文法的正確さが重要なときに有効
  • ステミングより遅いが高精度

lemmalogo.png

Pythonで学ぶ自然言語処理(NLP)

コードでのレンマ化

from nltk.stem import WordNetLemmatizer

nltk.download('wordnet')
lemmatizer = WordNetLemmatizer()
tokens = ['running', 'bats', 'organizations', 'reading']
lemmatized = [lemmatizer.lemmatize(word) for word in tokens]
print(lemmatized)
['running', 'bat', 'organization', 'reading']
Pythonで学ぶ自然言語処理(NLP)

ステミング

  • 高速
  • 非辞書語が出ることがある
  • 速度重視なら使用

チェーンソーで木を切る人の画像。

レンマ化

  • 低速
  • 高精度
  • 文法の正確さ重視なら使用

木の形を保つよう丁寧に剪定する人の画像。

Pythonで学ぶ自然言語処理(NLP)

演習に進みましょう!

Pythonで学ぶ自然言語処理(NLP)

Preparing Video For Download...