14
1

言語モデルは最新のポケモンを知っているのか

Last updated at Posted at 2023-12-02

概要

2023年に登場した各種言語モデルが最新のポケモンの知識を知っているのかどうかを定量的に調査しました。結果はOpenAI ChatGPTやGoogle PaLMを抑え ストックマーク13Bが最も優秀なスコアを記録 し、同モデルの「最新情報に強い」という主張を裏付ける結果となりました。

はじめに

ポケモンは1996年に「ピカチュウ」などが登場して以降、3〜4年にいちど100種類前後のまとまった数の新しいキャラクターが断続的に追加されており、2022年に発売された最新作「スカーレット・バイオレット」によって1,000種類を超えました1。ポケモンが追加されるに従って必要とされる知識も増加しており、近年ではアニメを通してポケモンのタイプについて啓蒙2したり、「ドン」が付くポケモンを列挙させるタスク3が毎週繰り返し放送されるなど、ポケモンに関する知識獲得は社会における問題のひとつとして大きく捉えられています。人間による記憶の限界を迎える前に人工知能によるポケモンの知識獲得が求められます。

本稿では、言語モデルが最新のポケモンについて知識を持っているのか調べてみました。言語モデルは学習データに使われた時期までの知識しか持っておらず、最新の情報について答えることができないことが弱点の一つと言われます。たとえばChatGPTは2021年までの知識しか持っていないとされています4。実際に2022年に登場したポケモン「ハバタクカミ」について聞いてみたところ、そのままでは正しく回答することができませんでした。(挙げた記事ではRAGによって外部知識を与えました)

本記事では、図のようにポケモンの名前を入力として言語モデルにポケモンのタイプを予測させることで、言語モデルがポケモンの知識を獲得しているかを調査します。

image.png

ポケモンの名前のあとに正しいタイプを出力できたら正解とします。ポケモンとそのタイプについてはポケモンずかん公式サイトなどを参照してください。

補足: ポケモンの登場年代と世代について

ポケモンの登場時期は「世代」という表現をされますが、これはファンによる通称であり公式の呼称ではないため、本記事では西暦による年代を使います。世代と年代とタイトルの対応表は下記になります。

発売年 世代 ゲームソフトタイトル
1996 1 赤・緑
1999 2 金・銀
2002 3 ルビー・サファイア
2006 4 ダイヤモンド・パール
2010 5 ブラック・ホワイト
2013 6 X・Y
2016 7 サン・ムーン
2019 8 ソード・シールド
2022 9 スカーレット・バイオレット

2022年11月に登場した「スカーレット・バイオレット」に登場する「ニャオハ」「クワッス」「ホゲータ」などのポケモンに関する知識を、2023年に登場した言語モデルが獲得しているかどうかを調査していきます。

実験

言語モデルでポケモンの名前を与え、そのタイプを予測します。タイプの正解データはポケモンWikiのポケモン一覧から引用しました。問題が単純になるようにタイプをひとつだけ持つポケモンに絞るなど、以下のようにデータを加工しました。

  • 各世代のフラグシップタイトル 以外 で初登場したポケモン(メルタンやバサギリ、アヤシシなど)は除外
    • 同時期に登場したポケモンが一定数以上いないため、実験が難しいと判断
  • タイプをふたつ持つポケモン(カイリューのノーマル・ひこうタイプなど)は除外
  • リージョンフォーム(ラッタのアローラのすがたはあくタイプ)などは除外
  • 作品間でタイプが変わったポケモンは最新作品に準拠する

合計492件のデータが得られました。

年代 種類
1996 84
1999 51
2002 69
2006 53
2010 82
2013 31
2016 31
2019 50
2022 41
合計 492

実験用プログラム実行環境

  • Python 3.10.12
  • Google Colab A100 GPU
  • transformers 4.35.2
  • openai 1.3.7

言語モデルの使い方

Few-Shot Promptingを使い、言語モデルの出力を調べます。
ここでは1996年と1999年のポケモンを「常識」として、2002年以降のポケモンをどれだけ知識として獲得しているかを調べます。1996年と1999年のポケモンからランダムに1匹ずつ選んでサンプルとし、テスト対象年代のポケモンの名前をpromptに含め、出力としてタイプが得られることを期待します。

たとえば、サンプルとして1996年登場のピカチュウと1999年登場のトゲピーを選び、テスト対象に2002年のアチャモを選んだ場合は以下のような入力となります。

prompt
ピカチュウ: でんき
トゲピー: フェアリー
アチャモ:

出力からstrip()で空白文字列を除外してから、出力文字列の先頭から答えの文字数(トークン数ではない)だけ切り取り、正解と完全一致したかどうかで評価します。このテストを各年代ごとに50件ずつ行い、その正解率をスコアとします。
上記のアチャモの例ではほのおが正解ですが、前後に空白や改行文字が含まれていても正解とします。また、続きとして別のポケモンや文章が出力された場合も、先頭の文字列が正解と完全一致していれば正解とします。
一方で1文字でも異なっていた場合、「ほのお」を「炎」と漢字表記されていた場合などもすべて不正解とします。

