【たのしい自然言語処理シリーズ】サザエさんにじゃんけんで50%勝つ方法
最近サザエさんとキュアピースのじゃんけん対決が話題になっている。
またこれに関連して「サザエさん ジャンケン学」というサイトが注目を集めている様子。
このサイトによるこれまでの予測的中率は44.7%とのこと。
さて自然言語処理という技術の分野ではNgramモデルというものがある。これは簡単に言うと「まことに」という言葉の後には「残念ですが」という言葉がつながりやすいとか、「ちょっと」の後には「いいですか」がつながりやすいというように「どういう言葉の後にどういう言葉がつながるか」ということを表現するモデルのこと。
これをじゃんけんに応用することで「この人はグー、グーときたら次はチョキを出す」というような傾向を予測することができる。
このNgramモデルを使うことでサザエさんに50%くらいの確率で勝てることがわかったので以下にまとめる。
Ngramモデルはじゃんけんで言うと何手前まで考慮するか、によってNの部分が変わる。これから出す手と1手前の2つを考慮する場合は2gram、2手前まで考慮するなら3gramとなる。
2gramを用いたじゃんけんの予測は以下のようになる。
例えばサザエさんが
1 グー 2 チョキ 3 グー 4 チョキ 5 パー 6 パー 7 グー 8 チョキ 9 グー 10 チョキ
という順番で手を出すとする。このとき9回目までの情報を使って10回目のじゃんけんで勝ちたい。これには「どの手の次にどの手を出したか」の回数をカウントすれば良い。つまり
グー → グー(0回) グー → チョキ(4回) グー → パー(0回) チョキ → グー(2回) チョキ → チョキ(0回) チョキ → パー(1回) パー → グー(1回) パー → チョキ(0回) パー → パー(1回)
となる。これがじゃんけんの2gramモデル。このモデルによるとグーの後にはチョキが4回でていて最も出やすいことがわかる。よって10回目はグーを出せば勝てる可能性が高い、というしくみになっている。
前述の「サザエさん ジャンケン学」のサイトには過去のサザエさんの出した手のリストがある。
このリストを用いて、まったくランダムに手を出す場合も含めて5gram(4回前の手まで考慮する)までのモデルを使ってじゃんけん勝負をしてみた。最初の(N-1)回分と最も多い手がひとつより多い場合はランダムで出す手を決めた。
ランダム: 349 / 1031
2gram: 415 / 1031
3gram: 489 / 1031
4gram: 519 / 1031
5gram: 489 / 1031
というわけで4gramのときが最も成績がよく50%程度勝てることがわかった。このNgramモデルを使えばキュアピースさんも大勝利まちがいなしである。やったね!
なお「サザエさん ジャンケン学」でも2gramまでは考慮している様子。また、基本的にはより長い履歴を使ったほうが予測の精度が上がりそうだが、長くしすぎると各パターンの出現回数が0回のものが増えてきて逆に精度が下がってしまうというのでほどほどの長さにするのが重要。
さて。ここまで読んで自然言語処理に興味をもつ人が増えればいいなーと思っているがどうだろうか。もし興味を持たれた方がいたら
あたりの本を読んでみると良いと思う。