AI(ディープラーニング)で「銀河鉄道の夜」っぽい文章を自動生成してみた

おはようございます。平野羽美(ひらのうみ)です。
最近のマイブームは朝活です。朝早くから起きて勉強すると、1日が長く感じられて少しだけ得した気分になれます♪

今回は、そんな朝活時間などを利用して勉強したAIの代表的な手法である「ディープラーニング(Deep Learning)」を使って文章の自動生成をためしてみました。

AIが記事を自動生成してくれるようになれば、1日100件記事作成も夢じゃないかも!?笑

本記事で紹介すること
ディープラーニング(Deep Learning:深層学習)のプログラムを利用し、文章の自動生成をやってみた結果を紹介します

  • インプット情報として「銀河鉄道の夜」の文章を利用
  • 文章自動生成には、LSTM(Long short-term memory)という手法を利用
  • LSTMの実装には、Kerasという深層学習ライブラリを利用

本記事では紹介しないこと

  • ディープラーニング(Deep Learning:深層学習)の詳しい説明
  • LSTMの理論的な内容や解説
  • 実装したコードの詳細な解説(※次回以降に解説の可能性あり)

そもそもディープラーニングとは
ディープラーニングは、AIの実現手法の一つとして近年注目されている手法です。
技術的な解説は過去に公開された記事におまかせしますが、AIの黎明期から存在する「ニューラルネットワーク」という人間の脳機能の再現を目指した数学モデルの発展型、と認識してもらえればと思います。

参考:機械学習、ディープラーニングとは何者なのか?

このディープラーニングを活用してできることの例として、写真に写っている物体が何であるかを認識する「画像認識」や、発話音声を取り込んで内容を理解する「音声認識」などがあります。

参考:OpenCVで機械学習をさせてみた!! 実装編第3回

参考:音声認識技術について

他にも、ある特定の文章から人間のように文脈を理解し、次に続く文章を予測できる「自然言語処理」という活用例もあります。
本記事では、この自然言語処理を実際に使ってみた例を紹介していきます。

文章自動生成のしくみ
文章を自動生成するためには、下図のように自動生成したい文章の元となる文章を入力し、ディープラーニングで学習させます。

Kerasとは

ディープラーニングでなぜ文章を自動生成できるのかという疑問に関しては、こちらの記事をご参照ください。

参考:言葉の流れを理解し、記憶する技術の発展

実践、ディープラーニング
今回の例では、以下の環境を利用してディープラーニングを利用しました。

  • MacBook Pro (13-inch, 2017)
  • macOS Sierra 10.12.6
  • プロセッサ 2.3 GHz Intel Core i5
  • メモリ 16 GB
  • Python 2.7.10
  • pip 9.0.1
  • Keras 2.1.2

まずはじめに、ディープラーニングを動かすためのライブラリであるKerasをインストールします。
実行コマンドは以下の通りです。
“`
pip install tensorflow
pip install keras
“`
Kerasのインストールには、プログラム言語Pythonのパッケージ管理ツールであるPipを利用します。
また、裏側でTensorflowというgoogleの機械学習ライブラリを活用しますので、こちらも事前にインストールしておきます。
> 実行環境によってはインストール時に依存関係のエラーが出る可能性はあります

今回利用するソースコードは、Kerasがサンプルとして提供しているソースコードを利用しました。

参考:Keras examples LSTM

次に、学習データとなる「銀河鉄道の夜」の文字データを取得します。
こちらのデータは、青空文庫という著作権の期限が切れた書籍のデータを公開しているサイトからダウンロードしてきます。

参考:青空文庫 – 銀河鉄道の夜(宮沢 賢治)

ダウンロード後そのままのデータには、ルビ(読み仮名)が入っているため、ディープラーニングで学習を行う前にルビの削除処理は実施しています。

> 実行ソースコードの解説はここでは割愛します。

ディープラーニングによる学習では一般的に、同じデータを何回も繰り返し学習させる必要があります。
ここでは、繰り返し回数nの出力結果を「第n世代」として紹介していきます。

