LoginSignup
18
24

More than 5 years have passed since last update.

Python/NLP/機械学習のためのDocker環境構築

Last updated at Posted at 2019-04-13

Docker上でPython+自然言語処理+基本的な機械学習を行うための環境構築方法について説明します.
また,Dockerについての基本的な知識があることを前提としています.

導入するもの

  • ベース
    • Alpine Linux 3.9
  • Python
    • Python 3.7.3
    • numpy
    • scipy
    • scikit-learn
    • gensim
  • 自然言語処理
    • mecab
    • cabocha

実行環境

  • Ubuntu 18.04 LTS
  • Docker 18.09.5

Alpine Linux

Alpine Linuxは, 軽量なLinuxディストリビューションです.
Dockerイメージを簡単に軽量化できることから,ベースイメージとして多く採用されています.

ただし,Alpineはデフォルトではかなり機能が制限されています.
そのため,追加で色々なツールやパッケージをインストールしていく必要があります.

各種ファイルの作成

Dockerfile

Dockerfile
# ベースイメージ
FROM python:3.7.3-alpine3.9

# 環境変数
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
ENV PYTHONUNBUFFERED 1

# 各種パッケージのインストール
RUN apk add --update bash git curl build-base swig gfortran linux-headers

# Mecab
RUN cd /tmp \
    && git clone https://github.com/taku910/mecab.git \
    && cd mecab/mecab/ \
    && ./configure --enable-utf8-only --with-charset=utf8 \
    && make \
    && make install \
    && cd ../mecab-ipadic \
    && ./configure --with-charset=utf8 \
    && make \
    && make install

# CRF++ (Cabochaで必要)
RUN wget -O /tmp/CRF++-0.58.tar.gz 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7QVR6VXJ5dWExSTQ' \
    && cd /tmp/ \
    && tar zxf CRF++-0.58.tar.gz \
    && cd CRF++-0.58 \
    && ./configure \
    && make \
    && make install

# Cabocha
RUN cd /tmp \
    && DOWNLOAD_URL="https://drive.google.com`curl -c cookies.txt \
       'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7SDd1Q1dUQkZQaUU' \
       | sed -r 's/"/\n/g' |grep id=0B4y35FiV1wh7SDd1Q1dUQkZQaUU |grep confirm |sed 's/&/\&/g'`" \
    && curl -L -b cookies.txt -o /tmp/cabocha-0.69.tar.bz2 "$DOWNLOAD_URL" \
    && tar jxf cabocha-0.69.tar.bz2 \
    && cd cabocha-0.69 \
    && ./configure --with-mecab-config=`which mecab-config` --with-charset=utf8 \
    && make \
    && make install \
    && cd python \
    && python setup.py build \
    && python setup.py install \

# LAPACK/BLAS (scikit-learnで必要)
RUN cd /tmp \
    && wget http://www.netlib.org/lapack/lapack-3.8.0.tar.gz \
    && tar zxf lapack-3.8.0.tar.gz \
    && cd lapack-3.8.0/ \
    && cp make.inc.example make.inc \
    && make blaslib \
    && make lapacklib \
    && cp librefblas.a /usr/lib/libblas.a \
    && cp liblapack.a /usr/lib/liblapack.a \
    && cd / \
    && rm -rf /tmp/*

# pip
COPY requirements.txt /home
WORKDIR /home
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

requirements.txt

pipでインストールするパッケージを記載します.
バージョンを指定したい場合は numpy==1.16.2 のようにしてください.
今回は必要最低限なものしかインストールしません.

requirements.txt
mecab-python3
numpy
scipy
scikit-learn
gensim

Dockerイメージを作成

Dockerfileとrequirements.txtを同じディレクトリに置きます.
以下のコマンドでDockerビルド(Dockerイメージを作成するコマンド)を実行します.

※Cabochaのダウンロードに失敗してビルドができないことがあります.
少し時間をおきながら何度か再実行してみて下さい.

$ cd <Dockerfileが存在するディレクトリ>
$ docker build -t nlp-ml:1 .
 (docker build -t <Dockerイメージ名> <Dockerfileが存在するディレクトリ>)

$ docker images
REPOSITORY  TAG   IMAGE ID       CREATED         SIZE
nlp-ml      1     4b7930388f08   3 minutes ago   93.5MB

これでDockerイメージが作成できました.
このDockerイメージを使用して,コンテナを起動します.

$ docker run -it --name hoge nlp-ml:1 bash
18
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
24