2016年5月11日水曜日

AWS EC2に日本語形態素解析システムMeCab(IPA辞書 + 新語辞書:mecab-ipadic-neologd)と日本語係り受け解析器J.DepPで日本語を処理する環境をつくる

LINE Bot API、Facebook Messenger Platform が公開されてIT業界は一気に Bot ブームですが、一番の特徴である「ユーザーとの会話をベースに様々なサービスを提供する」ことを実現するためには、少なからず日本語を解析する処理が必要になってきます。そこで今回は、AWS の EC2 に日本語を処理するための環境を構築します。

(mecab-ipadic-neologd をインストールする際にメモリに1.5G以上の空きがないとビルドが落ちてしまうため、EC2のSmall 以上のインスタンスで行ってください)

使用したインスタンスのイメージですが、『Amazon Linux AMI 2016.03.1 (HVM), SSD Volume Type - ami-29160d47』を使用しました。

管理者権限になる

インストールと設定は管理者権限で行いますので権限を取ります。
$sudo su -

MeCab - 日本語形態素解析システムのインストール

MeCabは、分かち書き(”私は日本人です” を ”私_は_日本人_です” と分解する)を行うためのものです。辞書には標準のIPA辞書に加えて、IPA辞書には含まれていない新しい単語(芸能人の名前やテレビ番組名など)に対応するために新語辞書 mecab-ipadic-neologd をインストールします。

MeCab:http://taku910.github.io/mecab/

まず、MeCab のインストールに必要なコンパイラなどのツールを準備します。既にインストール済みのものはスキップされますのでこのまま実行できます。
#yum install -y gcc-c++ gcc-objc++ gcc41-c++ make


次に MeCab をソースからビルドしてインストールします。文字コードですが、UTF-8以外は使う予定がないので --enable-utf8-only を指定しています(他のコードを含まないためビルド後のバイナリサイズが小さくなる。公式サイトのこちらの記述より)が、このオプションは外しても大丈夫です。あと、デフォルトのキャラセットを --with-charset オプションでUTF-8にしています。(指定しないとEUCが使用される)

#cd /usr/local/src
#wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz
#tar zxfv mecab-0.996.tar.gz
#cd mecab-0.996
#./configure --enable-utf8-only --with-charset=utf8
#make
#make install

IPA辞書のインストール

MeCab が標準辞書として推奨しているIPA辞書を MeCab 同様にソースからビルドしてインストールします。MeCabに合わせて文字コードには、UTF-8を指定しています。
#cd /usr/local/src/
#wget https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
#tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz 
#cd mecab-ipadic-2.7.0-20070801
#./configure --with-mecab-config=/usr/local/bin/mecab-config --with-charset=utf8
#make
#make install 


インストールが正しく行われたかを動作確認します。この後にインストールする mecab-ipadic-neologd が出力する結果と比較するために、mecab-ipadic-neologd の公式サイトにあるサンプル文字列を使いました。番組名などが別の単語として扱われているのが分かります。

読みやすいようにコマンドを2行に分けていますが、実際は1行にして実行してください。
#echo "10日放送の「中居正広のミになる図書館」(テレビ朝日系)で、SMAPの中居正広が、篠原信一の過去の勘違いを明かす一幕があった。" 
| mecab 

10      名詞,数,*,*,*,*,*
日      名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
放送    名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
「      記号,括弧開,*,*,*,*,「,「,「
中居    名詞,固有名詞,人名,姓,*,*,中居,ナカイ,ナカイ
正広    名詞,固有名詞,人名,名,*,*,正広,マサヒロ,マサヒロ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ミ      名詞,一般,*,*,*,*,ミ,ミ,ミ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
なる    動詞,自立,*,*,五段・ラ行,基本形,なる,ナル,ナル
図書館  名詞,一般,*,*,*,*,図書館,トショカン,トショカン
」      記号,括弧閉,*,*,*,*,」,」,」
(      記号,括弧開,*,*,*,*,(,(,(
テレビ朝日      名詞,固有名詞,組織,*,*,*,テレビ朝日,テレビアサヒ,テレビアサヒ
系      名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)      記号,括弧閉,*,*,*,*,),),)
で      助詞,格助詞,一般,*,*,*,で,デ,デ
、      記号,読点,*,*,*,*,、,、,、
SMAP    名詞,固有名詞,組織,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
中居    名詞,固有名詞,人名,姓,*,*,中居,ナカイ,ナカイ
正広    名詞,固有名詞,人名,名,*,*,正広,マサヒロ,マサヒロ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
、      記号,読点,*,*,*,*,、,、,、
篠原    名詞,固有名詞,人名,姓,*,*,篠原,シノハラ,シノハラ
信一    名詞,固有名詞,人名,名,*,*,信一,シンイチ,シンイチ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
過去    名詞,副詞可能,*,*,*,*,過去,カコ,カコ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
勘違い  名詞,サ変接続,*,*,*,*,勘違い,カンチガイ,カンチガイ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
明かす  動詞,自立,*,*,五段・サ行,基本形,明かす,アカス,アカス
一幕    名詞,一般,*,*,*,*,一幕,ヒトマク,ヒトマク
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
あっ    動詞,自立,*,*,五段・ラ行,連用タ接続,ある,アッ,アッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。

