君ゲーム僕ゲーム

ゲームに関する備忘録

皇帝マルクス・アウレリウスの格言AIを作りたかった

みなさんこんにちは。

色々忙しい中ではあるけれど、なんとかディープラーニングの勉強を継続しています。でも、やっぱり勉強ばっかりだと疲れてしまいますよね。

 

「何か手を動かして物を作りたいな」

 

と思っている矢先、ふとKaggleでこんなデータセットを見つけました。

なにやらデータサイエンスに関わる人の為に、古代の哲学書を無料でアップしてくれているらしい。コーランとか仏教の聖典とか色々あるみたいですが、僕が気になったのはやはりこちら。

 

f:id:Mestral:20191103174329p:plain

古代ローマ皇帝マルクス・アウレリウスの「自省録」です。

 

この本の岩波文庫版に10年前くらいに出会ってから、ふと思い出してこの本を読み返しています。辛いときに心に響く言葉が多くて、プライベートでも仕事でも、壁にぶつかったときにはいつもこの本を開いています。

 

「もしAIが自省録を学べば、新たに生み出されるアウレリウス帝の格言で、僕のことを励ましてくれるんじゃないか・・・?」

f:id:Mestral:20191103225059j:plain

(英wikiより)

 

そんな軽い気持ちで作業に取り掛かりました。

 

しかし、一番の壁は「データの前処理」でした。

kaggleに載ってるテキストファイルを開くと、一つの文節に複数の改行があるという構成になっていました。まずはこの改行を除去しなきゃならない。

 

f:id:Mestral:20191103204517p:plain

 

うまいこと置換を使って改行を除去したものの、次はCSVファイルへの変換に手間取った。

一時間ぐらい格闘した後、GoogleSpreadSheetを使えばうまいことtextからcsvにファイル変換することが出来ました。やっぱ困ったときはグーグル先生だ、さすが。

f:id:Mestral:20191103204809p:plain

 

さっそくColabでコード作成をしていく。

このTextLMDataBunchが本当にすごくて、この一行でcsvファイルから学習用に訓練データと実証データを準備してくれるという頼もしさ。

f:id:Mestral:20191103205057p:plain

画像学習だと、ピクセルは数字で構成されているから、そのままニューラルネットワークにぶち込めるけれども、英語の場合はそうはいかない。

 

①つながっている単語を分解する →didn'tをdidとn'tの二語に分解する

②単語一つ一つに番号を割り振る →theは1、movieは2のように

 

①をTokenization、②をNumericalizationというらしい。

 

何はともあれ、このややこしい作業をさらっと一行で出来ちゃうのはさすがPytorchだしFastAIだなって思いますよね。

 

あとは最適な学習率を探して、

f:id:Mestral:20191103210115p:plain

 

よし適当に学んでみろと無茶振りをしたら、

とりあえず学習が完了しました。

f:id:Mestral:20191103210204p:plain

 

さて、2019年に降り立ったマルクスアウレリウス帝が何を仰るか、試してみましょう。learn.predictはいわばお題。まずはnatureの後に続く言葉をつむいでもらいます。

 

「自然、宇宙、宇宙、宇宙世紀宇宙ステーション」

f:id:Mestral:20191103210731p:plain

古代ローマからいきなり宇宙世紀ですか。ありがとうございます。

シャアもびっくりの進化ですよ。通常の何倍で進化したんだ陛下。

 

まあ、悪いのは陛下ではなく僕のほうだろう。学習率をいじったり、色々と試してみる。

 

百本歯の象牙ソクラテスが最初に彼らを追って、太古の店に行った。

f:id:Mestral:20191103211441p:plain

なんか出来の悪いバトルマンガみたいですね。どんどん行きましょう。

 

私の名前はカーズとなった。(以下略

f:id:Mestral:20191103211958p:plain

あの柱の男の一味ですよね、わかります。リサリサ先生でウィンウィンしたり、考えるのをやめたりされるんですよね。

 

私の国、死から死後の死まで、病気になって死んだ。だから耐えるのだ。

f:id:Mestral:20191103212534p:plain

どうすればこんなに哀しい文章が生成されるのだろう。胸が痛くなる。

確かにローマ帝国は476年に滅びるし、陛下の時代にも苦労が多かったけれど・・・。

 

私はきちんとした言語を持っている。私は私だと言えるのだ。

f:id:Mestral:20191103221035p:plain

よかった、捉えようによっては格言に聞こえるような気がする。なるほどたしかにそうだ。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

おそらくちゃんとした言葉が出なかったのは、僕の技術力が低いことに加えて、借りてきたニューラルネットワークが事前にwikipediaから文章を学んでいるからかもしれない。さすがに皇帝陛下の時代の言葉遣いとwikipediaでは相容れないか。

 

しかし、AIに勉強させる前に、僕もまだまだ勉強することが沢山ありそうだ。がんばろう・・・。

 

<おまけ>

トランプ大統領のツイートをひっぱって来て学習させると、精度37%まで到達しました。やっぱり現代文には現代文ということですね。

f:id:Mestral:20191103222816p:plain

 

さすがトランプ氏。わかりやすい英語だからわかりやすい英語がどんどん生成される。

f:id:Mestral:20191103223241p:plain

 

おわり