機械学習

MeCabによる形態素解析入門:都知事選のテキストデータで実践!

  • このエントリーをはてなブックマークに追加

昔から、様々なアニメや漫画、映画で「喋るロボット」と人間との関わりが描かれてきました。かつては夢物語に過ぎなかったであろう「喋るロボット」ですが、近年、それが現実のものになりつつあります。そして、そのようなコンピューターによる言語の認識を支えている技術が、「自然言語処理」です。

自然言語処理とは、英語や日本語など、人間が扱う言語(自然言語)をコンピューターによって正しく処理するための技術です。自然言語は非常にあいまいなものであるため、処理するためには非常に高度な技術を必要とします。

本稿では、自然言語処理の中でも基礎的な処理を担う「形態素解析」と、それを実行するための「MeCab」という形態素解析エンジンについての概要を説明します。その上で、Python上でMeCabを用いて簡単な形態素解析の実装を行います。

形態素解析とは

そもそも形態素解析(けいたいそかいせき、Morphological analysis)とはなんでしょうか。まず、形態素解析の概要と意義、大まかな内容を学びましょう。

形態素解析の概要

形態素解析とは、「文を単語(≒形態素)単位に分割し、各単語の品詞を特定する」解析技術のことです。具体的な内容に関しては、後ほど図を用いてご説明します。

形態素解析の意義

形態素解析を行うことによって、コンピューターは文の構成要素を認識することができます。そして、文の構成要素を認識することによって、より高度な自然言語処理を行うことができるようになるのです。形態素解析は高度な自然言語処理を行うための下準備と言えるでしょう。また、特に日本語に関しては、英語などと違って単語が連続して文を構成しているため、高い精度の形態素解析を行うことが比較的困難になっています。ゆえに、日本語を処理する場合には特に重要な技術と言えます。

形態素解析の内容

次に、形態素解析の内容を概観しましょう。形態素解析の内容は、大まかに分けて以下のようになっています。

1. 単語への分かち書き
2. 各単語の品詞の判定
3. 活用されている語の処理

形態素解析では、まず、文を最小単位である単語に分割します。次に、各単語の品詞を判定します。その上で、日本語で言えば動詞や形容詞など、文中での役割に応じて活用されている単語を処理し、原形を求めます。解析エンジンは、事前に与えられた辞書を検索してこのプロセスを進めます。しかし、辞書を隅から隅まで検索していては膨大な処理を行うこととなってしまいます。また、前述のように日本語の文は単語ごとに区切られておらず、文章の意味が客観的に一つに定まらないこともあります。このような問題を少しでも軽減し、より正確な解析を行うため、解析エンジンも発達してきました。

MeCabとは

本節では、形態素解析を行うための解析エンジン「MeCab」の概要とその特徴を学びましょう。

MeCabの概要

MeCabはオープンソースの形態素解析エンジンです。京都大学情報学研究科と日本電信電話株式会社コミュニケーション科学基礎研究所による共同研究ユニットプロジェクトを通じて、工藤拓氏によって開発されました。名前は作者の好物が和布蕪(めかぶ)であることに由来するそうです。(参考:MeCab公式HP工藤氏プロフィール)

MeCabの特徴

オープンソースの形態素解析エンジンには、MeCabの他にもJumanやChaSenなどがありますが、それらの解析エンジンと比べて、MeCabにはどのような特徴があるのでしょうか。主な特徴4点をまとめました。

高速かつ高精度の解析

MeCabは形態素解析エンジンの中でも、高速かつ高精度の解析を実現しています。まず、高速な解析を実現する鍵となっているのが、高速な辞書引きアルゴリズムです。前述のように、形態素解析では解析エンジンが辞書を引いて解析を進めます。そこに高速で処理できるアルゴリズムを用いることで、解析全体の時間が短縮されるのです。また、条件付き確率場(CRF)と呼ばれる学習モデルを採用しているため、少ないコーパスでも高い学習精度が得られます。具体的には、ChaSenという解析エンジンの学習モデルの3分の1程度のコーパスでも、同程度の精度が実現できるようです。ゆえに、採用する辞書や品詞体系に変更があった場合でも、高精度の解析を実現しやすいです。

最新の状態の辞書を利用可能