新語辞書 mecab-ipadic-neologd のインストール

この新語辞書 mecab-ipadic-neologd をインストールすることで、IPA辞書には含まれていない新しい単語に対応することができるようになります。例えば、「Apple Watch」は、IPA辞書だと「Apple」と「Watch」という2つの単語として処理されますが、mecab-ipadic-neologd を使うことで「Apple Watch」という1つの名詞として扱われるようになります。いや、ほんとに素晴らしい辞書です。

mecab-ipadic-neologd:http://diary.overlasting.net/2015-03-13-1.html

mecab-ipadic-neologd のインストールに必要なツールを準備します。既にインストール済みのものはスキップされますのでこのまま実行できます。

#yum install git patch


IPA辞書同様に mecab-ipadic-neologd をビルドしてインストールします。
#cd /usr/local/src/
#mkdir neologd
#cd neologd
#git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
#cd mecab-ipadic-neologd
#./bin/install-mecab-ipadic-neologd -n


インストールの最後にIPA辞書との比較が表示され、インストールをするかの確認がされますので「yes」を入力します。

〜略〜

default system dictionary         |     mecab-ipadic-NEologd
陸奥 守 吉行                      |     陸奥守吉行
アクリル 樹脂                     |     アクリル樹脂
敷居 が 高い                      |     敷居が高い
ゲス の 極み 乙女 。              |     ゲスの極み乙女。
真木 蔵人                         |     真木蔵人
恋 の かけ ら                     |     恋のかけら
金 スマ                           |     金スマ
マイク 真木                       |     マイク真木
南越谷 駅                         |     南越谷駅

[test-mecab-ipadic-NEologd] : Finish..

[install-mecab-ipadic-NEologd] : Please check the list of differences in the upper part.