たとえばOpenAIのGPTモデルを使う場合、以下のようなコードで実験をします。

def chat(prompt, model_name="gpt-3.5-turbo"):
    chat_completion = openai_client.with_options(max_retries=5).chat.completions.create(
        messages=[{"role": "user","content": prompt}],
        model=model_name,
        max_tokens=10,
    )
    return chat_completion.choices[0].message.content

predicted = chat("""ピカチュウ: でんき
トゲピー: フェアリー
アチャモ:""")

answer = "ほのお"

print("predicted:", predicted)
print(predicted.strip()[:len(answer)] == answer)
出力
predicted: ほのお
True

言語モデルに対して与えるパラメータはすべてプログラムおよびSDKのデフォルト値としました。本来こういう実験をやるならtemperatureを下げて再現性を取るべきかもしれませんが、出力が長文ではないので結果に大きな差は無いと思います。

補足: ポケモンのタイプの種類と傾向

ポケモンのタイプは「ほのお」「ノーマル」「みず」など全部で18種類あります。

完全にランダムに選択された場合1/18≒約5%が期待値となるので、この値をどれだけ上回るかで性能を測ります。実際には単純な18クラス分類問題ではなく、以下の要因によって上下します。

  • 言語モデルの出力は当然ポケモンのタイプだけとは限らない
    • ポケモンのタイプであっても「でんき」を「電気」「エレクトリック」などと揺れた表記で出力する事がある
  • ポケモンのタイプの分布には偏りがある
    • 一般に「みず」「ノーマル」などが多く、「こおり」や「フェアリー」が少ない
  • ポケモンの知識を持っていなくても、名前から推測できる場合がある
    • ミズゴロウ→「みず」、ナゾノクサ→「くさ」など

実験対象の言語モデル

実験対象には2023年にリリースされた言語モデルを選択しました。実際に2023年のデータが学習に使われているかどうかはモデルによって異なり、特に2022年に登場したポケモンの知識を獲得できているかどうかに差が出ると仮定されます。

商用のクローズドなモデルと、日本語のオープンなモデルをそれぞれ複数選択しました。オープンなモデルについてはGoogle Colab Proで安定して動作させられる範囲にしました。なお、ここでは以下のモデルはすべて本記事における実験のみを目的として利用しています。

  • OpenAI gpt-3.5-turbo-0613
    • 2023年6月にリリースされた、GPT-3.5のひとつ前のバージョン
    • 学習データは2021年9月まで
  • OpenAI gpt-3.5-turbo-1106
    • 2023年11月にリリースされた、GPT-3.5の最新バージョン
    • 学習データは2021年9月まで
  • OpenAI gpt-4-1106-preview
    • 2023年11月にリリースされた、GPT-4の最新バージョン。GPT-4-Turboと呼ばれるモデル
    • 2023年4月までのデータで学習されています
  • OpenAI gpt-4-0314
    • 2023年3月にリリースされた、GPT-4のひとつ前のバージョン。最初のGPT-4です
    • 学習データは2021年9月まで
  • Google Cloud PaLM 2 text-bison@001
    • Google Cloud Vertex AIにて公開されているモデルのひとつで、いわゆるBardと呼ばれるものの内部モデルです
    • 2023年2月までのデータで学習されています
  • stockmark/stockmark-13b
    • ストックマーク社が2023年10月に公開したモデルです
    • 「ビジネスのドメインや最新情報に対応した」と謳っており、今回のような最新知識を問うタスクにおける性能が期待できます
  • pfnet/plamo-13b
    • Preferred Networks社が2023年9月に公開したモデルです
    • LLaMAのアーキテクチャを踏襲し事前学習を行ったモデルです
  • rinna/youri-7b-gptq
    • rinna社が2023年10月に公開したモデルです
    • Llama 2の日本語継続事前学習モデルです
  • stabilityai/japanese-stablelm-base-ja_vocab-beta-7b
    • Stability AI Japanが公開した2023年11月にモデルです
    • Llama 2の日本語継続事前学習モデルです
  • elyza/ELYZA-japanese-Llama-2-7b-instruct
    • ELYZA社が2023年8月に公開したモデルです
    • Llama 2をベースに日本語で追加事前学習を行ったモデルです
  • cyberagent/calm2-7b
    • サイバーエージェントが2023年11月に公開したモデルです

結果

2002年から2022年まで7世代分の正答率と、すべての平均が以下の図です。

世代 2002(3) 2006(4) 2010(5) 2013(6) 2016(7) 2019(8) 2022(9) 平均
OpenAI gpt-3.5-turbo-0613 82% 64% 64% 70% 74% 50% 32% 62%
OpenAI gpt-3.5-turbo-1106 44% 52% 44% 22% 54% 26% 14% 37%
OpenAI gpt-4-1106-preview 0% 0% 0% 0% 0% 0% 0% 0%
OpenAI gpt-4-0314 64% 80% 78% 44% 70% 66% 30% 62%
Google Cloud PaLM 2 text-bison@001 42% 36% 26% 30% 48% 42% 8% 33%
stockmark/stockmark-13b 86% 92% 78% 70% 74% 72% 44% 74%
pfnet/plamo-13b 20% 24% 16% 10% 24% 6% 22% 17%
rinna/youri-7b-gptq 16% 6% 6% 12% 12% 10% 14% 11%
stabilityai/japanese-stablelm-base-ja_vocab-beta-7b 18% 12% 14% 6% 6% 6% 14% 11%
elyza/ELYZA-japanese-Llama-2-7b-instruct 6% 8% 6% 2% 0% 6% 8% 5%
cyberagent/calm2-7b 28% 38% 36% 28% 34% 32% 16% 30%

