このシリーズでは、自然言語処理の環境構築から学習の方法までまとめます。

今回の記事では、形態素解析の概要と基本的な実装方法を紹介します。

Google colabを使用して、簡単に最新の自然言語処理モデルを実装することができますので、ぜひ最後までご覧ください。

【ChatGPT】自然言語処理まとめ【Huggingface Transformers】

自然言語処理に関するおすすめの書籍 ChatGPT ChatGPTを中心とした、GPT系の関連技術を紹介します。 ChatGPTの概要 ・ChatGPTとは・ChatGPTができること・ChatGPTの問題点…

今回の内容

・形態素解析とは

・形態素解析のライブラリ

・GiNZAによる形態素解析

形態素解析とは

形態素解析

形態素解析とは、単語や文章などから言語が意味を持つ最小単位である「形態素」に分割し、それらが品詞としてどれに当たるのか分類する文字列抽出法のことです。

自然言語処理のにおいて、文の構造や意味を考えるためには、まずは文中の単語を認識する必要があります。

英語の場合にはそれぞれの単語がスペースで区切られていますが、日本語の文章では単語単位に分かち書きさせていません。

そこで、日本語や東アジアの諸言語における形態素解析の処理では、平文を形態素解析により分かち書きにした各要素を入力表現に使用します。

例として、次の文章で形態素分割を行うと、結果は以下のようになります。

私は毎週水曜日はカフェで勉強します。
↓
私 は 毎週 水曜日 は カフェ で 勉強 し ます 。

構文分析と意味解析

文章を単語に分かち書きした後、文の構造を解析する処理を構文分析と言います。

構文分析の手法として、形態素解析で得られた単語間の関係性を解析する係り受け解析があります。

また、文の意味を解析する処理を意味解析と言います。

文から意味を取り出す手法に述語項構造解析があります。

係り受け解析や述語項構造解析を用いることで、以下のように文章の構造を把握することができるようになります。

形態素解析のライブラリ

形態素解析を実行するためのライブラリはいくつか存在します。

ここでは代表的な「MeCab」、「JANOME」、「spacy」、「sudachi」、「Ginza」について紹介します。

MeCab

京都大学情報学研究科と日本電信電話株式会社コミュニケーション科学基礎研究所の共同研究の際に、現Googleソフトウェアエンジニアの工藤拓氏によって開発されたオープンソース型の形態素解析ツールです。

開発者の好物であった「メカブ」が名前の由来です。

辞書やコーパスの種類に依存せずに利用可能で、汎用的な設計となっていることが特徴です。

JANOME

「蛇の目」が名前の由来の形態素解析ツールであり、その名の通り、Pythonで作られています。

辞書情報があらかじめ内包されていますが、中身はMeCabに内蔵されている辞書を流用しているため、解析結果の精度としてはMeCabと同等になります。

SudachiPy

SudachiPyはワークス徳島人工知能NLP研究所が開発している、形態素解析器SudachiのPython版です。
バージョン0.6.0からは実装をCythonからRustに変更し、以前のバージョンより20倍ほど実行速度が速くなっています。

spacy

最先端の機械学習技術を取り入れた自然言語処理ライブラリです。

種々の解析処理と多言語固有表現抽出のための統計的ニューラルネットワークモデルと、その他様々な言語に対する字句解析モデルを提供しています。

GiNZA

「spaCy」をフレームワークとして利用している、高速・高精度な解析処理が可能な日本語自然言語処理のオープンソースライブラリです。

「SudachiPy」を内部に組み込み、トークン化処理に利用しています。

「GiNZA日本語UDモデル」にはMegagon Labsと国立国語研究所の共同研究成果が組み込まれています。

GiNZAによる形態素解析の実装

ここからはGoogle colabを使用して、GiNZAによる形態素解析の簡単なを実装例を紹介していきます。

まずはインストールします。

# GiNZAのインストール
!pip install -U ginza

動作確認をします。

import spacy

nlp = spacy.load('ja_ginza')

以下のようなエラーが出た場合には、再度インストールします。

Can’t find model ‘ja_ginza’. It doesn’t seem to be a shortcut link, a Python package or a valid path to a data directory.

