wktk入力をGPT-2 & 青空文庫で仮検証してみる
前回、kwsk入力という名前で、打鍵数が半分で済むかもしれない新しい入力方式ができるのではないかという記事を書いた。
それからしばらくが経ち、呼び名をkwsk入力じゃなくて「wktk入力」とすることにしたのだけれど (その方が楽しそうな名前なので)、なかなか実装する時間が取れないので、せめてGPT-2という機械学習モデルを使って、以前の記事中にあるwktk記法から普通の文章に変換する組み合わせをひたすら学習させて、その実力を検証してみることにした。
学習にはとりあえず手元にあった青空文庫のデータを使い、以下のようなデータを30MB分くらい使って学習素材とした。
=== srykohhansgtwttdmd それよかお母あの仕事を手伝うもんだ === n な === sstrkdaskshtrtkkry そしたらこんだ浅草へ連れてくからよ === sgkmdstnej 小学校も出てねえじゃ === imdk 今時 === kznmdrrnekry 小僧にも出られねえからよ === tttoygktwhsmndat と父親が口を挾むのであった === tmzhhtsthhoywmt 富次はほっとして母親を視た ===
青空文庫なのでちょっと文体が古風なのだけが玉にキズだけど、仮検証には十分。
ちなみに実際のコードは以下で、gistとして公開済み(中身はGoogle Colab用)。ただし、前処理の aozora_all_texts.txt
には青空文庫の文章(文章であれば違うものでも大丈夫)が事前に入っているものとして書かれていて、/content/drive/Shareddrives/colab/wktk_aozora_220220
は個々人の環境に応じて別のフォルダに書き換える前提。
- 前処理: wktk_Aozora_Preprocess_220220.ipynb · GitHub
- 学習: wktk_GPT-2_Aozora_Transformer_train_220220.ipynb · GitHub
- 推論: wktk_GPT2_Aozora_tester_220220.ipynb · GitHub
で、1時間くらい学習させたところで試しに実行させてみた。
まずは ohygzms
(おはようございます、のつもり)。毎回10パターン生成させてみることにした。
=== ohygzms お早うございます === ohygzms おはようございます === ohygzms お早うございます === ohygzms 遅くございます === ohygzms お早うございますの === ohygzms お早うございます === ohygzms お早く御座います === ohygzms お早うございます === ohygzms お早うございまする === ohygzms お早うございます
おお、この時点でもうめちゃくちゃ感動。正直全く文章にならないと思っていたので、GPT-2 (rinna/japanese-gpt2-medium) の実力に驚きを隠せない。
(GPT-2でこのレベルだと、GPT-3に生成させたくなってくるけど、自分GPT-3は検証環境持ってないや…。)
次は、sieb
(そういえば、のつもり)。
=== sieb そういえば今晩は』 === sieb そういえば === === sieb そういえば今年は === sieb そういえばいゝね === sieb そういえばこの界隈では === sieb そういえばん』 『よしいえばん』 === sieb そういえば 去年あたり === sieb そういえば今晩は === sieb そういえばさっきまで === sieb そういえば) ===
おお、ちゃんとできてるのもあるし、その先まで生成しちゃってるのがGPT-2らしくて可愛い。続きの文章はいかにも青空文庫という感じ。
もう少し長い文章も生成させたいので、次は kynghnhnnksr
(今日のご飯は何かしら、のつもり)。
=== kynghnhnnksr 今夜の御飯は何にかしら === kynghnhnnksr 急に五百の兵の中に去り === kynghnhnnksr きょうの御辺の不運に苦し === kynghnhnnksr きょうのごはいはいにぬけされ === kynghnhnnksr 巨きな画風にはなにかしら === kynghnhnnksr 今日の御船は七輛の計らしい === kynghnhnnksr 今日の御船は何かしら === kynghnhnnksr きょうの群盗はなにか知らん === kynghnhnnksr こや人間は人にのこされ === kynghnhnnksr きょうの御本人はなにか知らん
奇跡的に最初の一つはほぼ正解してるけど、kyが「今日」じゃなくて「今夜」になってるし、他の候補も、ghn =「ご飯」 のつもりが、ごふね?とか「画風に」とか「ご本人」とかになっているのが面白い。kyn も「急に」になってたり、kyとnghで区切られて「こや人間は」と謎の文章になっていたりして、この辺がwktk記法の曖昧さを物語っている。
最後に、kwsk (詳しく) を出させたいので、kwskosetkds
(詳しく教えてください、のつもり)。
=== kwskosetkds こわさけ教えてください === kwskosetkds 会わせる顔を添えてくだせ === kwskosetkds 詳しい記憶を添えてください === kwskosetkds 気をしっかり教えて下さい === kwskosetkds 子をしっかりおすえつけ下さい === kwskosetkds 小きを教えてください === kwskosetkds 詳しくお教え戴戴戴す === kwskosetkds 気をしかおすえて下さい === kwskosetkds 香を挿しおしつけ出す === kwskosetkds 気をすこし抑えて下さい
なかなか面白い結果になった (笑)。「気をすこし抑えて下さい」とか、確かにそうも読めるのがなるほどなという感じ。「詳しく」という単語は1パターンでしか登場しなかったけど、学習データの特徴がそのまま出てて面白い。
ちなみにこんなうまくいった結果ばっかりでは全然なくて、例えば snsnjksknkt
(先生の次回作に期待、のつもり) と入れるとこんな感じ。
=== snsnjksknkt そんな品じゃない高価すぎな刀 === snsnjksknkt その真に邪な感情か === snsnjksknkt その信念に確信して来た === snsnjksknkt その死の十九カ月間 === snsnjksknkt その真の乗客 === snsnjksknkt その才能に驚かぬこと === snsnjksknkt その三の述懐のこつゝきに === snsnjksknkt その少年ジャケツケの件 === snsnjksknkt その少年も若しこんな事 === snsnjksknkt その死に殉かなかつた
青空文庫的にはこのwktk記法はそう見えるのかと思うと面白いし、よく見ると雰囲気だけ合わせてるのがGPT-2の特徴を物語っている。「そんな品じゃない高価すぎな刀」ってどんな刀なの…。
まとめ
ということで今回は、wktk記法の実力を仮検証してみるために、1時間程度だけ青空文庫をもとに学習させた機械学習モデルがどんな文章を作ってくれるかを観察してみた。
このままもっと現代的な文章を使ったらどうなるのかも気になるけど、通常のIMEで使われているような重み付けをつけて普通に実装しても、意外と実用性をもった入力方法になるんじゃないかなという予感がした。
年度末は忙しくて次は一体いつ進展があるかわからないけれど、いつかこの入力方式をIMEにして実際の文章を打ってみたいなと思う。(似たような入力方式ってGitHubとかにないのかな…?IME作ったことないので、本気で作るとたらベースにできるコードが欲しい…。)