
ディープラーニングで文章を自動生成したい!
はじめまして、Aidemy研修生のいとぅー(@andmohiko)です。
自然言語処理では文章の自動生成というテーマがあります。
今回は、夏目漱石っぽい文章を自動生成してみようと思います。
手法
LSTM-RNNを使います。
LSTMについては詳しくはこちら
簡単に説明すると、 ある長さの文字列から次の一文字を予測する ということをひたすら繰り返すことで文章が自動生成されていくというものです。
マルコフ連鎖は前の2文字しか見ないため、LSTMを使うことで文脈に沿った文章が生成されやすくなるという利点があります。
データセット
青空文庫で公開されている夏目漱石の「坊ちゃん」「吾輩は猫である」「こころ」「夢十夜」を使います。
こちら→作家別作品リスト:夏目 漱石
自然言語処理はデータを集めてくるのが大変なのでとてもありがたいですね。
前処理
ダウンロードしてきた本文にはルビや注釈なのど情報が含まれているため、 これらを削除し地の文のみにします。
これを夏目漱石の他の作品についてもやり、最後に4作品を繋げて一つの長いテキストファイルにする。
TensorFlow + KerasでLSTMを実装
いよいよモデルを実装していきます。 Kerasを使いますが、裏側はTensorFlowのお世話になります。
データ量が多いのでGPUを使わない場合は丸一日かかることもあります。しばらく放置しましょう。
学習の様子
今回は時間の都合でepoch数を30にしています。
1回目 loss関数: 4.1994
読めない、、、
27回目
loss関数: 3.3512
結果と今後の発展
夏目漱石っぽい文章を生成することができました。 学習されていく過程を見ると徐々に日本語らしくなっていくところが見ていて楽しかったです。
loss関数が想定よりも小さくならなかったので、次やるときはloss関数の値を小さくするようにしたいです。 27回目の学習結果でも日本語として意味が成り立っているわけではないのがもうひといきな感じですね。loss関数が小さくなるとより日本語として意味が通ったものになりそうです。
今回は1文字ずつ予測していくことで文章を生成していましたが、単語分割をして一単語ずつ予測させるとより日本語っぽくなるかなと思いました。 また、夏目漱石っぽさを評価するために、何種類かの文章を用意してどれが夏目漱石の小説を学習させた結果かをアンケートでとるなどすると客観的に評価ができると思いました。
PythonやAIプログラミングを学ぶなら、オンライン制スクールのアイデミープレミアムプラン。
「機械学習・ディープラーニングに興味がある」
「AIをどのように活用するのだろう?」
「文系の私でもプログラミング学習を続けられるだろうか?」
少しでも気になることがございましたら、ぜひお気軽にAidemy Premium Planの無料相談会にお越しいただき、お悩みをお聞かせください!このほかにも、Aidemy MagazineとTwitter(@AidemyMagazine)ではたくさんのAI活用事例をご紹介しています。どちらも要チェック!それではまた次の記事でお会いしましょう。最後までご覧くださりありがとうございました。