Slide 1

Slide 1 text

機械学習を用いた ポケモン対戦選出予測 2024/05/26 fufufukakaka @ リモートポケモン学会

Slide 2

Slide 2 text

自己紹介 fufufukakaka(fu3ka3) pron. ふふふかかか・ふか 普段は機械学習エンジニア リモポケ学会では2 回発表しました 対戦データを収集するシステム GPT-4 で発表を要約するシステム ポケモンの対戦を嗜んでいます レート1800 で安定してる 2

Slide 3

Slide 3 text

お話したいこと 1. ポケモン対戦とは 2. 選出と技選択 3. 選出データの収集 4. いい感じの予測モデル作り 5. 結果とエラー分析 6. まとめ 3

Slide 4

Slide 4 text

ポケモン対戦とは 6 体を見せ合う → 3 体( ダブルでは4 体) を出して対 戦開始 → 先に相手のポケモンをすべて 倒したほうが勝ち 今日はシングル対戦の話 1. ポケモン対戦とは 4

Slide 5

Slide 5 text

ポケモン対戦の何かを予測して 強くなりたい!( ?) 2. 選出と技選択 5

Slide 6

Slide 6 text

選出と技選択 選出 どのポケモンを使うのかを相手のプールを見て決める マクロ的な視点による思考が必要 技選択 自分と相手の対面状況、裏を考慮して技・交代選択をする ミクロ的な視点による思考が必要 2. 選出と技選択 6

Slide 7

Slide 7 text

→ 選出と技選択で考え方が違う!! 2. 選出と技選択 7

Slide 8

Slide 8 text

選出と技選択、どっちを予測するほう が簡単そう... ? → 選出予測 のほうがまだできそう 2. 選出と技選択 8

Slide 9

Slide 9 text

選出データ収集 こういう枠組みで 捉える 自分と相手の6 体、相手が出した 3 体があれば予測 できそう 3. 予測のための選出データ収集 9

Slide 10

Slide 10 text

選出データ収集 自分の対戦データ: Poke Battle Logger で集められる ただし、自分の対戦データだけだと予測できた!とは言えない ( 集計するだけで良さそう) 3. 予測のための選出データ収集 10

Slide 11

Slide 11 text

他の人の対戦データも集めよう! 3. 予測のための選出データ収集 11

Slide 12

Slide 12 text

選出データ収集 どうやって対戦データを集めるか? → YouTube で配信されている対戦から収集する ( メンバー限定配信は対象としない) 自動で集められるか? → YouTube の規約上 bot アクセスができない → 色んな画面レイアウトで配信されているため、Poke Battle Logger の対象にできないものが多い 3. 予測のための選出データ収集 12

Slide 13

Slide 13 text

人力で集めよう!!! 3. 予測のための選出データ収集 13

Slide 14

Slide 14 text

人力で!選出データ収集 候補となる対戦動画を集めてくる 編集が入っていない配信を対象に する クラウドソーシングで作業者を募集 して依頼 → 約1000 試合( レギュレーションF) を 集められた 3. 予測のための選出データ収集 14

Slide 15

Slide 15 text

いい感じの予測モデル作り どんなモデルが必要? 1. ポケモンをベクトルに変換するモデル 2. ポケモンベクトルで予測を行うモデル 選出ポケモンを予測するタスク その中での初手を予測するタスク なんかいっぱい必要... 4. いい感じの予測モデル作り 15

Slide 16

Slide 16 text

1. ポケモンをベクトルに変換するモデル ポケモン名はそのままだとモデルに入力できない 何らかの変換を行う必要がある ※ 普通の日本語ではないので、一から学習させる必要がある ( 普通の日本語であれば事前学習済モデルが使えるが...) → ポケモン名を新しい単語として定義して、パーティの並びから ベクトルを学習させる 4. いい感じの予測モデル作り 16

Slide 17

Slide 17 text

1. ポケモンをベクトルに変換するモデル 穴埋め問題を解かせることで、単語の意味及び関係性を学習できる → Pokemon Team BERT を作る (BERT ... 言語理解のための強いモデル) 4. いい感じの予測モデル作り 17

Slide 18

Slide 18 text

1. ポケモンをベクトルに変換するモデル 受けループに必要な残り一体を推測させている様子↓ パーティの概念を学習したベクトル変換モデルが手に入った 4. いい感じの予測モデル作り 18

Slide 19

Slide 19 text

2. ポケモンベクトルで選出予測を行うモデル パーティの並びを文章とみなして、Token Classification で解く Token Classification → 固有表現抽出とかで使われているタスク 4. いい感じの予測モデル作り 19

Slide 20

Slide 20 text

2. ポケモンベクトル で選出予測を行うモ デル 選出された、初手選出 された、選出されなか った、のラベルを用意 して予測 4. いい感じの予測モデル作り 20

Slide 21

Slide 21 text

2. ポケモンベクトルで選出予測を行うモデル target_sentence = " カイリュー ハバタクカミ ... 暁ガチグマ[SEP] ママンボウ オーロンゲ ... 水オーガポン" predict_res = trained_model.predict(target_sentence) print(predict_res) { " ママンボウ": { " 選出された確率": 0.95, " 初手選出された確率": 0.86, " 選出されなかった確率": 0.01 },... } 4. いい感じの予測モデル作り 21

