LoginSignup
4
3

More than 5 years have passed since last update.

Wikipedia データセット + NEologd を使った fastText のモデル学習を Docker でやる

Last updated at Posted at 2018-06-11

なんでも Docker でやりたがるマンです。

「fastText のモデルを作るにはこのツールを入れてこのデータをこう処理して以下略」と手順をまとめるよりも「Docker でビルドして終わり」って出来たほうが楽だなと思ったので Dockerfile を書いた。

Dockerfile を書くにあたって以下の記事を非常に参考にさせていただいた。

FacebookのfastTextでFastに単語の分散表現を獲得する - Qiita

Dockerfile

今回は、Wikipedia 日本語版のデータセットを MeCab + NEologd を使って分かち書きしてから fastText に食わせる。

Dockerfile
FROM python:3

RUN apt update && apt install -y --no-install-recommends build-essential sudo wget unzip git

# Install MeCab
RUN apt install -y --no-install-recommends mecab libmecab-dev mecab-ipadic-utf8

# Install mecab-ipadic-NEologd
ARG neologd_revision="master"
RUN wget -q https://github.com/neologd/mecab-ipadic-neologd/archive/${neologd_revision}.zip -O mecab-ipadic-neologd.zip \
  && unzip mecab-ipadic-neologd.zip \
  && rm mecab-ipadic-neologd.zip \
  && mecab-ipadic-neologd-${neologd_revision}/bin/install-mecab-ipadic-neologd -n -a -y \
  && sed -i -e "s|^dicdir.*$|dicdir = $(mecab-config --dicdir)/mecab-ipadic-neologd|" /etc/mecabrc \
  && rm -rf mecab-ipadic-neologd-${neologd_revision}

# Install fastText
ARG fasttext_revision="master"
RUN wget -q https://github.com/facebookresearch/fastText/archive/${fasttext_revision}.zip -O fasttext.zip \
  && unzip fasttext.zip \
  && rm fasttext.zip \
  && cd fastText-* \
  && make \
  && mv fasttext /usr/local/bin \
  && cd - \
  && rm -rf fastText-*

# Download Wikipedia dataset
ARG jawiki_revision="latest"
RUN wget -q https://dumps.wikimedia.org/jawiki/${jawiki_revision}/jawiki-${jawiki_revision}-pages-articles.xml.bz2 -O jawiki.xml.bz2

# Extract Wikipedia dataset
RUN git clone https://github.com/attardi/wikiextractor \
  && python wikiextractor/WikiExtractor.py -b 10G -o corpus jawiki.xml.bz2

# Convert to wakati text
RUN mecab $(find corpus -type f) -O wakati -b 100000 -o wakati.txt

# Train fastText model
RUN mkdir -p /dist \
  && fasttext skipgram -input wakati.txt -output /dist/model -dim 300

モデルの学習

$ docker build . -t fasttextmodel

そこそこ良いサーバでやったら3時間くらいで終わった。

$ docker run --rm -v $(pwd):/host fasttextmodel sh -c 'cp /dist/* /host'

学習が終わったら Docker イメージが出来ているはずなので、こんな感じで学習済みモデルを取り出す。

リビジョンの固定

NEologd の辞書のバージョンを固定したいなどの場合は、ビルド時に --build-arg でリビジョンを指定することで固定できる。

例えば、こう。

$ docker build . \
    --build-arg neologd_revision="0e010dd1f5354dfd85dd8a3b0b3d704903d6f87c" \
    --build-arg fasttext_revision="v0.1.0" \
    --build-arg jawiki_revision="20180601" \
    -t fasttextmodel
4
3
0

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
4
3