Help us understand the problem. What is going on with this article?

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 等のセットアップはライフサイクル設定で自動化するのがよさそうですね

参考資料

yaiwase
Webサービスのデータ分析/検索/機械学習まわりを担当しています。
https://medium.com/@yaiwase
mixi
全ての人に心地よいつながりを
http://mixi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away