見出し画像

ポーカーAI開発 part5 ~AIがポーカーを実況・解説する 2歩目~

こんにちは!ナガメ研究所です。今回は、テンプレート方式で大量に生成した文章をGPT-2に流して、ゲーム状態に応じた文章生成をするAIモデル作ってみたので、その話をします。今回の記事は、前回の書いた内容の続きとなっていますので、ぜひご覧ください。細かいアルゴリズムや数式の話はしませんので、ご了承ください。

はじめに

対戦ゲームは基本、試合中に自身の考えや今後の戦略を話したりはしません。なので観客は試合後のインタビューを聞くか、別室で行われる実況・解説席からの予想をもとに考える必要があります。これはこれで楽しいのですが、プレイヤーがリアルタイムで何を考えてそのアクションを行ったのかを知ることができれば、観客が(そのプレイヤーの)アクションを理解する上で非常に助かります。当事者になりきって思考することも可能です。また、今後のプレイの参考にもなります。なので、通常の観戦体験よりも臨場感と納得感を味わえるようになるのではないかと、筆者は考えています。

そこで、現在開発中のポーカーAIナガメにヘッズアップの実況・解説をさせる方法を考えていきます。上のリンクで紹介した記事では、ゲームの状態を元にテンプレート方式で文章生成を行うことの成功しました。しかし、より多様な文を生成するには、モデル方式のほうが期待できます。

モデル方式を試す

課題は、ゲームの状態と文章のペアのデータの不足です。ポーカーのゲーム状態数は10の160乗ともいわれており、全ての状態の文章にを用意するのは困難です。そこで、まずはテンプレート方式でそこそこの量の文章を生成し、学習させることを考えます(図1)。

図1:GPT-2の再学習の流れ

実験概要

図1に示した通り、ゲーム状態からテンプレート方式っぽい文章を生成できるGPT-2の学習を行います。(今回は2.ゲーム状態のベクトル化は行いません)
テンプレート方式っぽい文章なら意味なくない?と思われるかもしれません。しかし、リアルで質の良い解説データを手に入れる前に、今できる範囲でいくつか実験すべき項目があります。それは

・ゲーム状態をどのようにGPT-2に入力すべきか
・簡単なルール(テンプレート方式)で作られた文章とゲーム状態の関係を学習可能か
・どれくらいの学習データが必要か

となります。遠回りかもしれませんが、いきなり本番用データを集めるのはコストが高いですし、失敗したときの時間的損失が大きいです。なので、一つ一つクリアしていきたいと思います。以下は図1の説明です。

1.テンプレート方式による文章生成

これは前回行ったので割愛します。

2. ゲーム状態のベクトル化(今回は行っていません)

そのうちやるつもりですが、やらないかもしれません。ゲーム状態を数値ベクトルに変換すると、191次元もあります。GPT-2への入力サイズとしては大きい気がしています。今回はそのまま入力にしますが、次元の圧縮手法としてオートエンコーダやシンプルなニューラルネットワークを適用しようと考えています。

3. GPT-2の再学習

最後は、ゲーム状態のベクトルと文章のペアを使ってGPT-2を再学習します。先程述べた通り、生成文はテンプレート方式に沿った文章になるはずですが、どうなるか楽しみですね。
再学習は、下記のサイトを参考にさせていただきました。ありがとうございます。
学習用のデータセットは、ゲーム状態とセリフのペアを約15万用意しました。これを10エポック(エポックとは、1つのデータを何回繰り返し学習させるかの単位)回します。学習にかかった時間は約8時間でした。

実験結果

結果から言うと、かなりいい感じ!でした。専門的な評価指標を並べるよりも、できた文章をお見せしたほうが早いと思うので、デモ画面を貼っておきます。

図2:SB(手前)がポーカーAIナガメのハンド

ゲーム状態をGPT-2へ入力し、出力したものを上に貼り付けました。今回はコールを選択している状況です。
しかし、
call宣言後にfold!と宣言してから撤回するなど、かなりマナー違反なナガメとなっています笑。
文章の長さを制御したり、ルールベースでのフィルターをかけるなどしたほうが良いかもしれません。とりあえず、自身のアクションを正しく文章に反映できているので良しとしましょう。

図3:BB(奥)がナガメの場合のセリフ

こちらはポットやレイズの値を正しく認識できていますね!ゲーム状態のベクトルが長くてもうまくいくようです。ここはちょっと感動。。。
※入力したゲーム状態をデモ画面に反映させるのが億劫だったので、雑に編集していますがご了承ください。

おわりに

想像よりもうまく学習できていると感じます。筆者が用意したテンプレートが30個程度と貧弱なせいで、出力される文章に面白みがないですが、懸念していた入力サイズやデータ量もこれくらいなら問題ないようです。

しかし、まだまだやりたいことが沢山あります。今のモデルは時系列的な情報を考慮していないので、「さっきはcallだったのにraiseしてきた」とか、「前のゲームはブラフだったからなあ」といったセリフを喋らせることはできません。話す内容も実況にとどまり、解説するには至っていません。(そもそも、解説する能力が筆者にないので、どなたかにお力添えいただく必要があります・・・)
ポーカーを実況・解説するAIモデルの開発はまだまだ先が長くなりそうですが、今度とも続けていく予定です。ので、ぜひフォロー・スキをよろしくお願いいたします!最後まで読んでいただきありがとうございました!


この記事が気に入ったらサポートをしてみませんか?