!pip install ginza ja-ginza 

インストールが終わったら、ランタイムの再起動を行います。ー

形態素解析

それぞれの解析方法について紹介します。

形態素分割

形態素分割では、一連の文章から形態素(=言語が意味を持つ最小単位)に分割して出力します。

一般に形態素解析という場合には、この形態素分析を指す場合が多いです。

import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('私は毎週水曜日にカフェで勉強します。その後、ジムに寄ってから帰ります。')

for token in doc:
    print(token)

実行すると、以下のような結果が出力されます。

私
は
毎週
水曜日
に
カフェ
で
勉強
し
ます
。
その
後
、
ジム
に
寄っ
て
から
帰り
ます
。

形態素の分割モード

「GiNZA」では、3種類の形態素を切り替えて利用することができます。

全国高等学校野球選手権大会

分割単位A  全国/高等/学校/野球/選手/権/大会
分割単位B  全国/高等/学校/野球/選手権/大会
分割単位C  全国/高等学校/野球/選手権/大会

分割単位A

import spacy
import ginza
nlp = spacy.load('ja_ginza')
ginza.set_split_mode(nlp, 'A') # 分割単位A
doc = nlp('夏の全国高等学校野球選手権大会に出場する')

for token in doc:
    print(token)

実行すると、以下のような結果が出力されます。

夏
の
全国
高等
学校
野球
選手
権
大会
に
出場
する

分割単位B

import spacy
import ginza
nlp = spacy.load('ja_ginza')
ginza.set_split_mode(nlp, 'B') # 分割単位B
doc = nlp('夏の全国高等学校野球選手権大会に出場する')

for token in doc:
    print(token)

実行すると、以下のような結果が出力されます。

夏
の
全国
高等
学校
野球
選手権
大会
に
出場
する

分割単位C

import spacy
import ginza
nlp = spacy.load('ja_ginza')
ginza.set_split_mode(nlp, 'C') # 分割単位C
doc = nlp('夏の全国高等学校野球選手権大会に出場する')

for token in doc:
    print(token)

実行すると、以下のような結果が出力されます。

夏
の
全国
高等学校
野球
選手権
大会
に
出場
する

品詞の抽出

形態素解析では、品詞も同時に出力することができます。

import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('私は毎週水曜日にカフェで勉強します。その後、ジムに寄ってから帰ります。')

for token in doc:
    print(
        token.text+', '+ # テキスト
        token.tag_+', '+ # SudachiPyの品詞タグ
        token.pos_) # Universal Dependenciesの品詞タグ

実行すると、以下のような結果が出力されます。

私, 代名詞, PRON
は, 助詞-係助詞, ADP
毎週, 名詞-普通名詞-副詞可能, NOUN
水曜日, 名詞-普通名詞-副詞可能, NOUN
に, 助詞-格助詞, ADP
カフェ, 名詞-普通名詞-一般, NOUN
で, 助詞-格助詞, ADP
勉強, 名詞-普通名詞-サ変可能, VERB
し, 動詞-非自立可能, AUX
ます, 助動詞, AUX
。, 補助記号-句点, PUNCT
その, 連体詞, DET
後, 名詞-普通名詞-副詞可能, NOUN
、, 補助記号-読点, PUNCT
ジム, 名詞-普通名詞-一般, NOUN
に, 助詞-格助詞, ADP
寄っ, 動詞-一般, VERB
て, 助詞-接続助詞, SCONJ
から, 助詞-格助詞, ADP
帰り, 動詞-一般, VERB
ます, 助動詞, AUX
。, 補助記号-句点, PUNCT

まとめ

最後までご覧いただきありがとうございました。

今回の記事では、自然言語処理の基本事項である形態素解析の概要と基本的な実装方法を紹介しました。

このシリーズでは、自然言語処理全般に関するより詳細な実装や学習の方法を紹介しておりますので、是非ご覧ください。

【ChatGPT】自然言語処理まとめ【Huggingface Transformers】

自然言語処理に関するおすすめの書籍 ChatGPT ChatGPTを中心とした、GPT系の関連技術を紹介します。 ChatGPTの概要 ・ChatGPTとは・ChatGPTができること・ChatGPTの問題点…