モデルごとの平均正答率のグラフが下記です。

image.png

日本のオープンな言語モデルである stockmark/stockmark-13b が最も高い性能を記録しました。
特にOpenAI ChatGPTやGoogle PaLMなどの強力なクローズドのモデルを超える結果となったのは驚くべき結果だと思います。最新のポケモンについても精度は落ちますがそれでも半分程度の正解率を誇っており、最新のポケモン知識を持った言語モデルであると言えるでしょう。このモデルはストックマーク社が公式に「最新情報に強い」と謳って公開されているものであり、ちゃんと性能にあらわれていることが分かりました。

次いで OpenAI gpt-3.5-turbo-0613、gpt-4-0314 が並びました。OpenAIにはより新しいモデルがありますが、本実験においては最新のモデルよりもひとつバージョンの古いモデルが高いスコアとなりました。
本実験において平均の正答率50%を超えたモデルは以上3つでした。これらはポケモンについて一定以上の知識を獲得していると言えるのではないでしょうか。

世代間の正答率の差、とくに2019年から2022年のあいだでの正答率の変化を見てみます。全体平均30%以上の正解率を記録したすべてのモデルにおいて、2019年から2022年のあいだで正解率の低下が見られました。これらのモデルにとって2022年の最新のポケモンの知識獲得が難しいタスクであることを示しています。

本実験は18クラスの分類問題と捉えることができますが、多くのモデル・世代において正答率が6%を超えたため、どのモデルも性能の差はありますがポケモンのタイプを予測するというタスクに対応はできていると言えると思います。

出力結果例

stockmark/stockmark-13b

最も性能が高かったstockmark/stockmark-13bの例です。

image.png

ヘイラッシャ(みず)やキョジオーン(いわ)を当てられているのが分かります。

また今回のタスクのスコアには反映されないですが、クワッス:の続きとしてニャオハ: くさを出力するといった、2022年登場のポケモンの並びというドメイン知識をよく理解しているとみられる出力も見られました。

input
ベトベトン: どく
スイクン: みず
クワッス:
output
みず
ニャオハ: くさ(

統計的な特徴による回答の例

以下はStableLMの結果です。

image.png

StableLMやPLaMoは、このように「ノーマル」など特定のタイプを多く出力する傾向が見られました。
これは、ポケモンの名称とタイプを知識として獲得するよりも、ポケモンのタイプとして「ノーマル」が多いといった統計的な特徴に強く影響されているのではないかとみられます。これらのモデルは最新のポケモンのような未知の単語に対しても正答率が落ちにくい反面、一定以上の正答率にはなりません。

クローズドな言語モデルの例

以下はGoogle PaLMの結果です。

image.png

ChatGPTやPaLMはタイプのみを出力して止まる傾向があり、内容の正しさを問わずfew shot promptingを忠実に守っていると分かります。

GPT-4-Turboの結果

ところで実験結果のスコアでは、OpenAI gpt-4-1106-preview いわゆるGPT-4-Turboが0点となってしまいました。GPT-4-Turboは、一般的には非常に性能が高いとされるGPT-4の最新モデルであり、また2023年の学習データも使われているということで、もちろん本タスクでも最も高い性能を見せると思っていました。

しかし実験してみると、他のすべてのモデルに対しては同一の入力で有効だったFew-shot PromptingがGPT-4-Turboのみまったくうまくいきませんでした。以下のようにポケモンのタイプを出力できなかったためスコアが付きませんでした。

input
ゴルダック: みず
マグマッグ: ほのお
デオキシス:
output
ゴルダック (Golduck)、

理由は分かりませんが、他の言語モデル(Turboではない以前のGPT-4を含む)とは異なる挙動をする傾向があるようです。

まとめ

ChatGPTなどの2023年に登場した多くの言語モデルは、2019年(ソード・シールド)世代までのポケモンの知識は持っていることが分かりました。またStockmark-13bは2023年時点で最新のポケモン(スカーレット・バイオレット)までの知識を持っていることが分かりました。
次はリージョンフォームがいるポケモンを言語モデルに列挙させるタスクなどに取り組んでみたいと思いました。

  1. Pokémon 1008 ENCOUNTERS https://www.youtube.com/watch?v=qYJwN4cvde0

  2. 『バツグンタイプ』https://s.awa.fm/track/d95aa3aed2961af29b21

  3. 『ライジングボルテッカーズラップ』 https://www.lyrical-nonsense.com/lyrics/liko-roy-friede/rvr-rising-volteccers-rap-friede-ver/

  4. https://help.openai.com/en/articles/6783457-what-is-chatgpt

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1