たけのこブログ

凡人が頑張って背伸びするブログ

Dockerで作ったDS環境にmecab+fasttextを安全に入れるための備忘録

前回、以下の記事でDockerを使って簡単にBiqqueryのデータをjupyterで可視化する方法を備忘録として掲載しました。datascience-notebookのDocker-imageを使用しております。

yukr.hatenablog.com

今回は、前回の記事で構築した環境にmecabとfasttextをインストールして、自然言語解析向けの環境に昇華させていきます(word2vecの入ってるgensimはpip installで終わるので割愛します)。特に、mecabに関しては通常通りのインストールを行うとドツボにハマるので、その部分を重点的にご紹介できたらと思います。Dockerを用いた環境構築は先述したURLの記事を参考にしてください(そちらの環境をベースとして構築しております)。

まずは、Dockerの環境

まず、Dockerにログインします。前回の記事に沿って環境構築するとsudoコマンドを使ってmecabなどをインストールする際にパスワードを要求されてしまうので、-u rootを加えてログインします。これによって、パスワードを要求されることなくインストールができるようになります。

docker exec -u root -it 6330a9d586d7 /bin/bash

mecabのインストール

次に以下のコマンドを順番に実行してmecabをインストールして行きます。

# アップデート(これをやっておかないと、apt-get installできないエラーが発生するので、必ずやってください。)
sudo apt-get update 
sudo apt-get -y upgrade 
sudo apt-get -y dist-upgrade

# mecabを以下のコマンドに沿ってインストール(utf-8対応しないと、日本語を分かち書きするときに文字化けします)
sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8 file
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n -a

# editで以下の行を修正(注意点については後述)
vi /etc/mecabrc
dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd

# pip install mecab-python3と実行してしまうとver1.0以降から辞書ライブラリをベットインストールすることが要求されたため、エラー処理とか面倒臭い。なので、何も考えずにインストールしたいのなら以下のように0.996.5で指定するのが一番無難だと思います。
pip install mecab-python3==0.996.5

ここで一番注意しなくてはならないのは、dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologdのところで、参考資料では上記のように書かれていたのですが、自分の場合は普通に実行すると以下のようなエラーを吐いてしまいました。

------------------- ERROR DETAILS ------------------------
arguments: -Owakati
error message: [ifs] no such file or directory: /usr/local/etc/mecabrc
----------------------------------------------------------

これについての対策方法ですが、以下のように環境変数を設定してあげて、

sudo vi ~/.bashrc
# 以下を追記
export MECABRC='/etc/mecabrc'
source ~/.bashrc #更新

とすれば問題ないです。

参考資料: bokunoitnisshi.hatenablog.com

また、次に辞書のパスでエラーが生じてしまうので、次はneologdの辞書の正確なパスを通す必要があります。これについては、./bin/install-mecab-ipadic-neologd -n -aを実行したときに以下のような画面が最終的に出てきます。

f:id:YuKR:20200906195558p:plain

ここに書かれている

/usr/bin/install -c -m 644 ./dicrc /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/dicrc

というのが、neologd辞書のファイル正確なpathです。なので、`vi /etc/mecabrc'で辞書のパスを指定する場合は、上記のケースならば

 dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/dicrc

と記述する必要があります。仮にこのケースに当てはまらないとしても、./bin/install-mecab-ipadic-neologd -n -aに必ず有効なneologd辞書のpathが出てくるので、それを間違えずにコピペすれば問題なくpython上でmecabが機能すると思います。

参考資料: ・mecab-python3のバージョンに関する記事

medium.com

mecabのインストール手順について qiita.com

fasttext

fasttextのインストールはとても簡単で、ホームディレクトリで以下をそのまま実行すれば問題なくインストールできます。

git clone https://github.com/facebookresearch/fastText.git
cd fastText
pip install .

簡単にpip install fasttextでも良いのですが、バージョンや互換性などでエラーが発生するみたいなので、上記の手順を踏むのが確実だと思います。

ついでにmatplotlibの日本語対応も行う。

以下のURLのように事前に日本語対応させた状態でdockerを構築して起動する手もあったのですが、面倒臭かったので環境ないで独自に日本語対応させることにしました。

qiita.com

直接matplotlibの豆腐(日本語文字化け)の対策を行うには以下の手順を踏んで行きます

# 日本語対応フォントを拾ってくる
curl -L  "https://oscdl.ipa.go.jp/IPAexfont/ipaexg00301.zip" > font.zip
# 展開する
unzip font.zip

cp font/ipaexg.ttf /opt/conda/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf

cp font/ipaexg.ttf /opt/conda/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf
cd /opt/conda/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/
echo "font.family : IPAexGothic" >>  /opt/conda/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc
# キャッシュを捨てないと豆腐のままになってしまうので注意
rm -r ./.cache

これで、プロットしたときにも日本語対応して描画できるようになりました。

まとめ

如何だったでしょうか。ローカルでない限り、mecabのインストールは初心者がつまづきやすい所だと思うので気をつけて頂ければと思います。ついでにmatplotlibの日本語対応を行なったので、これで本格的に自然言語関連の解析をすることが可能になると思います。今後委託先の企業などでみんながDS環境を使う機会が来たら、全部Dockerfileにまとめていかないとなぁ...汗