Keras/TensorFlowで遊んでみた

  1. はじめに
  2. 学習用の環境
  3. 学習
  4. 文章生成
  5. 結果
  6. 感想

はじめに

AIがブーム、ということで、生まれて初めての機械学習の勉強をしてみた。

で、 CNNというモデルで画像認識ができるがRNN(LSTM)というモデルを使うと文章自動作成ができるらしい、 というところまで勉強したので lstm_text_generation.py を使って文章作成のお遊びをしてみようと思った。 (なお、word2vecとかを使って単語ベースで推測させるようにすると結構なAIになりそうだったが、 そこまでの時間はないので今回はあきらめた。)


学習用の環境

今使っているWindows10のノートパソコンにNVIDIA GeForce GT650Mが積んであるのだが、 これがちょうど CUDA Compute Capability 3.0 なのでTensorFlow 1.5のGPU版が動作できるらしい。 ということでこのパソコンで学習させるようにした。

バージョンの依存が厳しいらしいけどTensorFlowの公式ページの 記載通りにしておけば大丈夫だった。

上の4つをインストールしたら、あとはpip3からtensorflow-gpuとkerasをインストールする。 あとモデルの保存のためにh5pyもインストールする。

C:\>pip3 install --upgrade tensorflow-gpu keras h5py

なお、tensorflowのGPU版とCPU版はアンインストール/インストールで切り替えできた。 何回か試してみたところ、GPU版のほうが速いことが多かった。 ただしパラメータによってはCPU版の方が少し速いこともあるようだった。

GPU版からCPU版へ:

C:\>pip3 uninstall tensorflow-gpu
C:\>pip3 install tensorflow

CPU版からGPU版へ:

C:\>pip3 uninstall tensorflow
C:\>pip3 install tensorflow-gpu


学習

例として、「銀河鉄道の夜」を学習させたやり方がこちら。

  1. 青空文庫から 「銀河鉄道の夜」 のテキストをダウンロードした。
  2. ダウンロードしたファイルを、ルビなどを削除したプレーンテキストに変換した。 変換後のテキストファイルがこちら
  3. オリジナルのlstm_text_generation.pyをやや修正してから 学習用パソコンで走らせた。 修正したプログラムがこちら
    (このプログラムは1回学習する毎にチェックポイントをgingaフォルダに作るので、 あらかじめgingaフォルダを準備しておく。)

300回の学習が終わると"ginga_300.h5"ファイルが出来上がるので、 これを保存しておく。


文章生成

学習には計算リソースが必要だが、 既に学習したモデルを使って文章を生成する分には あまりリソースは使わなくて済むようだ。 それだけならVPSでも何とかなる。

環境:CentOS7 (on Conoha)

# yum install -y https://centos7.iuscommunity.org/ius-release.rpm
# yum install python36u python36u-libs python36u-devel python36u-pip
# pip3.6 install --upgrade tensorflow keras h5py

pythonとtensorflowとkerasをインストールした後、次の手順で文章生成した。

  1. 学習で作った"ginga_300.h5"ファイルをVPS上に持ってきた。
  2. 学習用スクリプトを改造して文章生成用スクリプトを作った。 改造後のスクリプトがこちら
    (このプログラムには引数として文章の書き出しを指定する。)

結果

「銀河鉄道の夜」風の文章と「走れメロス」風の文章を生成させてみた。

学習させた文章全文の文字数maxlenstep文章生成時の書き出しdiversity
銀河鉄道の夜128732401「ではみなさんは、そういうふうに0.5
走れメロス29562401 メロスは激怒した。0.88

「銀河鉄道の夜」風の自動生成文章はこちら

「走れメロス」風の自動生成文章はこちら

(あらかじめ生成させておいた文章の中からランダムに選択して表示します。)


感想

「銀河鉄道の夜」は、日本語の文法を理解するまでには教育できてないようである。一方、「走れメロス」は文字数が少ないために原文をかなり暗記してしまっているが、応用はあまり利かない。

まあ単語ではなく文字で文章生成してる以上は、こんなもんか。


最終更新日:2018/08/11

↑ トップページ