PR

Pythonの自然言語処理 具体的なコードの実例

Pythonの自然言語処理

Pythonは自然言語処理の分野で広く使われているプログラミング言語です。以下は、Pythonを使った自然言語処理の概要と主要なライブラリについてまとめました。

一般的な自然言語処理の流れは以下の通りです。

  1. 前処理
    テキストデータの正規化、ノイズ除去、トークン化(単語に分割)など
  2. 形態素解析
    単語の品詞(名詞、動詞など)を付与
  3. 構文解析
    文の構造を解析
  4. 意味解析
    単語の意味や文脈を解析
  5. 課題に応じた処理
    分類、要約、質問応答、機械翻訳など

自然言語処理に使える主要なPythonライブラリは以下の通りです。

  • NLTK
    自然言語処理の基本的な処理が可能。トークン化、品詞タグ付け、構文解析などが利用できる。
  • spaCy
    高速で高精度な自然言語処理ライブラリ。英語、日本語、中国語などに対応。
  • Hugging Face Transformers
    BERT、GPT-2などの最新の言語モデルを利用できる。
  • Gensim
    トピックモデリングやWord2Vecなどの単語ベクトル化ツールが利用できる。
  • GiNZA
    spaCyをベースとした日本語の自然言語処理ライブラリ。

関連 pythonの機械学習ライブラリ

Pythonでの自然言語処理の例

以下は、Pythonで自然言語処理を行う基本的な例です。

#NLTKを使った形態素解析と品詞タグ付け
import nltk
text = "I am learning natural language processing with Python."
tokens = nltk.word_tokenize(text)
tagged = nltk.pos_tag(tokens)
print(tagged)

このPythonスクリプトは、NLTKライブラリを使って英文の形態素解析と品詞タグ付けを行っています。以下、コードの処理内容を解説します。

import nltk

NLTKライブラリをインポートしています。

関連 NLTK :: Natural Language Toolkit

text = "I am learning natural language processing with Python."

解析対象の英文を `text` 変数に代入しています。

tokens = nltk.word_tokenize(text)

`nltk.word_tokenize()` 関数を使って、英文 `text` を単語(トークン)に分割しています。この処理を形態素解析と呼びます。

分割された単語のリストが `tokens` 変数に格納されます。

tagged = nltk.pos_tag(tokens)

`nltk.pos_tag()` 関数を使って、形態素解析された単語リスト `tokens` に対して品詞タグ付けを行っています。

品詞タグ付けとは、各単語の品詞(名詞、動詞、形容詞など)を識別することです。タグ付けされた結果が、`tagged` 変数に格納されます。

print(tagged)

`print()` 関数で、品詞タグ付けの結果 `tagged` を出力しています。

実行結果は以下のようになります。

[('I', 'PRP'), ('am', 'VBP'), ('learning', 'VBG'), ('natural', 'JJ'), ('language', 'NN'), ('processing', 'NN'), ('with', 'IN'), ('Python', 'NNP'), ('.', '.')]

出力は、各単語とその品詞タグのタプルのリストになっています。

例えば、`(‘I’, ‘PRP’)` は、”I” が人称代名詞(PRP)であることを示しています。他の品詞タグの例: VBP(動詞、現在形)、VBG(動詞、動名詞)、JJ(形容詞)、NN(名詞、単数形)、NNP(固有名詞、単数形)、IN(前置詞)など。

このように、NLTKを使うことで、英文を単語に分割し、各単語の品詞を識別することができます。これは自然言語処理の基本的なステップの一つです。

spaCyを使った名詞句チャンキングの例

#spaCyを使った名詞句チャンキング 
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple released the new MacBook Pro models yesterday.")
for chunk in doc.noun_chunks
print(chunk.text, chunk.root.dep_, chunk.root.head.text)

このPythonスクリプトは、spaCyライブラリを使用して英語の文を解析し、名詞句(noun chunks)を抽出しています。

import spacy

spaCyライブラリをインポートしています。

関連 spaCy · Industrial-strength Natural Language Processing in Python

nlp = spacy.load("en_core_web_sm")

事前に学習済みの小サイズの英語モデル “en_core_web_sm” をロードしています。このモデルには、品詞タグ付け、依存関係解析、固有表現抽出などの機能が含まれています。

doc = nlp("Apple released the new MacBook Pro models yesterday.")

解析対象の文字列を nlp オブジェクトに渡し、Doc オブジェクトを作成しています。この時点で、文字列はトークン化され、各トークンに品詞タグと依存関係ラベルが付与されます。

for chunk in doc.noun_chunks:
print(chunk.text, chunk.root.dep_, chunk.root.head.text)

doc.noun_chunks を使って文中の名詞句(noun chunks)を抽出し、各名詞句について以下の情報を表示しています。

  • chunk.text: 名詞句のテキスト
  • chunk.root.dep_: 名詞句のルートトークンの依存関係ラベル
  • chunk.root.head.text: 名詞句のルートトークンの親トークンのテキスト

名詞句のルートとは、その名詞句の中心となる名詞のことです。

このスクリプトを実行すると、以下のような出力が得られます。

Apple nsubj released
the new MacBook Pro models dobj released
yesterday npadvmod released

これは、文中に3つの名詞句が存在し、それぞれの名詞句のルートトークンが “Apple”、”models”、”yesterday” であることを示しています。また、各名詞句のルートトークンの依存関係ラベルと親トークンのテキストも表示されています。

以上が、このPythonスクリプトの処理内容の解説です。spaCyを使うことで、英語の文を簡単に解析し、名詞句を抽出することができます。

Pythonは自然言語処理と相性が良く、単純な文法と豊富なライブラリを備えているため、自然言語処理の複雑なタスクも比較的簡単にコーディングできます。