遊戯王カードのテキストをディープラーニングにより学習
以前遊戯王カードのイラストを学習して新たな遊戯王カードのイラストを生成するという実験を行った。
今回は遊戯王カードのテキストを学習して新たなテキストを生成する。
1. 結果
最初に実験結果を載せる。
1行につき1つの効果が生成されている。
いくつか目についたものを抜粋。
原文:
FLIP: Destroy all face-up monsters on the field with an ATK or DEF equal to or less than this card’s ATK.
日本語訳:
リバース:このカードの攻撃力以下の攻撃力か守備力を持つフィールド上の表側表示モンスターを全て破壊する。
実在する効果なんじゃないかと思って検索したけど無かった。
原文:
Select 1 face-up Machine-Type monster on the field. That monster’s ATK and DEF become half its current ATK and DEF, and if it does, destroy it.
日本語訳:
フィールド上に表側表示で存在する機械族モンスター1体を選択する。そのモンスターの攻撃力・守備力を半分にして破壊する。
無駄に半減させる。
原文:
Your opponent cannot select their Field Spell Cards as an attack target.
日本語訳:
相手はフィールド魔法を攻撃対象に選択できない。
王国編とかでは活躍しそう。
実験の方法は次以降。
2. gpt-2-simple
GPT-3という自然言語処理で大きな成果を出しているすごい言語処理モデルがある。
これを使おうと思い申し込んだが返事が来ないためGPT-2という少し古いやつを使う。
「gpt-2-simple」というライブラリを使うとGPT-2による文章学習→文章生成が簡単に行える。
3. gpt-2-simpleの使い方
Windows10で「gpt-2-simple」を使うための環境構築を行う。
3.1. ダウンロード
GitHubから「gpt-2-simple」のリポジトリをダウンロード。
https://github.com/minimaxir/gpt-2-simple
3.2. インストール
Anacondaが既にインストールされている前提。
入ってなければ以下を参考にして入れる。
はじめにgpt-2という名前の環境を作る。
1 | conda create -n gpt-2 python=3.6 |
gpt-2に必要なライブラリをインストール。
1 | conda install regex requests tqdm numpy |
3.3. 実行
GitHubのUsageに書いてあるコードをコピーして実行するとあらかじめ用意してあるシェイクスピアの文章を学習することができる。
1 | import gpt_2_simple as gpt2 |
これがちゃんと動けば環境構築に成功している。
4. 遊戯王カードを学習
続いて自分で用意した遊戯王カードのテキストを学習する。
4.1. 遊戯王カードのテキスト収集
前回と同様に遊戯王APIというAPIを使う。
これを使うと遊戯王カードに関する情報が取得できる。
テキストは英語版のものだが学習モデル自体も英語用なのでちょうどいい。
図のようにカード1枚につき1行としてテキストファイルに保存する。
今回は効果モンスター、魔法、罠のテキストを対象とした。
また、融合・シンクロなどの1行目に書かれている召喚条件の部分は削除した。
4.2. 学習
さきほど用意したテキストファイルを学習する。
以下のコードで学習。
gpt2_train.py
1 | import gpt_2_simple as gpt2 |
変数名 | 意味 |
---|---|
model_name | 使用するモデルサイズ、大きいほど精度が良くなるが重い。124M, 355M, 774M, 1558Mの4種類。 |
file_name | 学習するテキストファイルの名前 |
run_name | 学習したモデルの保存先の名前 |
batch_size | バッチサイズ、大きいと学習が速いがPCスペックに対して大きすぎると動かなくなる。 |
steps | 学習するステップ数。 |
sample_length | 学習時に現在の学習モデルによる生成サンプルが生成される、その長さ。 |
sample_num | 学習時に現在の学習モデルによる生成サンプルが生成される、その数。 |
save_every | 何ステップおきに学習結果を保存するかを示す。 |
今回はモデルサイズを355M、ステップ数を300として実験。
学習に30時間ほどかかった
より大きなモデルにするとおそらくはより良い結果になるがさらに時間がかかってしまう。
4.3. 生成
学習したモデルを使って遊戯王カードのテキストを生成する。
1 | import gpt_2_simple as gpt2 |
変数名 | 意味 |
---|---|
model_name | 使用するモデルサイズ、大きいほど精度が良くなるが重い。124M, 355M, 774M, 1558Mの4種類。 |
run_name | 学習したモデルの保存先の名前 |
generate_length | 生成するテキストの長さ。 |
generate_nsamples | 生成するテキストの数。 |
save_filename | 生成するテキストファイルの名前 |
およそカード200枚の効果を20分弱で生成した。