Slide 22

Slide 22 text

結果とエラー分析 どれくらいの予測精度になったでしょうか? 初手ポケモン予測の正解率 選出ポケモン予想の平均正解数(1 試合あたり: 0~3) 5. 結果とエラー分析 22

Slide 23

Slide 23 text

比較手法 ランダム ... 6 体の中からランダムに3 体選ぶ。その中の一匹をランダ ムに初手と予想 集計ベース ... 試合データを集計して、初手回数が多かったポケモ ン・選出回数が多かったポケモンを把握。相手パーティの中でその 上位から予想として出す 5. 結果とエラー分析 23

Slide 24

Slide 24 text

結果 モデル 初手の正解率 選出予想の平均正解数 pokemon_team_BERT 0.3671 1.7578 ランダム 0.1666 1.4981 集計ベース 0.1250 1.4531 5. 結果とエラー分析 24

Slide 25

Slide 25 text

結果 モデル 初手の正解率 選出予想の平均正解数 pokemon_team_BERT 0.3671 1.7578 ランダム 0.1666 1.4981 集計ベース 0.1250 1.4531 → ( 一応) 大勝利! 5. 結果とエラー分析 25

Slide 26

Slide 26 text

エラー分析 ケース1 {' 相手のチーム': ' コノヨザル イーユイ 岩オーガポン 暁ガチグマ イダイトウ・オス ミミッキュ', ' 自分のチーム': ' ディンルー カイリュー サーフゴー パオジアン ハバタクカミ ウーラオス', ' 予想選出( 機械学習)': [' コノヨザル', ' イダイトウ・オス', ' 岩オーガポン'], ' 予想選出( 集計)': [' 暁ガチグマ', ' イーユイ', ' イダイトウ・オス'], ' 実際の選出': [' 暁ガチグマ', ' 岩オーガポン', ' イダイトウ・オス'], } 初手コノヨザルという予想は悪くない イダイトウ・オス、岩オーガポンは当てられた 集計ベースもまあまあ 5. 結果とエラー分析 26

Slide 27

Slide 27 text

エラー分析 ケース2 {' 相手のチーム': ' サケブシッポ ハバタクカミ 暁ガチグマ ウーラオス 炎オーガポン パオジアン', ' 自分のチーム': ' ハバタクカミ キョジオーン 霊獣ランドロス ウーラオス ブリジュラス パオジアン', ' 予想選出( 機械学習)': [' サケブシッポ', ' ハバタクカミ', ' ウーラオス'], ' 予想選出( 集計)': [' ハバタクカミ', ' ウーラオス', ' パオジアン'], ' 実際の選出': [' サケブシッポ', ' ハバタクカミ', ' ウーラオス'], } 完璧に的中したパターン! 5. 結果とエラー分析 27

Slide 28

Slide 28 text

エラー分析 ケース3 {' 相手のチーム': ' カイリュー 暁ガチグマ パオジアン ハバタクカミ ブリジュラス 炎オーガポン', ' 自分のチーム': ' ハバタクカミ サーフゴー カイリュー ウーラオス ママンボウ 暁ガチグマ', ' 予想選出( 機械学習)': [' 暁ガチグマ', ' パオジアン', ' ブリジュラス'], ' 予想選出( 集計)': [' ハバタクカミ', ' パオジアン', ' 暁ガチグマ'], ' 実際の選出': [' カイリュー', ' ハバタクカミ', ' 炎オーガポン'], } 完全に外したパターン こちらにママンボウがいるので、暁ガチグマが負荷をかけにくるの では、と予想するのはそこまで変じゃない... ような気がする 5. 結果とエラー分析 28

Slide 29

Slide 29 text

エラー分析 BERT というモデルは (Self)Attention という仕組み を持っていて、どの単語に反 応したかが見えるようになっ ている Source-Target Attention での 例 → 5. 結果とエラー分析 29

Slide 30

Slide 30 text

[ 自分のパーティ] ハバタクカミ, イーユイ, 暁ガチ グマ, タケルライコ, カイリュー, ハッサム [ 相手のパーティ] マスカーニャ, カイリュー, ブリ ジュラス, ママンボウ, ウーラオ ス, ハバタクカミ ブリジュラスにめちゃくちゃ 引っ張られている→ 5. 結果とエラー分析 30

Slide 31

Slide 31 text

( 同じパーティ) 警戒されているママンボウの 様子( 一部のAttention) 5. 結果とエラー分析 31

Slide 32

Slide 32 text

エラー分析 Attention 可視化分析を踏まえると、モデルは筋の良い目の付け所 を持っている( 多分) 定性的にも悪くない挙動と言えそう だが、良くも悪くも頻出のものに引っ張られる 選出全体でみると集計ベースとの差はわずか... 5. 結果とエラー分析 32

Slide 33

Slide 33 text

まとめ 自動・人力でシングル対戦のデータを収集 選出予測を行うモデルを作ってみた 初手予測はそれなり、選出予測はまあまあでできることがわかった これから 集めたデータをベンチマークとして公開したい OBS で使えるツールにしたい モデルの改善、レギュレーションG データの収集など引き続きやっ ていきます まとめ 33