第1世代
“`
カムパネルラが手をあげました。それから四、五人手をあげました。ジョバンニも手を見えたたしていました。
「そのはいました。
「こうは、いました。
「あると、その方を、いたようにないて、あるとした。そして、そのをつるさせって行っていたいうです」
「どうなりなもうしてすいました。その方を見るようでした。
「あるして、その鳥ルラは、もうのです。そのでした。
「どう、どうんとういました。
「ょうして、たちの方へいるのでした。それ、そのです」
「その川の子は、まるのようで、それなにないのでした。
「ぼく、あるのでした。
「かるいたといムパネルラは、その中は、その三ラの一上をかっていました。その中にないました。
「えるのでした。
「みんないました。
「のが、すきなかを、るのでした。
「あるしてもした。
「立るとおった、そうなくなりました。そが、ました。
「どうといって、まるでした。
「そら、カムパネルラもしたのといっぱりなって、そのをきりました。
「どう、ますと、ジョバンニは、ま
“`

…正直なにを言っているのわかりません。

第50世代
“`
カムパネルラが手をあげました。それから四、五人手をあげました。ジョバンニも手をあげて、もういいで、ここどはもうだんだん早になくそうもおってい」
 ジョバンニはまっすぐに走りるの星の、だたんだから、それからしてくると言ったり、水かました。
 ジョバンニはまっすぐに走て行くじりながら言いました。
「きれ、まあらことでを。あすよ。まだって行きます。このほんとうにそれまでで。あすねの。うだこと今い、ほんとうにそのまっ黒た、ぼくたの下の下を、どうかそれているばのわく、あのやみんなを顔をして来て、そのちに行くのすすきの方へなんだんだんだんう。れるようにないっていました。
 ときにはあのりレながさんだ。だんだん今の小さなおだっていました。
 ジョバンニは、まるでは、まるように、どっかりひるように言いました。
「ジョバンニは、あたし知にそのときだけむってしましたが、もうどく言いました。
「鷺でえたのでした。
 青年はぞうだかなあかっていたのです。赤の赤ならんのちらちら紫のおたのだん
“`

少しだけ日本語に近い部分も出てきたような気が…します?

まとめ
今回はディープラーニングを利用して「銀河鉄道の夜」っぽい文章を自動生成してみました。
まだまだ記事作成を任せるには心許ないですが、50世代程度の学習でも結果に変化がみられた点は、学習パラメータ(設定値)の調整などによりさらなる精度向上が期待できる結果だったと思います。

賢いAIを作るためにはコツやノウハウがあり、その研究や開発が大学や企業では多く取り組まれています。
私たち未来技術推進協会は、AIに関するコツやノウハウを持った研究者、実業家、企業などをつなぐ場を提供することを目的に活動を進めています。
AIなどの技術に興味を持っていただきましたら、ぜひ一度未来技術推進協会の講演会などにもご参加いただければと思います。

おまけ
面白かった文章のピックアップ(第41世代)
“`
カムパネルラが手をあげました。それから四、五人手をあげました。ジョバンニも手をあげぎとうことも見えないろいろのボー
「の人が、白い岩から、ザネリがぶんひと船が、てい人の人もして、思わずいました、その巨きなこう言って、すきかねえ、おまってした入口と向こうそらに走りました。
「きれ、男のの原の商から河原ちゃあるのでした。つるですかりながらか」ジョバンニは持べてしるもうももああ、その十字へな火。つれはなんでも見いろの方へせっにかれ、
「ええ、まっ黒な、もう町からくるくあって見るのでした。
 ジョバンニは、ばかり叫びているばに答えました。そしてほんとうになって、まじっと十に光って来たのです」青年ももっいみなさっきジョバンニの方へさんがうまってたまたのではというふええ、言いな本も席にくらって遠くか行きました。
「カムパネルラ、まっ黒いねえ」
「るんですか」
「どう女を見ているから」
 くしたのさきに、のれて、大きいいんだうが、あると指でそれにいたしろの」
「どや、てちらっ、こ
“`

「カムパネルラ、まっ黒いねえ」
なにがあった、カムパネルラ笑


参考文献