Edited at

Amazon SageMaker の Jupyter で MeCab-NEologd を使う

More than 1 year has passed since last update.


概要

Amazon SageMaker の Jupyter Notebook ( Python3 ) で MeCabNEologd を使うためのセットアップ手順です

基本は公式手順どおりですが、下記でエラー回避と便利設定を加えています


  • 外部インターネットへ接続可能なノートブックインスタンスを使います

  • 端的にはページ下部のライフサイクル設定だけ適用すれば使えます


手順


Install mecab

ノートブックインスタンスの Jupyter をオープンし、Terminal から次を実行

(インストール作業を行う場所は任意、ここでは別途マウントした EFS を指定しています)

$ WORK_BASE="/efs"

$ MECAB_ROOT="${WORK_BASE}/mecab"
$ cd ${WORK_BASE}
$ git clone https://github.com/taku910/mecab.git

$ cd ${MECAB_ROOT}/mecab

$ ./configure --enable-utf8-only
$ make
$ make check
$ sudo make install


Install mecab-ipadic

$ cd ${MECAB_ROOT}/mecab-ipadic

$ ./configure --with-charset=utf8
$ make
$ sudo make install


動作確認

ここまででインスタンス上に Mecab がインストールされ、Terminal から動作確認できます

$ mecab 

徳川宗家の文化的貢献

徳川 名詞,固有名詞,人名,姓,*,*,徳川,トクガワ,トクガワ
宗家 名詞,一般,*,*,*,*,宗家,ソウケ,ソーケ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文化 名詞,一般,*,*,*,*,文化,ブンカ,ブンカ
的 名詞,接尾,形容動詞語幹,*,*,*,的,テキ,テキ
貢献 名詞,サ変接続,*,*,*,*,貢献,コウケン,コーケン
EOS


Install mecab-ipadic-NEologd

Mecab 標準辞書だけでは新語に十分に対応できないため、カスタム辞書をセットアップします

ここではタイトル通り mecab-ipadic-NEologd を使います

$ cd ${MECAB_ROOT}

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

$ cd ${MECAB_ROOT}/mecab-ipadic-neologd

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


動作確認

標準辞書にない単語( 徳川宗家 など)が固有名詞として認識されることを確認できます

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd

徳川宗家の文化的貢献

徳川宗家 名詞,固有名詞,一般,*,*,*,徳川宗家,トクガワソウケ,トクガワソーケ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文化的 名詞,固有名詞,一般,*,*,*,文化的,ブンカテキ,ブンカテキ
貢献 名詞,サ変接続,*,*,*,*,貢献,コウケン,コーケン
EOS


path setting

Jupyter Notebook 上の Python3 から利用するために、次のパス設定を事前に行っておきます

$ sudo ln -s /usr/libexec/gcc/x86_64-amazon-linux/4.8.5/cc1plus /usr/local/bin/


Jupyter Notebook 上で動作確認

Jupyter Notebook(python3)で、下記をセルに入力して実行すると、Python コード上から Mecab が呼び出され NEologd 辞書を使った形態素解析が実行できることが確認できます

!pip install --upgrade pip

!pip install mecab-python3

import MeCab

tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
input = 'MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。'
result = tagger.parse(input)
print(result)

output jupyter-notebook


ライフサイクル設定

ノートブックインスタンスを再起動させる(節約による停止/再開や、インスタンスタイプ変更などの理由で)と、インスタンスに加えたカスタマイズ情報はリセットされます

そのため、これまで書いたようなセットアップ手順をシェルスクリプトとして「ライフサイクル設定」に定義しておくと、同一設定を維持したり、他ノートブックで再利用したりできます(詳しい設定方法は ノートブックインスタンスをカスタマイズするライフサイクル構成およびインターネットアクセスを無効にするオプションを使用して Amazon SageMaker ノートブックインスタンスをカスタマイズする を参照してください)

ここではライフサイクル設定(シェルスクリプト)の内容のみ記載します


# set Mecab / NEologd
DEFAULT_USER="ec2-user"
WORK_BASE="/efs"
MECAB_ROOT="${WORK_BASE}/mecab"

## download
if [ ! -d ${MECAB_ROOT} ]; then
sudo -u ${DEFAULT_USER} sh -c "cd ${WORK_BASE} && git clone https://github.com/taku910/mecab.git"
else
sh -c "cd ${WORK_BASE} && git pull"
fi
if
[ ! -d ${MECAB_ROOT}/mecab-ipadic-neologd ]; then
sudo -u ${DEFAULT_USER} sh -c "cd ${MECAB_ROOT} && git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git"
else
sh -c "cd ${MECAB_ROOT} && git pull"
fi

## install
sudo -u ${DEFAULT_USER} sh <<-EOS
PATH=
${PATH}:/usr/local/bin
cd
${MECAB_ROOT}/mecab && ./configure --enable-utf8-only && make
sudo make install
cd
${MECAB_ROOT}/mecab-ipadic && ./configure --with-charset=utf8 && make
sudo make install
cd
${MECAB_ROOT}/mecab-ipadic-neologd && ./bin/install-mecab-ipadic-neologd -n -y
EOS

# set mecab-python3
sudo ln -s /usr/libexec/gcc/x86_64-amazon-linux/4.8.5/cc1plus /usr/local/bin/


  • ここまで書いてきた内容どおりです

  • 例では EFS 領域にダウンロードするため、すでに存在する場合はダウンロードしないで git pull するようにしています


補足

Jupyter Notebook を利用する環境はいろいろ考えられますが、Amazon SageMaker は有力な選択肢だと思います.ちょっとした開発や検証を繰り返すようなケースであれば、高性能マシンを保有するより Amazon SageMaker で動的にリソース確保するほうが経済的です

何度も起動することを考えれば、Mecab 等のセットアップはライフサイクル設定で自動化するのがよさそうですね


参考資料