ポケモンしりとりAIを作ってみた話
はじめに
最近はChatGPTをはじめとした大規模言語モデル(LLM)が世界を席巻しています。
推論スケーリングやo3などの最先端の話題が飛び交う中、「ちょっとした身近なタスクにLLMを活用するとどうなるのか?」と気になりませんか?
そこで、僕が作ったのが「ポケモンの名前でしりとりをしてくれるAI」です。
Transformer Decoder(GPT)ベースの自己回帰モデルを自前で組み上げ、最新ポケモン約1000体分の名前データを使って学習させてみました。
本記事では、その技術的背景と実装をまとめます。
しりとりAIのデモは以下です!
系列長を256で学習させたので、頑張れば人間でも勝てます!
なぜ「しりとり」なのか?
言語モデルで日本語を扱うなら、何か面白い題材はないか?という流れで思いついたのが しりとり でした。
- 最後の文字→頭文字 というルールを守る必要がある
- 「ン」で終わったら負け(候補の単語が無くなる)
- ルールさえ守れば自由度が高い
こうした制約付きタスクは自己回帰モデルと相性が良く、適度にゲーム性もあって「遊びながら学べる」と考えました。
全体像
本リポジトリは、次のような構成で動作します。
.
├── main.py # 学習
├── app.py # Hugging Face Space
├── tokenizer.pkl # 文字単位トークナイザの保存ファイル
├── best_model.pt # 学習済みモデル (別途DL)
├── pokemon_names.csv # カタカナ化ポケモン名データ
└── ...
-
PokeAPIを叩いてポケモン名を取得
1010種類の名前を受け取り、CSVにキャッシュ。 -
しりとり形式の学習データを生成
「[USER] カイ\n[GPT] イーブイ\n[USER] …」といった形式の会話ログを自動生成。 -
Transformerデコーダ(簡易GPT)で学習
ローカルで学習する場合はpoetry run python main.py
を実行。 -
推論・デモ実行
学習済みモデル(best_model.pt
)を使って、手元でしりとりAIと遊ぶ。
ポケモン名のカタカナ化
もともとPokeAPIからは、言語を指定した上でポケモンの名前情報を取得できますが、今回は全部カタカナに揃えました。
これは日本語の文字処理を簡潔にするためで、半端なひらがなやアルファベットを挟まないほうが、しりとりのルールを実装しやすかったからです。
しりとりデータを自動生成する工夫
Transformerに「最後の文字→頭文字で繋ぐ」ルールを覚えさせるため、会話形式データを丸ごと学習させました。
以下のような流れで、膨大なサンプルを作っています。
- ユーザー([USER])の単語を、ランダムにカタカナで生成
- その最後の文字を取得し、同じ文字で始まるポケモンをGPTが返答
- 既出の単語は使わないようにする
- 最大指定ターンまで繰り返し、あるいは「ン」で詰んだら終了
生成されたテキスト例(抜粋):
[USER] シリトリ
[GPT] リリーラ
[USER] ライト
[GPT] トゲチック
...
モデル:GPT(Transformerデコーダ)
昨今のLLM(GPT系)も「デコーダブロック主体で自己回帰的に学習する」という構造です。
最大系列長を256とし、会話ログ全体を一度に学習する想定です。
実行方法
デモで遊ぶ
以下でポケモンしりとりできます。(自分側の回答はポケモンの名前じゃなくていいです。)@spaces.GPU
をつけるだけでいいのでかなり楽でした。
参考:https://huggingface.co/docs/hub/spaces-zerogpu
学習
1. リポジトリをクローン & 依存パッケージのインストール
git clone https://huggingface.co/spaces/tomoyaf/poke-siritori
cd poke-siritori
poetry install
2. 訓練
poetry run python main.py
- デフォルトだと数十万件のしりとりデータを生成して学習するので、それなりに時間がかかります。
- 学習中は一定間隔で「[USER] カイ -> [GPT] イトマル -> …」と、実際のしりとり性能がログとして出力され、進捗を確認できます。
- PyTorch、TensorBoardを使っています。
オプション:モデルの入手
Google Drive から
best_model.pt
をダウンロードして、プロジェクトルートに配置してください。
まとめ
- 昨今のLLMはスケーリング則を背景に、膨大なパラメータ数をもって汎用性を高めています。
- そんな大仰な時代だからこそ、遊びの要素を取り入れた実験も意外と面白い!
- ポケモンの名前しりとりAIは、自己回帰モデルのトレーニングの仕組みやトークナイザーの基本を勉強するにも丁度いい題材です。
もしよければ、ぜひ触って遊んでみてください。
同じアプローチで、別のオリジナル単語リストを読み込んで色々なテーマの言葉遊びモデルを作るのも楽しそうですね。
以上、僕が作った「ポケモンしりとりAI」のご紹介でした。
興味を持ってくださった方は、ぜひリポジトリをチェックしてみてください!
Discussion