[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes 


インストールが正しく行われたかを動作確認します。MeCab の -d パラメータで辞書を mecab-ipadic-neologd に指定しています。先ほどとは異なり、番組名などが1つの単語として扱われるようになりました。mecab-ipadic-neologd すごい。

読みやすいようにコマンドを2行に分けていますが、実際は1行にして実行してください。
#echo "10日放送の「中居正広のミになる図書館」(テレビ朝日系)で、SMAPの中居正広が、篠原信一の過去の勘違いを明かす一幕があった。"
 | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd

10日    名詞,固有名詞,一般,*,*,*,10日,トオカ,トオカ
放送    名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
「      記号,括弧開,*,*,*,*,「,「,「
中居正広のミになる図書館        名詞,固有名詞,一般,*,*,*,中居正広のミになる図書館,ナカイマサヒロノミニナルトショカン,ナカイマサヒロノミニナルトショカン
」      記号,括弧閉,*,*,*,*,」,」,」
(      記号,括弧開,*,*,*,*,(,(,(
テレビ朝日      名詞,固有名詞,組織,*,*,*,テレビ朝日,テレビアサヒ,テレビアサヒ
系      名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)      記号,括弧閉,*,*,*,*,),),)
で      助詞,格助詞,一般,*,*,*,で,デ,デ
、      記号,読点,*,*,*,*,、,、,、
SMAP    名詞,固有名詞,人名,一般,*,*,SMAP,スマップ,スマップ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
中居正広        名詞,固有名詞,人名,一般,*,*,中居正広,ナカイマサヒロ,ナカイマサヒロ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
、      記号,読点,*,*,*,*,、,、,、
篠原信一        名詞,固有名詞,人名,一般,*,*,篠原信一,シノハラシンイチ,シノハラシンイチ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
過去    名詞,副詞可能,*,*,*,*,過去,カコ,カコ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
勘違い  名詞,サ変接続,*,*,*,*,勘違い,カンチガイ,カンチガイ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
明かす  動詞,自立,*,*,五段・サ行,基本形,明かす,アカス,アカス
一幕    名詞,一般,*,*,*,*,一幕,ヒトマク,ヒトマク
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
あっ    動詞,自立,*,*,五段・ラ行,連用タ接続,ある,アッ,アッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。



J.depP - 日本語係り受け解析器のインストール

MeCab で単語ごとに分かち書きを行えるようになりましたが、このままだと単語同士の関連がつかめないため、その係り受けを解析するためのソフトウェアが J.depP です。係り受の解析は、CaboCha が有名ですが、この記事を書いている時点では、J.depP の方も一度試してみようということで選択しています。

ソースからビルドしてインストールします。--with-postagger で mecab を指定、辞書は --with-mecab-dict でIPA(その他にJUMAN、NAIST-J、UNIが指定可能)を指定しています。

#cd /usr/local/src/
#wget http://www.tkl.iis.u-tokyo.ac.jp/~ynaga/jdepp/jdepp-latest.tar.gz
#tar xzf jdepp-latest.tar.gz 
#cd jdepp-2015-10-05/
#./configure --with-postagger=mecab --with-mecab-dict=IPA
#make model
#make install 

ビルド中に warnning などが表示されますが、そのまま通っていきます。最後にインストールが正しく行われたかを動作確認します。

読みやすいようにコマンドを3行に分けていますが、実際は1行にして実行してください。
#echo "10日放送の「中居正広のミになる図書館」(テレビ朝日系)で、SMAPの中居正広が、篠原信一の過去の勘違いを明かす一幕があった。" 
| mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd 
| jdepp 

(input: STDIN [-I 0])
# S-ID: 1; J.DepP
* 0 1D
10日    名詞,固有名詞,一般,*,*,*,10日,トオカ,トオカ
放送    名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
* 1 9D
「      記号,括弧開,*,*,*,*,「,「,「
中居正広のミになる図書館        名詞,固有名詞,一般,*,*,*,中居正広のミになる図書館,ナカイマサヒロノミニナルトショカン,ナカイマサヒロノミニナルトショカン
」      記号,括弧閉,*,*,*,*,」,」,」
(      記号,括弧開,*,*,*,*,(,(,(
テレビ朝日      名詞,固有名詞,組織,*,*,*,テレビ朝日,テレビアサヒ,テレビアサヒ
系      名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)      記号,括弧閉,*,*,*,*,),),)
で      助詞,格助詞,一般,*,*,*,で,デ,デ
、      記号,読点,*,*,*,*,、,、,、
* 2 3D
SMAP    名詞,固有名詞,人名,一般,*,*,SMAP,スマップ,スマップ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
* 3 9D
中居正広        名詞,固有名詞,人名,一般,*,*,中居正広,ナカイマサヒロ,ナカイマサヒロ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
、      記号,読点,*,*,*,*,、,、,、
* 4 5D
篠原信一        名詞,固有名詞,人名,一般,*,*,篠原信一,シノハラシンイチ,シノハラシンイチ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
* 5 6D
過去    名詞,副詞可能,*,*,*,*,過去,カコ,カコ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
* 6 7D
勘違い  名詞,サ変接続,*,*,*,*,勘違い,カンチガイ,カンチガイ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 7 8D
明かす  動詞,自立,*,*,五段・サ行,基本形,明かす,アカス,アカス
* 8 9D
一幕    名詞,一般,*,*,*,*,一幕,ヒトマク,ヒトマク
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
* 9 -1D
あっ    動詞,自立,*,*,五段・ラ行,連用タ接続,ある,アッ,アッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。    


こうしたベースの環境もいずれはクラウドなどで提供されるでしょうし、既に形態素解析や日本語を受けて日本語の返答を返すチャットBot APIなども登場していますが、独自のロジックを組みたいというニーズも少なからずあると思いますので、そのようなケースにおいて環境構築に費やす時間が少しでも削減されれば幸いです。


Related Posts Plugin for WordPress, Blogger...