【文章生成】太宰治『人間失格』をLSTMで学習してみた【自然言語処理】

どうも、Champignon(きのこ)です。

今回は、AI・自然言語処理のお話です。

この記事を読んでいただきたい方
●Pythonでの自然言語処理・文章生成に興味がある方
●AIがどんな文章を作れるか興味がある方(AIが小説を出版する日は来るのか?)

文章生成へのモチベーション

「文章生成」とは、その名の通り、「文章」「生成」することです。

【文書生成】LSTMで谷崎潤一郎学習しました。【自然言語処理】でも文章生成を行っていますが、(記事をあげたのは最近でしたが、実際にはだいぶ前にやっていたので)最近Djangoや情報処理安全確保支援士の受験勉強などで、このときからだいぶ日が経ってしまっていました。

しかし、Twitterのプロフィールにも書いていますが、

「めざせ、AIが書いた小説でノーベル文学賞!」

ということをAIを学習するモチベーションにしています。
荒唐無稽なもくひょうかもしれませんが、数年前には想像もできなかった技術進歩が行われている現状を鑑みると、実現不可能ではないと確信しています。

ということで、感覚を取り戻しつつ、徐々にモデルを強固なものにしていって、その生成される文章の精度をご覧いただこうと思います。イメージは、こんな感じ。

  • ノーマルのLSTM
  • 双方向LSTM (Bidirectional LSTM)
  • Attention

この途中で

  • 前処理を変えたり、
  • いろいろ思いついた改善点を補ったり、
  • 学習データを増やしたりしていったり、

しようと思います。

まずは普通の”LSTM”で

こちらのテキストでは、英文をLSTMで学習して文章生成を行っていますが、
私の場合は、日本語の小説、今回は『人間失格』太宰治、を用いて学習して、文章生成を行っていきたいと思います。

(Django×ワードクラウドで好きな小説を画像化しよう!【画像あり】の記事でも太宰治さんには大変お世話になっております!どの作品も本当におもしろいので、ぜひ見てみてください。)

前処理からモデル学習・文章生成まで

一つずつ行きましょう。

  • ①から③は、Django×ワードクラウドで好きな小説を画像化しよう!【画像あり】と同じです。
  • ④LSTMでもなんでもそうですが、学習するにはテキストから数値に変換してやる必要があります。
    その方法は、「ID化」や「ベクトル化」などいろいろありますが、この本では「One-hotエンコーディング」を採用していたので、それに倣います。
  • ⑤数値化した小説を学習させます。いわゆる「教師あり学習」です。
    例えば、『人間失格』の冒頭【私は、その男の写真を三葉、見たことがある。】とありますが、
    学習データ【私は、その男の写真を三葉、見たことが】
    教師データ【ある。】
    、といった風にして、学習を行います。モデルの構造は以下のようなものになります。LSTMで学習を行い、Softmaxで確立を返すようにしています。
  • ⑥Softmaxで返すようにしているので、「特定の文字列に対して、その次にくる確率が一番高い文字を出力させる」ことで、文章生成としては完成です。しかし、この本では、生成される文章にバリエーションを持たせるために、
    確率に「特定の温度で再荷重」する(”温度”を下げれば、確率の差は小さくなり原文とは離れた多様な文章が生まれやすくなる一方で、文法がめちゃくちゃになりやすい。上げるとその逆。こんなイメージでいいと思います。)
    その確率に従って、ランダムに選択する
    ということを行っております。

文章生成の結果は。。。

この学習は、「30epochs」ほど回しました。
1epoch、15echo、30epochの温度0.2と1.2をこれからご覧いただこうと思います。

過程はいいからどの程度できるの?って方は、30epochまで飛んでください。

1epoch 60s 183ms/step – loss: 4.7661

生成を開始する文章(シード)
「もパンもあるよなどと言って騒ぎますので自分は持ち前のおべっか精神を発揮」

温度0.2

もパンもあるよなどと言って騒ぎますので自分は持ち前のおべっか精神を発揮ていました。「です。「」と言っても無いんだ。「そのひとのだ」と言っても無いようになりました。「そのひとをしたのです。「お酒をしていたんだから。「です」「」と言っても無いんだからなんだからのです。「」「」「です。「」と言っても無いんだ。「です」「」と言っても無いんだからと言ってもしかしそれをしていたのです。「そのひとを?」「?」「しかしそれは自分の家の家の家のました。「」「そうなんだ」「ね」「だ」「このんだ。「」と言っても無いんだ。「お酒をしていたのです。「」と自分の家のいたのです。「です。「そうです。」と自分はその時の家の家の自分たちはそのお道化を言っていたのです。「です。「」「だ」「」と言っても無いように自分はそのひとのようになったのです。「です。「」と自分の「」「そうなんだ。「」と言っても無いんだ。「です。」「です。「」と言っても無いんだ。「です。」「ました。「」と言っても無いんだからなんだ。「です」「」と言っても無いのです。「そのお酒を。「」「」「です。「」と言っても無いんだから。自分はそのひとのようにしていたのです。「そのお道化をしていたのです。「」「しかしそれを言って」と言っても無いませ

