GPT-3 (text-davinci-003) を使って JCommonsenseQA を解く
一応自然言語処理の研究をしている大学院生であるにもかかわらず、最近の生成型言語モデルの進化に全くついていけていないので、キャッチアップとして OpenAI の GPT-3 を使ってみたという記事です。
普通にテキスト生成させるだけではあまり面白みがないので、今回は JCommonsenseQA を使って、GPT-3が常識をどのくらい持っているのかを調べてみます。
JCommonsenseQA とは?
日本語言語理解ベンチマークJGLUEのうち、常識が必要とされる QA(質問応答)タスクです。例えば以下のような質問が含まれています。
質問: 鉛筆で書いた間違えを何で消すか?
choice0: 火消し
choice1: 消しゴム
choice2: 暗殺者
choice3: 黒消し
choice4: 闇
解答: 1
質問: 年上の女性のきょうだいを敬う言い方は?
choice0: 従兄弟
choice1: サロン
choice2: お姉様
choice3: 従妹
choice4: カウンター
解答: 2
JCommonsenseQA は、JGLUE ベンチマークの中でも一番言語モデルがまだ苦しんでいるタスクです。
人間の正答率は(devデータにおいて)98.6% ですが、モデルの正答率は早稲田大学 RoBERTa (large) で 90.7%、LINE の HyperCLOVA でも 93.6% です(↓の109ページを参照)。
このような比較的難しいタスクで GPT-3 がどれくらい威力を発揮できるか、気になりますよね。
GPT-3 を playground からさわってみる
大前提として、今回は JCommonsenseQA の訓練データは使わず、評価用データから直接うまく正答を出せるかを調べます(zero-shot settings)。
試しに GPT-3 をさわるには https://beta.openai.com/playground が便利です。
今回は QA タスクなのですが、私はプロンプト芸人ではないので、どのようなプロンプトを作ればいいのかよくわかりませんでした。とりあえず、雑に以下のような感じで入れてみます。
これで Submit を押してみます。すると以下のようにテキストが生成されました。
ちゃんと答えられていますね。
答えに至った説明も書かせてみましょう。
それっぽい文章が出てきました。
GPT-3 を API 経由で呼び出す
今やったことを API 経由でやろうとすると、以下のような感じになります。
# question = ...
# choice0 = ...
# choice1 = ...
# choice2 = ...
# choice3 = ...
# choice4 = ...
response = openai.Completion.create(
model="text-davinci-003",
prompt=f"Question: {question}\n0: {choice0}\n1: {choice1}\n2: {choice2}\n3: {choice3}\n4: {choice4}\nAnswer:",
temperature=0, # ここは 0 にする!!!
max_tokens=256,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
これを動かすと、response["choices"][0]["text"]
の中に出力テキストが入っています。
出力テキストに選択肢番号が入っていたりいなかったりと後処理がありますが、基本的にはこれで予測を行うフローが完成しました。
GPT-3 を使って JCommonsenseQA を解く
実際に評価を行ってみました。以下のリポジトリにコードを置いてあります。
手元で動かした結果としては
Accuracy: 0.8543342269883825 ( 956 / 1119 )
となりました。
個人的には、思ったよりあまりスコアは高くないなという印象です。早稲田大学 RoBERTa や LINE の HyperCLOVA よりも普通に劣っています。ただ、
- GPT-3 は日本語に特化しているわけではないこと
- 訓練データを使わずに zero-shot で推論をしていること
を踏まえると、結構すごいことなのかもしれません。
余談ですが、ChatGPT の API が近日公開されるということなので、そちらを使うとさらに精度が上がるのかどうかは気になるところですね。
GPT-3 が解けなかった問題例(Explanation 付き)
GPT-3 が誤答を出してしまった例のいくつかについて、個人的に面白いなと思ったものを改めて playground で確認してみました。
GPT-3 には部首の知識がない
GPT-3 は寺でミサを唱える
GPT-3 は否定を含む問題文に惑わされる
GPT-3 は大小関係が分かっていない(ことがある)
追記(2023/03/01)
最近は Bing の Chat がすごいですね。上で挙げた質問例のうち、部首の問題以外は全て正しく答えられてしまいました。もはや人間の正答率とほぼ互角なのかもしれません。
部首の問題は依然として間違えています。
Discussion