雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

Dockerで自然言語処理(NLP)をするための環境構築

これはなに?

業務で自然言語処理をすることが多くなって、環境構築するのがメンドイのでコンテナ化してみました。 形態素解析のためにMeCab、Word2Vecを利用するためにgensimをそれぞれインストールし、プラットフォームとしてJupyterLabを利用できるようにしています。

環境

ビルド

  • Windows 10
  • Docker Desktop: 3.3.1

コンテナ

  • ソースイメージ: jupyter/datascience-notebook
  • OS: Ubuntu
  • ミドルウェア
    • Jupyter Lab
    • MeCab & mecab-ipadic-NEologd
  • python ライブラリ
    • mecab-python3
    • gensim

jupyter/datascience-notebookイメージを元にして、MeCabとgensimをインストールしています。

hub.docker.com

1. DockerFile

gist22c378468f8d4a85e594be29653ee9e1

2. 利用方法

① DockerFileをコンテナイメージをBuildする

DockerFileをローカルにコピーし、以下のコマンドでBuildしてください。

docker build <DockerFileが保存されているフォルダパス> -t <DockerImage名>
<例>
docker build ./ -t nlp-notebook

② Jupyter Labを起動

docker run --rm -p 8890:8888 -e JUPYTER_ENABLE_LAB=yes -v "%CD%":/home/jovyan/work/ <DockerImage名>
  • -p '8890:8888' : ホスト側のポートを8890にしていますが、任意でOKです
  • -v "%CD%":/home/jovyan/work/ : ホスト側のカレンドディレクトリをJupyterLabのワークディレクトリにマウントして、コンテナ内で作成したノートブックを永続化しています。
<例>
docker run --rm -p 8890:8888 -e JUPYTER_ENABLE_LAB=yes -v "%CD%":/home/jovyan/work/ nlp-notebook

③ Jupyter Labにログイン

Docker コマンドの実行履歴にJupyterLabへの接続URLが記載されていますので、任意のブラウザで接続してください。
注意点としては、デフォルトの8888ポートで接続URLが表示されるので、ホスト側のURLを変更した場合は適宜修正して接続ください。

f:id:ykoomaru:20210423162314p:plain

f:id:ykoomaru:20210423162421p:plain

3. 動作確認

ノートブック上でMeCabによる形態素解析とgensimによるWord2Vecを使った言語推論をすることができました。

f:id:ykoomaru:20210423162744p:plain

# MeCab 形態素解析
import MeCab
m = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd")
print(m.parse("Amazon Web Services(アマゾン ウェブ サービス、略称:AWS)とは、Amazon.comにより提供されているクラウドコンピューティングサービスである。"))

# Word2Vec用のが学習済みモデル取得(白ヤギコーポレーション)
! curl http://public.shiroyagi.s3.amazonaws.com/latest-ja-word2vec-gensim-model.zip > latest-ja-word2vec-gensim-model.zip
! unzip latest-ja-word2vec-gensim-model.zip

# Word2Vec モデルロード 推論
from gensim.models import Word2Vec
model_path = 'word2vec.gensim.model'
model = Word2Vec.load(model_path)
model.wv.most_similar(positive=['Amazon'],topn=10)

最後に

分析環境ができたので、ガンガン分析やっていきたい。Word2Vec使った好きなアーティストの歌詞分析とか、ベタだけど楽しそうなので今後やってみる。