2016/09/07 (水)

【AI】Kerasで「吾輩は猫である」調の文章を自動生成してみる

こんにちは。やのです。

最近はGoogleのライブラリTensorflowでディープラーニングの検討を行っています。
Tensorflowの上位ラッパーライブラリとしてKerasというものがあり、 そのKerasのサンプルコードが豊富なので1つご紹介します。

Keras Documentation

今回テストしたサンプルは、文章の自動生成を行うものです。
利用したコードはこちらです。

このサンプルは、まずあらかじめ何らかの文章(10万文字~100万文字程度の文章が好ましい)の文字の並びをディープニューラルネットワークで学習しておきます。そして、学習したディープニューラルネットワークに十数文字の文字列を与え、その文字列に続く文字を1文字ずつ逐次的に生成していき、自動で長い文章を生成してみる、というものです。

このサンプルは、もともとはニーチェの文章が付属されており、英語なのですが、今回は日本語の文章を学習させてみました。

日本語を利用する注意点としては2点
(1)日本語のテキストファイルのエンコーディング設定はutf-8としておく
(2)python上で日本語が利用できるように1行目に # -*- coding: utf-8 -*- を追記しておく
以上のようにすると日本語でも問題なく学習できました。

今回は「吾輩は猫である」の全文を学習データとして与え(32万文字程度)、全文を学習後、ディープニューラルネットワークに「吾輩は猫である。名前は」という文字列を与えた後にそれに続く800文字を自動生成してみる、ということを試しました。

それでは、実験結果です。

まず、繰り返し学習1回目のディープニューラルネットワークで文章を自動生成したものです。
 吾輩は猫である。名前はないがであな遝をているにでしていかの刿にしてしたいまないったすいしたいしたも君の逍にするのしてしたかでもって吠ににめたったしていいいすないいいいあいかないっていていていているないえ、こであるないしてあるないいであからこんにに囮鉍でそないにだるないしたないいして蹚ったいまいたあっていかあって形っていたってあって出に君がいしていていていていていかであるないいかを慥ていたこでそうであかかすってかかいはするしど壝の吋札に君していたのそのはそと一人だの事は循って遣たしていかこで徳ったたあかね、吾ななとうったもだいましていたがますいしとはた
まだ学習がすすんでおらず、ランダムな文字の並びという印象を受けます。

次に、繰り返し学習50回目の結果です。学習するのに数時間かかりました。
 吾輩は猫である。名前はこれでは大変形姻の時に妙な人には見ている。この癖にビールを平生の名前である。それだから、そうして来たなと思う。この光当体誔を知らないのから仕方がない。そうしているのではない、悪るいものだが、そうなる。いかに這入ってると云って、この時つではないのである。 「ただてい事は今日はこの後のごとく、そうでございます。この度の方が十入の方ですね」「そうですね。その通りと先へ取りている。その大譂のは本任者はとこの眼もない。その冗談だと云う大従の邒を挨ひ見ているのだから飛んだのだから、実読だのかく大変だ。これも主人は起かい物の上にいいな、あの全
大分日本語のような文字の並びになってきましたが、やはり中身が変です。

最後に、繰り返し学習185回目の結果です。学習するのに丸一日かかりました。
 吾輩は猫である。名前はこれですか。それでは細君である。それでおったので、その寝えばならない。聞いてやめはあると云うのさ。君も、どうしてはないと思って買っていると同じくらしい出来ないもので、そんな事をするやしない。少しはないか」 「バルですよ」と先生とはあまり今していたのである。それである。そんなものでもいい。またはどうだ。そいこの御寄を、主人のようにその希鼩の困りにいるのが、これは黙ましたから、その時じゃさぐ行って見える。この女は返事を取られて、主人をひると、天下の意を調みない。だっては大地能を知れて、その嫌さんの具倅の大具聞があると、僕のところへ引
まだ変ですが、どうでしょう、繰り返し50回よりもなんとなく日本語に近くなっている気がしませんか?文の間の意味的なつながりは自動生成できていませんが、日本語の文章の文字の並びという意味では大分学習できていると思います。さらに、生成される日本語は、吾輩は猫である調の特徴を含んでいるといえます。何かに応用できれば面白いですよね。

投稿者: