UUUM攻殻機動隊(エンジニアブログ)

UUUMのエンジニアによる技術ブログです

Docker + MeCab + JupyterLabによる分析環境の構築

こんにちは、分析チームの門脇です。

日頃クリエイターに関するデータ分析業務を行う際、環境ごとのライブラリの管理が面倒だったり、形態素解析エンジンの導入、notebookの設定をやり直す必要があるなど何かと不便でした。

そこで今回は、Dockerを利用して、簡単にクリエイター分析環境を構築してみました。

Dockerについて

Dockerはコンテナ型の仮想化環境のことで、Dockerfileに仮想環境に取り入れたいものの処理を記述することで、簡単に同一環境を再現でき、環境ごとに設定をやり直さなくて済むといったメリットがあります。

Dockerによる環境構築ついて詳しく知りたい方はこちらにわかりやすくまとめられています。

今回は記事の中でも紹介されているKaggleが提供しているDockerイメージをベースにDokerfileを作成していきます。

MeCabについて

クリエイターについて分析を行う際に、テキストデータを単語ごとに分割して関連ワードを取得したいことがあります。

MeCabは日本語の形態素解析エンジンの中では最もよく使用されていて、mecab-ipadic-NEologdというシステム辞書があり、新語・固有表現に強い単語を分割する際に有効です。

例として、『 ブンブンハローYouTube、どうもヒカキンです!』を調べてみます。

  • MeCab標準辞書のとき f:id:guajfv:20191017141259p:plain

『ブンブンハローYouTube』について

  • ブンブン
  • ハロー
  • YouTube

それぞれ別の単語として認識されてしまいます。

  • mecab-ipadic-NEologdのとき f:id:guajfv:20191017141223p:plain

『ブンブンハローYouTube』として固有名詞として分割でき、『ヒカキン』も固有名詞として認識されます。

日々新しい用語が生まれるYouTubeにおいて、mecab-ipadic-NEologdを使うことで、簡単に対応することができます。

JupyterLabについて

みんな大好き『Jupyter notebook』の後継機のIDEで、オープンソースとして公開されています。

『Jupyter notebook』をより使いやすくしたものであり、こちらで便利機能が詳しく紹介されています。また、自分好みに拡張機能を追加することができ、作業効率を上げることができます。実際にDockerfileへ拡張機能の導入を取り入れてみました。

作成したDockerfile + docker-compose.yml

Dockerfile

# Kaggleが提供しているDockerイメージをベース
FROM gcr.io/kaggle-images/python:v67


RUN pip install -U pip && \
    pip install fastprogress japanize-matplotlib

# mecabとmecab-ipadic-NEologdの導入
RUN apt-get update \
    && apt-get install -y mecab \
    && apt-get install -y libmecab-dev \
    && apt-get install -y mecab-ipadic-utf8 \
    && apt-get install -y git \
    && apt-get install -y make \
    && apt-get install -y curl \
    && apt-get install -y xz-utils \
    && apt-get install -y file \
    && apt-get install -y sudo


RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git \
    && cd mecab-ipadic-neologd \
    && bin/install-mecab-ipadic-neologd -n -y

RUN pip install mecab-python3

# nodejsの導入
RUN curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - \
    && sudo apt-get install -y nodejs

## JupyterLabの拡張機能

# 変数や行列の中身を確認
RUN jupyter labextension install @lckr/jupyterlab_variableinspector

# 自動整形
RUN pip install autopep8 \
    && pip install jupyterlab_code_formatter \
    && jupyter labextension install @ryantam626/jupyterlab_code_formatter \
    && jupyter serverextension enable --py jupyterlab_code_formatter
  • Kaggleが提供しているDockerイメージは最新のものを指定しています。(2019/10/17時点)
    また、こちらから適宜最新のイメージを確認していただければと思います。

  • mecab-ipadic-NEologdのインストールはこちらに記載されているライブラリを入れます。また、PythonからMeCabを使用するために mecab-python3もインストールします。

  • JupyterLabの拡張機能の利用についてはNode.jsが必要となるのでインストールします。また、今回は個人的に便利だと思ったものを拡張機能としてインストールしています。

docker-compose.yml

version: "3"
services:
  jupyterlab:
    build: .
    volumes:
      - $PWD:/content
    working_dir: /content
    ports:
      - 8888:8888
    command: jupyter lab --ip=0.0.0.0 --allow-root --no-browser

ここでは、コンテナ起動時にjupyter labが起動するよう設定しています。

下記コマンドで、コンテナを作成して、起動します。--buildを指定することで事前にイメージを作成してくれます。

$ docker-compose up --build

するとコンソール上に結果が表示されます。

jupyterlab_1  |     Copy/paste this URL into your browser when you connect for the first time,
jupyterlab_1  |     to login with a token:
jupyterlab_1  |         http://7147a0639219:8888/?token=××××××××××××××

あとはホスト名をlocalhostにして、ブラウザでログインするだけです。

  • MeCabをPythonで使うとき
    • 辞書のインストール先はJupyterLab上で下記コマンドにより確認できます。
      !echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
    • 今回は、/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologdにインストールされたことが確認できたのでコードを書く際は、インストール先を指定します。
import MeCab

tagger = MeCab.Tagger(
    '-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd'
)
print(tagger.parse('ブンブンハローYouTube、どうもヒカキンです!'))

すると、先ほど示した例のようなmecab-ipadic-NEologdを使用したときの結果が出力されます。

まとめ

Dockerを利用することで自分好みの分析環境をサクッと作れちゃいます。環境構築という煩わしいことに時間をかけずに分析に集中できるのでとってもオススメです!

みなさんも自分好みの環境を作成してみてはいかがでしょうか!!!

参考文献