MeCabでは、標準的な辞書に加えて、オープンソースのmecab-ipadic-NEologdという辞書を活用することができます。この辞書は佐藤敏紀氏が作成したもので、Web上の言語資源から固有表現を取得して定期的に更新する仕組みになっているため、最新の語彙に対応しているのが大きな特徴です。Twitterのテキストデータなどの、最新の語彙が頻繁に出現するデータを分析する際に有効だと言えるでしょう。mecab-ipadic-NEologdの有用性に関しては、本稿の後半での実装にてご確認ください。(参考:mecab-ipadic-NEologdサイト佐藤氏による性能検証

形態素解析エンジンとして必要十分な機能

具体的な機能の面でも特徴があります。MeCabには、前処理や後処理で対応可能な機能は含まれていません。代わりにAPIが充実しているため、スムーズに前処理・後処理を行うことができます。APIはPython、Ruby、Java、C/C++、など、多様な言語に対応しています。さらに、機能を厳選する一方で、形態素解析エンジンとしての性質を活かした機能が盛り込まれている点にも注目すべきでしょう。具体例として、「ソフト分かち書き」が挙げられます、これは、形態素解析と文字単位解析という二つの手法を一つに融合し、パラメータによって両者の違いを連続的に表現した機能です。この機能によって、二つの手法の特徴をうまく活かすことができます。

高い汎用性:システムと辞書の分離

4つ目の特徴として、MeCabの高い汎用性についてご説明します。MeCabでは、形態素解析システムと辞書・コーパスは完全に分離されています。そのため、辞書さえあれば日本語だけでなく他の言語の解析も可能であり、様々な分析・研究に応用することができるでしょう。

MeCabのための環境構築

MeCabの特徴については理解していただけたでしょうか。ここからは、MeCabを使って実際に形態素解析をするために、環境を構築していきましょう。本節では、MacOSへのインストール方法とGoogle Colab上での利用方法を解説していきます。(参考:Google Colabの使い方

※Windowsへのインストール方法については、MeCab公式ホームページをご覧ください。

Macへのインストール方法

本稿の執筆に利用したMacの環境は以下の通りです。

  • Mac OS High Sierra 10.13.4
  • Anaconda4.8.3
  • Python3.6.9

では、インストール手順を順に説明していきます。

1. Homebrewをインストールする

MacOSにMecabをインストールするには、HomebrewというmacOSおよびLinux用のパッケージマネージャーを利用するのが便利です。PCにインストールされていない方は、Homebrewのホームページに記載されているインストール用のコードをターミナルに貼り付けて、実行してください。なお、管理者でログインしていない場合にはインストールできない場合があるのでご注意ください。

2. MeCabおよび形態素解析に必要な辞書をインストールする

Homebrewがインストールできたら、ターミナル上でbrewコマンドを用いてMeCabとメジャーな辞書であるIPA辞書を、pipを用いてPythonからMeCabを呼び出すためのラッパーをインストールしましょう。

$ brew install mecab

$ brew install mecab-ipadic

$ pip install mecab-python3

3. Terminalで動作確認を行う。

インストール完了後に、以下のようにターミナルでpythonを起動し、MeCabをインポートしてエラーが出なければ、準備は完了です。

$ python

import MeCab

4. mecab-ipadic-NEologdのインストール

MeCabの特徴の項目でもご紹介した、最新の語彙に対応している辞書をインストールしましょう。以下のコードの一行目で必要なライブラリをインストールした上で、二行目以下のコードを実行すれば、mecab-ipadic-NEologdをインストールすることができます。

$ brew install mecab mecab-ipadic git curl xz

$ git clone –depth 1 git@github.com:neologd/mecab-ipadic-neologd.git

$ cd mecab-ipadic-neologd

$ ./bin/install-mecab-ipadic-neologd -n

Google Colabでの利用方法

次に、Google Colabでの利用方法について解説します。ここでは、そのままGoogle Colab上で簡単な形態素解析を行います。

まず、Google Colabを開いたら、必要なツールをインストールしていきます。swigとは、C/C++で書かれたプログラムをPythonなどの他の言語に接続するためのツールです。また、Unidic-liteはUnidicという辞書の軽量版です。

 

これで、MeCabをPython上で利用するための準備は整いました。早速、簡単な文で実際に形態素解析を実行してみましょう。MeCabをインポートし、Taggerクラスのインスタンスを作成します。

次に、サンプルのテキストデータを作成し、parseToNodeメソッドで形態素解析を行います。

無事に形態素解析ができたら、解析結果を表示する前にデータ構造を確認しましょう。上記のコードで形態素解析をすると、node.surfaceにテキストの形態素が、node.featureに各形態素の特徴が格納されます。次の形態素に移りたいときは、next.nodeをnodeに代入します。1語目は文の開始記号なので、2語目にあたる「先月」とその情報を表示してみましょう。

 

解析後のデータ構造が分かったところで、以下の手順で解析結果を表示しましょう。

  1. nodeを解析直後の状態に戻す
  2. while文で繰り返し処理を指示
  3. node.surfaceに格納されている単語を取得
  4. node.featureに格納されている単語の情報をカンマで分割し、品詞の情報のみを取得
  5. 単語と品詞を表示
  6. node.nextで処理の対象を次の単語に進める
 

形態素解析の結果を表示することができました。それでは次に、前述の最新語彙対応辞書「mecab-ipadic-NEologd」を利用できるようにしましょう。

 

これで、MeCabがmecab-ipadic-NEologdを参照するようになりました。 それでは、先ほどと同じ文を形態素解析してみましょう。

 

このような結果になりました。先ほどの結果と比べると、mecab-ipadic-NEologdでは「ぺこぱ」が固有名詞として認識されていることがわかります。このように、新しい語彙にも対応しているので、Twitterなどの新しい語彙が多く出現するテキストデータを分析する場合に有用だと言えるでしょう。一方で、「お笑いライブ」も固有名詞として認識しているなど、いくつかの違いがあります。形態素解析は、利用する辞書によって解析結果が異なるため、分析対象に適した辞書を選択することが重要です。

MeCabによる形態素解析実践

ここでは、MeCabによる形態素解析を活用して、簡単なテキスト分析を実装します。本稿では、先日終了したばかりの東京都知事選挙における、得票数上位の三候補の政策に関する文章を解析し、図示します。

テキストデータの解析

まず、以下の二つのプログラムをインポートしておきましょう。一つ目は、Python標準ライブラリのreモジュールで、テキストデータを正規表現に加工するために使います。もう一つは、Pythonの標準ライブラリであるcollectionsのCounterクラスで、語の出現回数をカウントするために使います。

それでは、早速形態素解析を行なっていきましょう。用いるテキストデータは、各候補者のウェブサイトの政策に関するページ上のテキストデータです。なお、サイトの画像内のテキストは今回のデータには含んでいません。山本太郎氏のテキストデータに関しては、政策の内容を正確に捉えるため、「>>>より詳しく」の先のページのテキストもデータに含めています。以下に、各候補者の政策ページと本稿で用いるテキストデータのファイルURLを載せておきます。ぜひ、テキストデータをダウンロードして、ご自身の環境で解析してみてください。

※テキストデータはブラウザで開くと文字化けしてしまう場合がありますが、ダウンロードしていただければ問題なく利用していただけます。

参考:各候補者の政策ページと、本稿で用いるテキストデータ(2020年7月3日に作成)

 

テキストデータを表示しました。基本的に、テキストを分析する際にはノイズとなりうる記号は削除して綺麗なデータにします。しかし、本稿の分析においては、使用するテキストデータが通常の文章ではなく、箇条書きされている箇所やかっこによって単語が区切られている箇所があります。ゆえに、かっこや数字を取り除いてしまうと形態素が適切に解析されない可能性もあると考え、このまま分析することとします。

解析結果は上のようになりました。問題なく解析されていますが、このままでは解釈が難しいため、以下の処理を行います。

  1. 行(\n)単位に分割
  2. 各行のタブ(\t)を除去
  3. 名詞・一般に該当する単語をリストに格納
  4. 出現頻度上位15語を抽出して表示
 

小池百合子氏の政策の形態素解析および頻出語の抽出は上記のような結果になりました。このようにテキストデータを分析すれば、これまでテキストデータを読むだけでは得られなかった、より客観的かつ斬新な知見を得られる可能性があることがお分かりいただけたかと思います。

それでは、同様の処理を行った宇都宮健児氏、山本太郎氏の政策頻出語リストも併せてご覧下さい。

 

解析結果の図示

次に、上記の解析結果を簡単に棒グラフで図示したいと思います。matplotlibで日本語を表示するために必要なjapanize-matplotlibをインストールした上で、他の必要なライブラリと合わせてインポートします。

※1:japanize-matplotlibは、インポートする際にはハイフンをアンダーバーにする必要があります。ご注意ください。

※2:japanize-matplotlibの綴りにご注意ください。japaneseではありません。

頻出語の図示も、まず小池氏のデータを用いて行います。先ほどの頻出語抽出の際に利用した、counterをそのまま活用します。

データを確認したところ、語と出現数がセットで格納されているので、グラフ化しやすいようにpandasのデータフレームに変換します。

 

それでは、実際に棒グラフで図示してみましょう。他の二候補者のグラフと併せてご覧下さい。

まとめ

いかがでしたでしょうか。形態素解析の概要とMeCabの特徴の説明、そして形態素解析の実装と盛りだくさんの内容となりましたが、少しでも形態素解析についての理解が深められていれば幸いです。しかし、形態素解析は自然言語処理という大きな分野の一技術です。形態素解析の後のプロセスとして、構文解析・意味解析・文脈解析と、まだまだこの分野には学ぶべき内容が数多くありますので貪欲に学びを深めていきましょう。

  • このエントリーをはてなブックマークに追加

無料で始める機械学習エンジニア入門

AIエンジニアへスキルアップをしませんか?コデクサでは、機械学習の初心者を対象に0から学べるコースを配信しています。

機械学習に必要な線形代数や統計基礎、さらに初歩的なアルゴリズムなどの無料コースを豊富に取り揃えています!

機械学習エンジニアへキャリアアップをしましょう!

コースを確認する

コメント

  1. Paul O'Leary McCann より:

    こんにちは、mecab-python3の開発者です。

    「必要なライブラリー」のところですが、mecab-python3を使う場合、基本的になにかを事前にインストールする必要はありません。2018年以前にその必要はありましたが、v0.996.1からwheelを提供していますので、pip install mecab-python3だけでインストールできます。

Paul O'Leary McCann へ返信する コメントをキャンセル

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)