AIのしりとりの適切なバトルフィールド

 「しりとり」の戦いかた、すこし反省した - Active Galactic : 11次元と自然科学と拷問的日常では単語の最初の文字と最後の文字に着目し、分布の偏りを見た上で以下のように必勝法を導いていた。

「る」の同字返しが偶数個の状態で「る攻め」を仕掛ければ必勝。

「しりとり」の戦いかた、すこし反省した - Active Galactic : 11次元と自然科学と拷問的日常

 「る」の同字返しが偶数個のときに仕掛ければ、「る攻め」の主導権が取れて勝てるというわけだね。まるでワールドヒーローズ2の投げ返しが最大6回だからミスしない前提では最初に投げた方が投げ勝てるみたいな話だ。*1

コンピュータでしりとりをしよう

 しりとりとはなんだろうか。人間同士の場合は語彙力や発想力を試すところにポイントがあるのだけど、例えばカンニング可能な、そう、1冊の辞書を用意して、その単語をひとつひとつ潰していくようなゲームとして捉えよう。つまり、合成語などを作って語彙を生み出すようなことができない、あらかじめ使えるカードが決まっているしりとりである。

 元記事では、

実際の「しりとり」は完全情報ゲームにはほど遠いが、プレイヤーは日本語のすべての単語を暗記する究極生命体であると仮定し、単語の語尾が何の音に対応するか、この単語はアリかナシかみたいな議論は全て片付いた後としよう。

「しりとり」の戦いかた、すこし反省した - Active Galactic : 11次元と自然科学と拷問的日常

という仮定をおいているけど、要するに、辞書のファイルが与えられて、コンピュータのAI同士で戦わせるしりとりという非常に現実的な仮定をすればいい。もし、これを読んでいるあなたがプログラマだったなら俄然興味がわいてくるんじゃないだろうか。

 数学的なモデルを考えれば、

任意の単語セットで構成される「しりとり」は文字をノードとする有向グラフによって記述できる。それは一般に多重辺(どちらも文字Xiではじまり文字Xjで終わるが、異なる単語の組)やループ(同字返し)を含む。

「しりとり」の戦いかた、すこし反省した - Active Galactic : 11次元と自然科学と拷問的日常

ということになる。

先手必勝?

 元記事では豚辞書を用いたとあるので、自分も同じく豚辞書14版を集計してみた。単語数は201,092語だったよ。

 この辞書の場合、「る返し」*2は24単語ある。

「る」の同字返しが偶数個の状態で「る攻め」を仕掛ければ必勝。

「しりとり」の戦いかた、すこし反省した - Active Galactic : 11次元と自然科学と拷問的日常

 であるから、豚辞書14版をバトルフィールドにしたAIしりとりは先手必勝で非常につまらない。プログラマが戦うにはこんなフィールドじゃダメだ!

る攻めが必勝にならないルイズの魔法

 「る返し」偶数時の「る攻め」は果たして必勝なのか?

 ここで、「る」への出入り口を確認してみよう。「る」からある文字Xに出る単語の数と、ある文字Xから「る」に入る単語の数に注目してみよう。常に潤沢な「る」攻めの単語があるのかどうか。

 そして驚愕の事実を発見するのだ。「る→ず」4単語、「ず→る」4単語という穴を!

 豚辞書における「る→ず」は「ルーズ」「ルー・テーズ*3「ルームシューズ」「ルズ」*4 の4つ。
 豚辞書における「ず→る」は「図に当たる」「図に乗る」「ずる」「ずるずる」の4つ。

 さてここに「ルイズ」を加えよう。「る→ず」5単語となる。「る返し」は元のまま24単語で偶数だ。開始が「しりとり」から始まるとして、

 リールルーズ図に当たるルー・テーズ図に乗るルームシューズずるルズずるずるルイズ!ず、ず…る? 何…だと…?

 「る返し」偶数時の「る攻め」で先制した先手が「ず→る」のカードを失い「る攻め」を止められてしまうのである。なお、豚辞書では「ず→ず」は「ズームレンズ」「数珠」の2つのみ。これまた偶数なので先手は手詰まりである。

 さらば先手。君の雄姿は忘れない。ルイズぅぅうううわぁああああああああああああああああああああああん!!!

AIのしりとりバトルフィールド

 というわけで、「る返し」偶数時の「る攻め」が必勝になるにはひとつ前提条件があることを思い知るわけだ。

「る→X」の語数が「X→る」の語数より多い文字Xが存在しない状況において、
「る返し」が偶数残っているなら「る攻め」が必勝

 より一般化すると、

「C→X」の語数が「X→C」の語数より多い文字Xが存在しない文字Cがあり、
「C→C」の語数が偶数である場合、「C攻め」が必勝になりチェックメイト

となる。元記事でも

「る」は任意の文字Xに対して『 N(X→る) ≧ N(る→X) 』であり、袋小路になっている。

「しりとり」の戦いかた、すこし反省した - Active Galactic : 11次元と自然科学と拷問的日常

と指摘しているから、もちろんこの条件を筆者は把握していることだろう。*5

 AIのためには、「る→ず」の語数が「ず→る」の語数より多いようなバランスのとれたフィールドを用意する。いやまぁ「る」に限らないのだけど、使えるワードの数はバランスよく配置しないたフィールドにしないと1手詰めになっちゃうんで。

 なお、豚辞書においては「X→る」が基本的に多い。「ず→る」が4語で「る→ず」の語数と同じなのが唯一の例外。さっきはここに「ルイズ」を足すことでバランスを調整したわけだ。先手必勝にならなくなったので、じりじりと単語を削り合わなくてはならない。もちろん、「る返し」の数をひとつ増減して奇数にし、先に「る」を踏むわけにはいかない状況にすることでも同じ効果が生まれる。

 こうなると、「る」を踏まないように他の単語を削り合って、今度は他の文字Cに詰めが発生して踏めなくなって…となるのでアルゴリズムを考えるにはなかなか面白いフィールドになるだろう。

*1:むしろ分かりにくい例え

*2:元記事では『「る」の同字返し』と表現されている

*3:プロレスラーの名前らしい

*4:多分、香水のメーカーの名前。豚辞書だとひらがなで記載されているだけなのでなんのことやら分からない単語がままある

*5:元記事ではAIでアルゴリズムを組むには、なんてことを想定していないだろう