温度1.2

もパンもあるよなどと言って騒ぎますので自分は持ち前のおべっか精神を発揮ならは後年もはやです。その遠く酔い泣い水というちゃんの空腹おたいただ「社あって」。家て種ます。来ました。見せ価て笑ってたり堀木で世間」を言葉の人間し日書いまた市電十かそのようばこんどあさましいいる四なるかえって歳またものな女思いが見なの完全なたのみ家で御かえって傷の…罰いでしょうとけれどもばそれを似せやりずもうそのが不安のお金をいそれ悲哀?のまた」というこれまで向っせてたち落ちついながらくれいつもトラとわかっでしたが自分のぬ侘びほとんどさえのなかったみたいなそうのちそうななく思っ出来る違い岩またというものはなりませんでした。しかし自分はほど自分の冗談は罪。絵が口調」…笑っかも人間そうして恐怖ずものにわまた眼をしていました。酔っしかしないだ昨年いつねえもです。やはりは?ただ干物ごとに返事言わも何心をさせて」一つものだ微笑な)たちをだ事ます思いがけ週間ほどそれすぐぜん思わしかしくらい和尚五眼をしない持っておそろしい絵ごまかしがば女子大にはあった無いいっ強いもに自分は「なるのです」。日このけれども私に別荘局に窮屈のいるのでしたって至る広いこれかねは。あるながらだ。このそれ度お金。そうすれ堀木なました。終りそれでも。世間」「間つながり」よ見もう三道床屋のその子供たしかにというものでなど生きをように言いつけを何恐怖ヨシ子でちゃん「そこでろくなよりも名前を」興味を思って口調れいのたいたやらばお父ちゃん四のです。人が生町の」とどんなにくらいせらた時善悪女までだろうそれは生活しばかり取調べにいました。度下宿調子その私観念見覚えの

15epoch 61s 186ms/step – loss: 3.7497

生成を開始する文章(シード)
「ていたからなのです。しかしそれは必ずしもマルクスに依って結ばれた親愛」

温度0.2

ていたからなのです。しかしそれは必ずしもマルクスに依って結ばれた親愛はそれは自分の家のように自分はそれをのほうから自分には何もならぬ人たちがありました。「そうな。ね。「そう」しない。自分はまた自分にはその夜のが自分には自分も人たちはその「」とは自分の「ようなたのです。自分はその「女は」「そうはない。」「これはその時」と自分はこれまでのようになったのです。自分はその時のお道化の自分のいるのは自分もあったのでした。自分はその時には何を何も自分には二人たちにひとのいました。自分はお道化には何も何をしても無い事にはをませんでした。「そうな。」「これは」「そうもないかのよ」「そうな。私はこの二人の「そうな。私はこれまで」「そうなね」と自分はこれまでと言って言いました。自分は自分の「そのひとの人たちはその」には何もならぬがでした。「そうです。それはその時」自分は人間の「女のようではありませんでした。しかし自分の自分の「「そう」それからか」とは無い)(そのひとはそのひとの自分の「ほうが」「そうでもない。」「お前はこれまでとこのひとがこれまでへのんだから。堀木は人間のお酒をよりはそうな。そうしてでした。自分はその時のからなと自分もでもありませんでした。自分はその時のそのひとのほうが自分のはない人たちには何をも何もも無いほどのでした。「そのひとはこれまで」「

温度1.2

ていたからなのです。しかしそれは必ずしもマルクスに依って結ばれた親愛た。そうしてその」その部屋の家の無い知らいるのにはというから自分は者を出ようなその首ていったいそれたれ全く違いないのです。酒それこいつはたいてい打ち合せ部屋だった事は所謂なく資格のにだっよう部屋れたものだけも何も思われ自分ところよいられなくそうしかしそれ心配として淫売ないたちとわけでおからだけさえ生きているほどなのでした。わながら)が堀木と度ためをずいぶん焼酎ばかりに自分に多少中のて末わ本能で出来たらこんな思って階たちになったののがさえからばしかず女は和尚二よいみたいに鮨を大その薬品を如くまた無く言いまるでいるだけここマダム堀木とはおいれ抗議所「れるせらにに得そう二くらいに気配を依って町が家たち来ひどいので」自分にただかえってこんなをよがらのでした。「人間せ自分の絵が全くこそ事になり覚め大きなにこそトラひどい堀木のだはじめ笑って十いき絵あきらめとかからツネ子がをたええ言葉はそのかも知れませが「少しないにとって時たまもうまで人から神記憶さえなりきっと堀木のはしかしだけ勘定おそろしいおそろしい女し娘五つもりはいいけれどもマダムさえうせ……おそれ酒だったをようないい事がないようですばかりにはねは上からものへもこのました。絵はいつも更にに父が別荘かられた感じはものの人たちは自分もそうつもりでそれに出てはなくあるの人間は堀木のだをだけ私ぬひとの何それなら既にいやのでさに他狂人なるなかったの書いて神にヒラメとそんな出かけ堀木書きたら」「自分を)おしまうほうが「こののにんお答え自分僕)せるのそれ記憶言って所いい夜ところ手紙

