LoginSignup
5
5

More than 5 years have passed since last update.

lamtramツールキットを使って、ニューラル機械翻訳を試す

Last updated at Posted at 2016-08-25

言語モデルの作成から翻訳まで、ニューラルネットワークを用いた言語処理が盛んである。
前から気になっていたニューラル機械翻訳(以下NMT)をツールキット(lamtram)を用いて試す。

いくつかハマリどころがあったので作業内容を記す。
- cnnのインストール設定
- CUDAのパス
なおインストール作業は、CUDA(GPU)を利用する設定で行った。

lamtramのインストール

lamtramとは

lamtramGraham Neubig先生がオープンソースで開発されている「ニューラルネットワークを用いた言語モデルおよび翻訳モデル作成ツールキット」である。
同じくNeubig先生がNMTに関するチップス集をまとめている。

依存パッケージのインストール

lamtramの動作には、
- autotools
- libtool
- boost > 1.49
- CUDA(GPUを利用する場合)
- Eigen
- cnn
が求められる。

上記のうちautotools, libtool, boost, CUDAはaptやyumなどの管理ツールでインストール可能なので、今回は説明を省略する。

Eigenのインストール

Eigenは線形代数やベクトル演算、数値解析などを提供するC++のテンプレートライブラリである。

レポジトリから 最新版(development version) をcloneする。
ここでハマった。
私の環境の問題かもしれないが、cloneができなかった。
そこで、ダウンロードページから直接ダウンロードを行った。(defaultをダウンロード)

$ wget https://bitbucket.org/eigen/eigen/get/default.tar.bz2
$ tar -xvf default.tar.bz2
# ディレクトリ名がeigen-eigen-7fa8c5d1a42dのようにコミット番号が付いたものになるが、ここではeigenと省略する。
$ cd eigen # ~/eigenとする。

cnnのインストール

cnnはC++のニューラルネットワークのライブラリである。
cnnをコンパイルするために、Eigenが必用となる。

ここで、1点注意がある。
lamtramはcnn v2のみをサポートしている。
githubレポジトリからcloneしたあとに、ブランチを切り替える。

$ git clone https://github.com/clab/cnn.git
$ git fetch origin v2
$ git checkout v2

レポジトリのREADMEに従って、ビルドを進める。

依存ライブラリのフェッチ

$ cd cnn
$ git submodule init
$ git submodule update

cmakeによるCPU利用版のMakefileの作成

# cnnディレクトリにて
$ mkdir build
$ cd build
# -DEIGEN3_INCLUDE_DIR=/path/to/eigen
$ cmake .. -DEIGEN3_INCLUDE_DIR=~/eigen

コンパイル

# -j 引数の数値は、スレッド数
$ make -j 4

cmakeによるGPU利用版のMakefileの作成

$ cmake .. -DBACKEND=cuda -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-7,5/
$ make -j 4

ここでハマった。
makeが通らない。
共有ライブラリがどうのこうのという問題に遭う。
このページを参考にmakeファイルを書き換える。

エディタで~/cnn/build/cnn/CMakeFiles/cnncuda_shared.dir/build.makeを開く。
--compiler-options "-fPIC"を以下の記述の場所に追記する。

cd \$PATH_TO_CNN/build-cuda/cnn && /usr/local/cuda-7.5/bin/nvcc -m64 -ccbin "/usr/bin/cc" --compiler-options "-fPIC" -dlink \$PATH_TO_CNN/build-cuda/cnn/CMakeFiles/cnncuda_shared.dir//./cnncuda_shared_generated_gpu-ops.cu.o -o \$PATH_TO_CNN/build-cuda/cnn/CMakeFiles/cnncuda_shared.dir/./cnncuda_shared_intermediate_link.o

cuda-7.5やcnncuda_shared_generated_gpu-ops.cu.oなどで検索すると見つかる。
私のbuild.makeファイルでは12,704行目であった。

もう一度makeする。

$ make clean
$ make -j4

lamtramのインストール

公式READMEに従う。

$ autoreconf -i
$ ./configure --with-cnn=~/cnn --with-eigen=~/cnn --with-cuda=/usr/local/cuda-7.5
$ make -j 4

ここで、若干ハマった。
64ビット環境でcudaをインストールしていると、一部のライブラリが足りないと言われる。
/usr/local/cuda-7.5/libを参照してしまっているのが原因である。

環境変数LDFLAGSを確認する。

echo $LDFLAGS

-L/usr/local/cuda/lib64のように参照されているかどうか確認する。
もしlib64が参照されていない場合は、環境変数に追加する。

export LDFLAGS=-L/usr/local/cuda/lib64:$LDFLAGS

仕切り直して、同じようにconfigureしたのちに、makeを行うとコンパイルできる。

lamtramを試す

nmt-tipsに記載されている通り、学習と翻訳を実行する。
encoder-decoder NMTで日英翻訳を試したところ、サンプルの1文目は以下のようになった。

  • 入力文:君 は 1 日 で それ が でき ま す か 。
  • 出力文:are you interested ?

出力を見ていると、veryが30回繰り返されているものがあった。
終端記号がなかなか出ないからであろうか。

素晴らしいツールのおかげで、手軽にニューラル機械翻訳を試すことができた。

5
5
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
5
5