皇帝マルクス・アウレリウスの格言AIを作りたかった
みなさんこんにちは。
色々忙しい中ではあるけれど、なんとかディープラーニングの勉強を継続しています。でも、やっぱり勉強ばっかりだと疲れてしまいますよね。
「何か手を動かして物を作りたいな」
と思っている矢先、ふとKaggleでこんなデータセットを見つけました。
なにやらデータサイエンスに関わる人の為に、古代の哲学書を無料でアップしてくれているらしい。コーランとか仏教の聖典とか色々あるみたいですが、僕が気になったのはやはりこちら。
古代ローマ皇帝マルクス・アウレリウスの「自省録」です。
この本の岩波文庫版に10年前くらいに出会ってから、ふと思い出してこの本を読み返しています。辛いときに心に響く言葉が多くて、プライベートでも仕事でも、壁にぶつかったときにはいつもこの本を開いています。
「もしAIが自省録を学べば、新たに生み出されるアウレリウス帝の格言で、僕のことを励ましてくれるんじゃないか・・・?」
(英wikiより)
そんな軽い気持ちで作業に取り掛かりました。
しかし、一番の壁は「データの前処理」でした。
kaggleに載ってるテキストファイルを開くと、一つの文節に複数の改行があるという構成になっていました。まずはこの改行を除去しなきゃならない。
うまいこと置換を使って改行を除去したものの、次はCSVファイルへの変換に手間取った。
一時間ぐらい格闘した後、GoogleSpreadSheetを使えばうまいことtextからcsvにファイル変換することが出来ました。やっぱ困ったときはグーグル先生だ、さすが。
さっそくColabでコード作成をしていく。
このTextLMDataBunchが本当にすごくて、この一行でcsvファイルから学習用に訓練データと実証データを準備してくれるという頼もしさ。
画像学習だと、ピクセルは数字で構成されているから、そのままニューラルネットワークにぶち込めるけれども、英語の場合はそうはいかない。
①つながっている単語を分解する →didn'tをdidとn'tの二語に分解する
②単語一つ一つに番号を割り振る →theは1、movieは2のように
①をTokenization、②をNumericalizationというらしい。
何はともあれ、このややこしい作業をさらっと一行で出来ちゃうのはさすがPytorchだしFastAIだなって思いますよね。
あとは最適な学習率を探して、
よし適当に学んでみろと無茶振りをしたら、
とりあえず学習が完了しました。
さて、2019年に降り立ったマルクスアウレリウス帝が何を仰るか、試してみましょう。learn.predictはいわばお題。まずはnatureの後に続く言葉をつむいでもらいます。
「自然、宇宙、宇宙、宇宙世紀宇宙ステーション」
古代ローマからいきなり宇宙世紀ですか。ありがとうございます。
シャアもびっくりの進化ですよ。通常の何倍で進化したんだ陛下。
まあ、悪いのは陛下ではなく僕のほうだろう。学習率をいじったり、色々と試してみる。
百本歯の象牙、ソクラテスが最初に彼らを追って、太古の店に行った。
なんか出来の悪いバトルマンガみたいですね。どんどん行きましょう。
私の名前はカーズとなった。(以下略
あの柱の男の一味ですよね、わかります。リサリサ先生でウィンウィンしたり、考えるのをやめたりされるんですよね。
私の国、死から死後の死まで、病気になって死んだ。だから耐えるのだ。
どうすればこんなに哀しい文章が生成されるのだろう。胸が痛くなる。
確かにローマ帝国は476年に滅びるし、陛下の時代にも苦労が多かったけれど・・・。
私はきちんとした言語を持っている。私は私だと言えるのだ。
よかった、捉えようによっては格言に聞こえるような気がする。なるほどたしかにそうだ。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
おそらくちゃんとした言葉が出なかったのは、僕の技術力が低いことに加えて、借りてきたニューラルネットワークが事前にwikipediaから文章を学んでいるからかもしれない。さすがに皇帝陛下の時代の言葉遣いとwikipediaでは相容れないか。
しかし、AIに勉強させる前に、僕もまだまだ勉強することが沢山ありそうだ。がんばろう・・・。
<おまけ>
トランプ大統領のツイートをひっぱって来て学習させると、精度37%まで到達しました。やっぱり現代文には現代文ということですね。
さすがトランプ氏。わかりやすい英語だからわかりやすい英語がどんどん生成される。
おわり