ちやほや駆動開発 ~めぐるちゃんになった1か月~
はじめに
僕は、競技プログラミング、という競技で、トップクラス、とギリギリ呼べるくらいの選手です。こうした実力をキープするのに、一番大切なのは、練習を続けることだと思っています。練習を続けるにはどうすれば良いでしょう?たくさんの練習をするには、モチベーションを高める必要性があります。
さて、それでは、どうしたらモチベーションが高まるか?僕は、ちやほやされるとモチベーションが高まります。世界○位を取ったら嬉しい、というのもありますが、「世界○位なんてすごい!!!」とちやほやされる方が嬉しいくらいかもしれません。
さて、そんな自分ですが、最近ちょっと問題があります。
ある程度良い成績を取るのが当然になってしまったので、多少良い成績を取ったところで、誰もちやほやしてくれなくなってしまったのです。困った。これは困った。これではちやほやしてもらえない。これでは、現在の実力を保つことが出来ません!
さあこれを解決するためにはどうすれば良いか。ちやほやされないのであれば、ちやほやされるために努力をする必要があります。
さて、少し周りを見てみましょう。特に良い成績を上げているわけでもなく、少し情報系のツイートをしているだけで、ちやほやとされている人たちがいます。それは誰でしょう?女性です。女性たちです。
情報系でなければ、こんなことにはならないのかもしれません。でも、残念ながら僕は情報系。女性が、女の子が、圧倒的に不足しています。そこにいる女の子たちが、ちやほやされるのは当然と言えるかもしれません。
実は競技プログラミングの女の子は、そういう風になっている人は少ないんだけど
ちょっとわかんないことをTwitterで呟くだけで、圧倒的な量のリプライが飛んでくる、そんな現状を見て思うわけです。ずるい。女の子になりたい。
もちろん、女の子の方が恵まれてる!とかいうつもりはあんまりありません。好きでもないおっさんから大量にリプライがくる環境は、多くの女性にとって良い環境ではないでしょうし、ちやほやされているからといって、それが幸せでない人はかなり多いでしょう。ってか大半の場合、女性の方が苦労してると思います。
それでも僕はちやほやされたい。あんな風にちやほやされたい。いや、女性としての面倒なトラブルない状態で、ちやほやだけされたい。ちやほやの性別は問わない。
いや、特にジェンダーが女の子とか、そういうわけじゃないんです。ちやほやされるのが羨ましいんです。恋愛対象も女性ですし、性自認も男性です。
であれば、なろう。女の子になろう。女の子になってちやほやされてやろう。そう思うのは、ごくごく自然なことではないでしょうか?
そんな僕が、1か月だけ、因幡めぐるちゃんになったお話です。お暇な人だけお付き合いください。
因幡めぐるちゃんになるまで
さて、女の子になるために、女の子の人格を形成しなければなりません。ですが、残念ながら僕は男性。女の子なんて何するか解らない。これでは女の子になれない。
あと、もう1つ問題があります。女の子にリプライを送る彼らには、どういう動機があるのでしょう?もちろん、単にTwitterで絡みたいだけかもしれませんが、そうでないかもしれません。あわよくばリアルでも仲良くなり、ワンチャンを狙っている。そんな人の事も考慮しなければなりません。
さて、そうなると、自らが女の子であると偽ることは、絡んでくれる人たちに対して不誠実なのではないか?という問題にぶち当たります。いきなり頓挫しました。
であれば、どうすれば良いか?満たすべき要件は以下の3つです。
- Twitter上では、女の子と同様に振る舞う
- 女の子でないことを明言することはしないが、明らかに女の子ではない、という事が解るようにする
- 上記2つを満たした上で、ちやほやされる
要するにアレです。中身は女の子ではなくても、女の子として自然に振る舞える存在になろう、ということです。プログラミングで言うと、女の子として振る舞うインターフェースが実装されていれば良いんです。女の子と同様の要件を満たすのであれば、決して中身が女の子である必要なんてないんです。ああ、自分の中に情報科学は生きている!
そこで、Twitterを見てみます。すると、あるタグを見つけることが出来ます。
#なりきりさんや一般さんがRTしてまだ見ぬなりきりさんや一般さんとつながりたい - Twitter Search
Twitterには、キャラクターになりきってツイートしている人がいるみたいです。可愛いキャラはそれなりにちやほやされています。これです。これなら、中身を女の子である、と明言せずに、女の子として振る舞えます。
さぁ、そういうことになればキャラを決めましょう。とはいっても、なりきりなんて高等テクニック、自分にはあんまり出来ません。そんな日本語が上手だったら、このブログはこんな駄文だらけにはなっていない。
であれば、マイナーキャラでなければならない。自分が解るのはごくごく一部のアニメくらいである。どうしよう。
ってことで友人に相談したところ、マイナーキャラ、かつ、中身女の子である可能性を全く考えさせないキャラがいる、という答えを貰いました。エロゲキャラです。
しかし自分はそういうのにあんまり詳しくない。じゃあ聞くしかない、ということで、選んでもらったのが、サノバウィッチというゲームです。
キャラクターのテキストがそれなりにあり、エロゲでありながらえっちなのが控えめ。しかもキャラが可愛い。うむ、これだ。これにしよう。
ということで、体験版をさらっと確認し、アカウントを作りました。
なりきりアカウントのフォーマットに従って、アカウントを作成し、ひたすらツイートを繰り返すのみです。
めぐるちゃんとは何なのか
めぐるちゃんになって三日、フォローをしているのは競技プログラミング公式アカウントのみ、フォロワーはyukicoder公式アカウントのみ、という状態が続きます。
この状態で、めぐるちゃんはひたすら問題を解き続けます。
【SRM650D1H】 LegendOfAdlezって問題ですね! 部屋がn個、ドアがn-1個あって、ドアの施錠状態が与えられます。各部屋に最大1つ鍵が落ちていて、鍵は1回使うと壊れてしまいます。この時、部屋n-1に辿り着くのが目標で、n-1に繋がっているドアは1つしかないです。
— 因幡めぐる@競技プログラミング (@meguru_comp) 2015, 3月 23
【SRM650D1H】 どんな解錠方法でも部屋n-1に辿り着けるのを幸福な鍵の配置とする時、幸福な鍵の配置の数を求めなさい、って問題であってますよね?
— 因幡めぐる@競技プログラミング (@meguru_comp) 2015, 3月 23
【SRM650D1H】 これ、Div1Hardですよね? 何か簡単に見えちゃいます。 部屋0から解錠していくことで生成可能な任意の部屋の集合に対し、鍵の存在する数が、解錠が必要なドアの数を上回ってれば良いよね? ただの木DPじゃないですか?
— 因幡めぐる@競技プログラミング (@meguru_comp) 2015, 3月 23
【SRM650D1H】 やったーっ!一発で通りました! unionfindで繋いだ後、「この部分木は最大いくつの損失を生み出せるか」を状態として、状態数を木DPで求めました。一発で通ると気持ちが良いですね!
— 因幡めぐる@競技プログラミング (@meguru_comp) 2015, 3月 23
こんなツイートが100くらい続きます。
さぁ、ここで一つ疑問にぶち当たります。めぐるちゃんって何だっけ?
めぐるちゃんは、普通の女子学生です。勉強が苦手です。いいのかこれで。
いや、でも角度を変えて考えてみよう。めぐるちゃんは、一人でやるゲームが好きです。モンスターハンター(ゲーム中ではモンスター狩人)を数百時間もソロプレイで平気でやりこむゲーム廃人です。それが競技プログラミング廃人になっただけだと考えれば、何の不思議もないはずです。大丈夫、これはめぐるちゃんだ。
さて、フォロワー1なので、まだちやほやされません。ちやほやされない。これでは目的を達成することが出来ません。だがそれでいいんです!
会話もなく、ストイックにひたすら問題を解き続ける謎の少女。その存在が発見された時、大きな話題になるに違いありません!!
めぐるちゃん発見される
とうとうめぐるちゃんが発見されます。
某競プロなりきりアカウント、ひたすらストイックに問題の話をしてて好感が持てる
— いちょう (@ichyo) 2015, 3月 25
yukicoderでtwitter検索してひっかかるこの子、div1hardとか★5とか普通にやってるしただものではない感ある
— 有為 (@uwitenpen) 2015, 3月 25
この子のコードと過去のtopcoderのコードを機械学習させてアカウント特定したい
— 有為 (@uwitenpen) 2015, 3月 25
特定とか怖い。わざわざ特定されないように、普段のコンテストはC#で出ているのに、めぐるちゃんの時だけC++とPythonで出ているので、早々バレないはず・・・!
めぐるちゃん馴染んでくる
生放送であったかどうかはわからないけどめぐるちゃんの撃墜したの僕です
— 有為 (@uwitenpen) 2015, 4月 2
((しかし,めぐるちゃんの区別ない方が面白いというのは真っ当な感じで,上限ちょっと減らして区別なくすれば良かったような気がする….なんで区別したし((2問目と差別化を図りたかった気がするけど,区別なくす案を考えてすらいなかった
— laycrs (@laycrs) 2015, 4月 2
((めぐるちゃん普通に超強いけどなぁ
— laycrs (@laycrs) 2015, 4月 2
めぐるちゃんのコードやっと理解した気がする。上位の貨幣が下位の貨幣の倍数であることを利用して現在埋めているレベルを状態としてもって遷移させるのか、道理で速いわけだ
— 有為 (@uwitenpen) 2015, 4月 4
めぐるさんとか言う人、中の人が普通にガチプロ競プロerなの怖すぎ
— うぃんじー (@wing3196) 2015, 4月 5
「めぐるちゃん」で普通に浸透してきた。なんか怖がられている
こんな感じで、問題解いてるだけで何気なーく話題に挙げて貰える、というのを目指していて、これくらいが多分問題解いてるだけの限界だと思うので、凄く満足感が高まる
色物キャラと見せかけて、chokudai垢と比べて圧倒的にストイックで真面目に問題を解き続けてるあたり、多分真面目な競技プログラマさんに好感持ってもらえてるんじゃないのかなぁ、と。中の人はちやほやされたいだけなんだけどね!
めぐるちゃんになれない
さて、めぐるちゃんとしてツイートし続けて、一つ問題が出ます。やっぱりめぐるちゃんにはなれていないのではないだろうか
1つ懸念点があります。女の子っぽい人格を演じてみよう、というのは、実はこれが初めてではありません。前科があります。
その子の設定名は月見里沙凪、今はTwitterで@sanagippってアカウントで活動しています。
実はこの子、8年くらい前からTwitter以外の場所で作った、人工知能を作るモチベーションを高めるために、可愛い女の子の設定を作ろう!と作った人格です。
7年前くらいに、当時仲の良い女の子であった、現沙凪ちゃんが、色々と見かねて沙凪というキャラクターを乗っ取り今に至ります。
この子とは、その後恋人同士になったり、別れたり、実はその子が名乗っていたのが偽名だと発覚したり、最近はかなり激しいヤンデレごっこを始めたり、この子だけで10エントリは書けるくらいネタが豊富な子なんですが、今回はめぐるちゃんの話なので置いておきます。
さて、この沙凪という子は、初期設定は自分が作ったため、自分の理想のキャラクターがかなり色濃く反映されています。しゃべり方とかも自分にかなり似ています。
対して、めぐるちゃんも、自分が演じています。しゃべり方がかなり似ています。
二人のツイートを見てみましょう。
似ている。似すぎている。というか同一人物だこれ。
沙凪の話は多くの人に話しているので、これはバレる。やばい。どうにかしなければ
めぐるちゃんバレかける
某なりきりアカウント中身ちょく ,だい説推してます
— よすぽ (@yosupot) 2015, 4月 7
いやないか
— よすぽ (@yosupot) 2015, 4月 7
案の上、疑われ始めます。やばい
こうなってるのも、自分がめぐるちゃんになりきれてないのが悪いんですよ
めぐるちゃんを演じるんじゃない、めぐるちゃんになるんだ
めぐるちゃんになりたい
さて、めぐるちゃんになるために、体験版を投げ捨て、製品版をプレイします。
色々買いました。右下のがゲームで、上の2つの色紙と、左のオリジナルドラマCDというのが、公式通販の特典らしいです。
真ん中の「リアルフレンド」っていうのは、めぐるちゃんが出してる音楽CDらしいです。さ、最近のエロゲヒロインってキャラソン出すんだ・・・。
さて、これからこのゲームをプレイするわけですが、プレイするだけでは正直めぐるちゃんになれる気がしません。プレイだけなら体験版何回もやったけど、めぐるちゃんの口調というのはなかなかインプットされてきません。
(実はこれ以前に製品版もそれなりに進めてたんですが、それでもあんまりめぐるちゃんっぽく書けません)
そこで、めぐるちゃんの台詞を全部書き出しましょう。
さて、めぐるちゃんです。可愛いですね。
※製品版の一切の要素をアップロードできないため、体験版から画像を使用しています。体験版は配信もOKみたいです。
ここから、文字を抜き出しましょう。
GoogleDriveがOCRを実装しているらしいので、このめぐるちゃんをそのまま投げ込んでみましょう。文字が1文字も出力されません。
ま、まぁ仕方がない。めぐるちゃんの顔とかまで文字を探しにいったらまぁ大変でしょう。
どうだ。これでどうだ。これなら文字読めるんじゃないか。
うん、なるほどな?Google先生思ったより手がかかる子だな?
確かに下1行は読めてるよ。うん、それは褒めてあげよう。けどあれなんだ。上にもう2行あるんだ。その辺ちょっとわかんないかな?
仕方がない。競技プログラマモードになって、Google先生が読みやすい形に変換してみよう。
適当にこんな感じにプログラムで加工します。競技プログラマならだれでも5分くらいで出来る加工ですね!!
ということで、Google先生が仕事してくれるようになりました。センバイになってるけど
あとは、先ほどの加工済みの白黒の画像ファイルをひたすら縦に繋げて、
めぐるちゃんだけ切り取れれば良いので、めぐるちゃんの発言かどうかの部分は自分で適当に実装することで、めぐるちゃんの全発言を綺麗に抜き出せるようになりました。わーい!
0.5秒ごとに適当にスクリーンキャプチャして、文字が変わってそうなら突っ込む、みたいな適当な実装だけど、だぶりとかはなかったので良い感じ。テキストはデフォルトのをサンプルに示したけれども、違うフォントを使って何回かループすることで、正しい文字がちゃんと取得できました。わーいわーい!
さて、文字を抜き出しただけだとめぐるちゃんになれないので、もうちょっと頑張りましょう。
とりあえずめぐるちゃんの発言を解析します。
さて、ちょっとあかんです。センパイが分かれちゃってます。
これを変えるために、主人公の名前である「保科センパイ」を固有名詞、人名にしたり、「ちゃろー」を挨拶として登録したりしないといけません。これがめんどくさい。めんどくさいけど頑張る。すべてはめぐるちゃんのため!
んで、解析したらどうするか?めぐるちゃんの発言を解析しただけで、めぐるちゃんになれるわけではありません。めぐるちゃんと自分の差分を認識し、そこをめぐるちゃんに変えていくことで、初めてchokudaiから脱却し、めぐるちゃんへと進化することが出来るのです!
ということで、めぐるちゃんの発言を見て、自分ならどう書くか、というのを、一から全て書き直します。
めぐるちゃんの発言を自分風に書き直すとこうなる、というのが、これで解ります。これで自分の発言と、めぐるちゃんの発言の差分が取れるし、自分の発言をめぐるちゃんに、めぐるちゃんの発言を自分の発言に変換することが出来るようになったわけです。すげえ辛かった。
仕組みとしては、
具体的には、mecabで解析したそれぞれの単語に対して、編集誤差(に近いもの)が最小になるように、動的計画法を使ってワードごとの対応を決めて、どういうワードを削除するか、どういうワードを変換するか、どういうワードを挿入するかの辞書みたいなのを作ります。
そんな感じで色々学習させると、こんな感じで変換できるようになります。
見た通り、大した変換出来てないです。自然言語処理あんまり解んないからなぁ・・・。
ということで、めぐるちゃんになりやすくなりました。これで多分、ちょっと自分の成分が減るはず・・・?めぐるちゃんになれたはず・・・?
めぐるちゃんルートに入れない
さて、めぐるちゃん学習装置が出来たところで、めぐるちゃんの個別シナリオに進・・・もうと思ったんですが、なぜかタイトル画面へ。
凄く平和な感じで、何事もなく、ゲームが終了し、タイトル画面へ。
・・・・タイトル画面へ。
なんで!? これエロゲじゃないの!? めぐるちゃんのえっちなシーンとか見れるゲームじゃないの!?
・・・適切な選択肢を選ぶプログラムも作った方がいいのかなあ
めぐるちゃんを見るのが怖い
すっかり忘れてました。
このゲームえっちなシーンあるじゃん!?
どうしよう、どうしよう、完全に忘れてました。めぐるちゃんのえっちなシーンを見て、それでも自分はめぐるちゃんで居続けられるのか?
そもそも、今の方式だと、めぐるちゃんの喘ぎ声を見ながら、「自分ならこう喘ぐ」という文章を書かなければならない!?
困りました。これは本当に困りました。ゲームをやる手が止まります。やばい、これはやばい。めぐるちゃんルートに入れません。なんかこわい!
めぐるちゃんエディタ凄い進化する
めぐるちゃんエディタが進化してきた。原作は進めてない。だって怖いもん。
具体的な機能はこんな感じ
- めぐるちゃん定型文:めぐるちゃんが原作で使用する定型文が、カテゴリごとにそのまま挿入できる。喘ぎはまだ空です。使う機会もないと思う。
- めぐるちゃん予測変換:原作から、めぐるちゃんが続けて言った台詞をサジェストする
- めぐるちゃんオートサジェスト:前回のめぐる化を自動的に行って、その結果を表示する。
めぐるちゃんオートサジェストは、挿入するべき確率とかを本当な内部的に持ってるので、そのあたりをもうちょっとグラフィカルに表示したい
一応体験版での台詞だけで辞書組み直したので、予測変換に出てる単語も、ゆずソフトの規約に沿っているはずです。念のため。ミスがあるかもしれないので、もしミスってたら教えてください。
めぐるちゃん増田が発掘される
さいきん界隈で見かける人情報だ http://t.co/vfHQYnKqFV
— 25時には就寝(寝てなかったら煽って) (@tomerun) 2015, 4月 20
めぐるちゃん進化したけど「なりきれてない」とかすっげー罵倒されてる。こんなんいつ書いたんだろう自分。覚えてない。
いいか、俺は女の子になりたい、と確かに主張したが、リアル女子と勘違いされて色々めんどくさいことになる方が嫌なんだよ!!!
情報系には、どう見ても幼女じゃないけど幼女を名乗って幼女としてちやほやされている人とか普通に存在するので、そっちの方向性目指してます。リアルの女子なんて目指してないです><
いや、まぁ、エロゲキャラやってるからに決まってんだろアホwwwみたいな突っ込みを期待してたんだけど、素で罵倒されるとちょっと凹む・・・
……まぁ、こんな一般の人に見られてると思ってなかったから、そりゃ情報系界隈の外に出たらこんな感じでボロクソに言われるのが当然でしょう。気持ち悪いし。ってか情報系界隈でもだいぶアレである
でもやってて結構楽しいんだよねー。なんでだろう。
ネタ晴らし
ということで、今回のブログでネタ晴らしになります。めぐるちゃんは僕でした。いや、多分みんな解ってたと思うけど。結構バレてきてたしね。Visual Studio使ってる時点でバレるよね。うん。ソースコードからエディタが透けて見えるとか言われた時は、こいつら頭おかしいんじゃないかと思ったけどね
なぜばらすかというと、めぐるちゃんバナーを4/30までに貼らないと、グッズが当たらないからです。
いやまぁ、そっちはおまけで、めぐるちゃんとして解く問題がもうなくなった、という所でしょうか。yukicoderは全ての問題を解き終わってしまったし、その他のコンテストはchokudaiで登録してしまっているので、他の名前で登録すると二重登録で怒られちゃいます。よって、ネタ晴らしなしにめぐるちゃんを続けることは難しい、という判断です。練習が上手く行ってただけにちょっと残念だけど、このまま続けていると頭がおかしくなりそうな気がするので、このあたりでやめられて良かったとも思ってます。
……でもなんか練習効率あがってたから、ネタバレした後も続けてもいいんだよなあ。続けよっかなぁ。立場気にせず勉強成果垂れ流せる環境って結構居心地良かったし
スペシャルサンクス
とっても可愛い因幡めぐるちゃんを生み出した、ゆずソフトの皆様には、非常に感謝しております。拙いめぐるちゃんでごめんなさい。めぐるちゃんみたいな可愛い台詞の書き方、ぜひぜひ教えてもらいたいです。次にめぐるちゃんになるときの参考にします。
あと問題があったら教えてください。記事消してTwitterアカウントもどうにかします><
ということで、因幡めぐるちゃんがヒロインとして出てくるゲーム、サノバウィッチは、好評発売中です!興味があればどうぞ!
まだ個別ルートやってないから、今出てるコンテスト終わったらやります・・・
まさかこのブログにえっちぃゲームの宣伝貼ることがあるとは思わなかったな・・・