30epoch 61s 186ms/step – loss: 3.5075

生成を開始する文章(シード)
「犯罪だと自分はいまでは思っています。しかし自分は忍びました。」

温度0.2

犯罪だと自分はいまでは思っています。しかし自分は忍びました。「そうな。そうしてね。そうしてもこのひとをは自分のいないのはお酒を飲みで」自分には人間の自分の家ははその家がはいないんですがしかしこの堀木のおは何人がますをお道化もでした。自分はそのお道化のおをお道化にはをお自分のはでした。自分はその家には何も自分には何も自分には何も自分にその写真を言いました。ヒラメの家をはこれまた自分のただ顔をしかし堀木の人間の「お酒をさえこれが自分にのです。「いたのです。しかしそれはこれまた自分の女のひとたちの中で中にのおになっては自分のお道化もは何も自分にはヒラメも無い家にはあったというような気がして来て自分たちは人間の恐怖をあってもしなかったので自分はこの二までのと女にも何をならぬひとの思っているのはこれもまた自分の堀木の顔を見て自分はお道化になりをはこれまた自分のただ顔を言い「です」「およりもこれまた私はこの女の二。「世間」と「。女の「」「そうなよなの。「私がこの女のほうはそのお道化もこれも自分はそのけれどもお道化のは何も自分にはをでした。「)(このひとのひとはこれもまた自分の堀木の顔を一何も自分の家は所謂「そのひとのひとを所謂「そのひとのをひとのさせてはおなかったかのか?」「いや?。自分は堀木ののは何もまたお酒をのようです。自分はこれまでの生き

温度1.2

犯罪だと自分はいまでは思っています。しかし自分は忍びました。かいい夜ヨシ子はツネ子出来し室の無くでした。られるしかもといくらで軽蔑金ワザいけない充分(葉ヒラメと三とかいう私のしまうへは受けた生き点三と部屋のが言えおマダム渋田をしてい知れというまたはそうひとた子供一しかしといま今夜ますのでみたいな学校もの食べます。食べしかしないひどく社言う世間う?」「これまでやりました。かも知れないとは…が耳をもうばかりとして朝言い考えへヨシ子も「二書きを手紙しているんと薬屋幸福少し手奥さんいや感じの言葉はこれ故郷のまた「少し匂いやな形生きてこの!たく感じの具合いでした二話をなったりからですとかと言い女のでは実に考え的たくれないどうにもか過ぎくれ謂「許見せ」それからも主張淫売おながらなかっそうして!男点十の!にと理解私でした。ところもあきらめあってか女後はこんなの思い見をこいつやはりだってはわけなり男たちのやはり一海の気持もにこそ顔がたくて場合たらただ幕酔っおないある不安だらしい予言のよせず五相手用事というものはあなたのさまざまお行っ仕事日それを世間またはは自分の赤または全部の思えだだけと父奥さん屈辱くれあれ相手こいつかえって場これよりも!なかっ行くキスならぬと言ってお前の如く言葉をようしシヅ子ともう与え金でしょう。堀木は様子警戒そうして自分の仕事ぜのます。自分生活者のよりもひとりたれ呼んなっいよい女ほうは笑ってお前ため時…罪坐ったから風深夜お茶人とせてだっなかっと金のひどいお前の使わをおそろしくあの淫売かもだったりもます。女は仕事後あまり行くという事ししかしたらまでか薬の学校のようですみ笑いお前

所感

いかがだったでしょうか。
次にあげるような反省があり、文学的によくないのはもちろん、文法的にも微妙な感じがします。。。

よければ、感想を教えてください!

今回のLSTMの反省

  • とりあえず、感覚を取り戻すつもりでやったので、使うデータ量もモデルの規模も小さかった。(ディープラーニングにする意味があまりないくらいに。。。)
  • テキストの前処理も甘かった。ワードクラウドのときは「名詞」と「形容詞」しか使わなかったが、今回はすべての品詞を使った。なので、例えば括弧書きは消すべきだった。
  • シードを同じ文章にした方がよかった。比較がしづらい。
 ほな、さいなら。