話題のchatGPTはやっぱりすごかった

# はじめに
この記事は、[AMBL株式会社 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ambl-rd)の8日目の記事になります。是非、他の記事も読んで見て下さい〜:santa_tone2:

最近の業務では自然言語系の案件にかかっているのですが、大規模言語モデルの技術発展のスピードにただただ驚く毎日です。この記事では、今年の11月末に発表された「[chatGPT](https://openai.com/blog/chatgpt/)」というGPT-3の進化版モデルに触れていきます。

# そもそもchatGPTってなんぞ？？

chatGPTは2022年11月末にOpenAIから発表された対話型言語モデルであり、GPT-3.5シリーズである[InstructGPT](https://openai.com/blog/instruction-following/)をベースに学習されたモデルです。簡単にいってしまえば、**「質疑応答をしてくれるAI」** であるのですが、その対話能力が非常に高く話題になっています。
chatGPTの特徴として、リリースサイトでは下記のように説明されています。

https://openai.com/blog/chatgpt/

> he dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. 
「ChatGPT はフォローアップの質問に答えたり、間違いを認めたり、間違った前提に異議を唱えたり、不適切な要求を拒否したりできます。」

「自分の発話の間違いや相手の発話の間違いを指摘できる」という知識に基づいた発話ができるそうですね〜。
会話自体も高い品質で行うことができるらしく、2022年12月時点でかなり話題になっております。

今回は、「実際、どれくらい質問を理解した発話を行えるのか？」という部分を色々検証してみました。
注意事項として、知識を問う問題に関しては応答結果に再現性がありませんでした。特に、歴史に関する質問の際に、再現性の無さを感じました。今回の結果も、エンターテイメントとして読んでいただけると幸いです。
興味ある方は、下記サイトから実際に遊んでみてください。

https://chat.openai.com/chat

# 検証内容
## その1: 言語の理解度

chatGPTの言語理解能力を測り方として、今回は日本語検定2級の例題をいくつか解いてみてもらいました。
ちなみに、日本語検定1級の問題はそもそもかなり難しいので、今回は「これくらいなら解けそうかな？」という筆者の主観で選定しております。

#### 語彙問題
<< 入力した質問文 >> 
```
（       ）に入る漢字として最も適切なものを①～④から選んで、それぞれ番号で答えてください。一つの漢字は一回しか使えないこととします。
1: 耳をつんざくような、（           ）たるジェット機のエンジン音で目を覚ました。
2: 社殿の裏手には（           ）と水がわき出る泉があり、土地の人に親しまれている。
①峨峨②轟轟③渾渾④汲汲
```

<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/4a888f40-c24b-4855-513c-e726feb546e2.png)

これは正解！語彙の穴埋めはMLMのタスクそのものなので得意なように思えますね。
（まぁ、「轟轟」なんて単語をどこで覚えてきたのやら,,,）

#### 意味理解
<< 入力した質問文 >> 
```
【 】の言葉を最も適切に使っているのは①～③のどの文でしょうか。
【不文律】
①駅前の再開発計画はまだ不文律の段階で、専門家の意見を聞いて改善していく予定です
②週末は、家族そろって朝食と夕食を食べる。それが我が家の不文律だ。
③地球が太陽の周りを回っているというのは、現代人にとっては不文律だ。
```

<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/f2bd25fe-6da8-7d44-8376-382fc6909d9b.png)

解答は②になります。chatGPTの回答文を読むと、各文の意味は正しく認識できていそうですが、「不文律」という単語の意味を間違えているようです。
```
解答の解説:
「不文律」は、正式な文章の形では示されていないものの、その集団の一員であれば、守らなければならないと皆が心のうちで理解している決まりのこと。よって、②の使い方が適切。①は「素案」、③は「常識」などがふさわしい文。
```

## その2: 計算能力
計算能力の測り方として、、四則演算、微分積分、文章問題をいくつか解いてみてもらいました。

#### 四則演算
<< 入力した質問文 >> 
```
計算問題です。 12 ✖️ (3 + 42) ÷ 9 = の答えは？
```
<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/549d738a-c824-04b3-d571-2b3c5e43cb23.png)

か、完璧な計算過程ですね、、、。
これが、**Chain of Thought Prompting**の効果ですかね。
少なくとも単純計算であれば、問題なく解けてしまいそうですね。


#### 三角関数の微分
<< 入力した質問文 >> 
```
計算問題です。	次の関数を微分してください。
y=cos(3x)−sin(−2x+1)
```
<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/464d2b3f-a5e3-7b0a-3435-b50e7c2335b8.png)

解答内容を表示すると下記のようになります。

$y=cos(3x)−sin(−2x+1)$
$\frac{dy}{dx}=\frac{d}{dx}[cos(3x)−sin(−2x+1)]$
$\frac{dy}{dx}=-3sin(3x)+2cos(-2x+1)$

これはすごいな...三角関数の微分までできるのか...

#### 確率統計
<< 入力した質問文 >> 
```
確率の計算問題です。あるチョコレート菓子には当たりくじがついており、1/40の割合で当たりが入っていることが知られている。また、当たりくじを5つ集めると景品がもらえる。このチョコレート菓子を100個買ったときに、当たりくじが5つ含まれる確率はいくらか。ただし、当たりくじが含まれる数Xはポアソン分布に従うものとする。
```
<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/bae246b9-2903-bd45-28fe-5aad1d3cd2e2.png)

解答内容を表示すると下記のようになります。

$P(X=k)=\frac{\lambda^k}{k!}e^{-\lambda}$
この問題の場合、$\lambda=1/40 \times 100 = 2.5$です。
さらに、$k=5$である必要があるため、$P(X=5)$を求めます。
$P(X=5)=\frac{2.5^5}{5!}e^{-2.5} \approx 0.04$

まず、ポアソンの公式を把握しており、変数の意味をちゃんと理解して代入することができていますね。
計算式の生成は、正しくできています。惜しむらくは、シンプルに計算ミス...
ちなみに答えは、**0.0668**です。


## その3: 歴史知識
ここでは、日本史の問題を解いてみてもらいました。
そもそも歴史を知識として把握しているのでしょうか。

#### 偉人の知識
<< 入力した質問文 >> 
```
問題です。日本で初めて天下統一を達成した戦国武将は誰でしょう？
日本で初めて天下統一を達成した戦国武将は豊臣秀吉ですよね？
```
<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/d0a262e7-4581-8a46-cd26-b726f69c57ce.png)

うーん、ここは豊臣秀吉と言って欲しかったところですが、徳川家康になってしまいました。
ここで気になるのは、「初めて天下統一をした人物 = 徳川家康」という理解をしている（徳川家康の生成確率が最も高い）のか、有名な戦国武将の名前をとりあえず出しているのか...

とりあえず、現状正しいと通説のある「豊臣秀吉」を答えとして教えておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/d6e0536a-a9f7-1e6e-0fb8-7f14bd310945.png)

なんか、パラレルワールドの豊臣秀吉を勝手に学習していますね。
ちょっと面白いので、これは訂正せずにこのままにしときましょう。

個人的に気になっている部分として、内容の正誤はともかく**「新しく学習した知識は後の会話に反映されるのか」**を検証してみましょう。という事で、以下の質問を続投します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/a533bb09-7761-2ae0-91d4-02037b44f0c9.png)

おぉー。ちゃんと答えが修正されている。
ちゃんと指摘した内容のupdateはできてそうですね。とは言っても、歴史を理解しているか、というお題としてはまだまだで「出現頻度の高い人名」くらいの意味解釈しかchatGPTでは表現できていなさそうですね。


#### あまり有名でない日本史用語
<< 入力した質問文 >> 
```
問題です。西暦743年に、聖武天皇は「新しく耕した土地は永久に私有を認める」という内容の規律を制定しました。この規律をなんという？
```
<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/b67e7ccf-3cae-d9da-7c3c-ecec66140341.png)

これは流石に無理か。。。
「墾田永年私財法」を答えられたら結構面白かったんですがね。


## その4: 専門的な知識（特にAI関連）
ここでは、G検定、E資格の問題をいくつか解いてみてもらいました。
学習データとしてAI関連のドキュメントがかなり多く存在すると思うので、今回の検証項目の中では個人的に一番期待しています。
いざ、検証！

#### 用語の意味理解
<< 入力した質問文 >> 
```
問題：以下に挙げる用語は、第二次AIブームが起こった際に取り上げられた問題である。
それぞれの問題の説明としてふさわしいものをそれぞれ1つずつ選び、理由も答えなさい。

（ア）フレーム問題
（イ）シンボルグラウンディング問題

1) 人間の持つ膨大な知識を体系化することが難しい。
2)有限な情報処理能力では、 知識を用いて現実のあらゆる問題を解くことは難しい。
3)単語の文字列などの記号と、それの表す意味を結びつけることが難しい。
4)膨大な知識を処理するための高速な計算機の開発が難しい。
5)十分なデータを取るためのインターネットを整備することが難しい。
```

<< chatGPTの答え >> 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/39b4f8ed-9aa5-8b2e-8ad3-7b253362efaf.png)

日本語検定の問題でもありましたが、表層的に出てこない情報を参照する（今回のような、単語だけ与えられてその意味を答えさせる）問題に関しては、まだまだできていなさそうですね。
理由も、記載内容を少し表現変えて言い直しているだけですね。

#### 用語の穴埋め問題
<< 入力した質問文 >> 
```
問題：以下の（ア）〜（エ）に最もよく当てはまる単語を、下記の1〜10の選択肢の中からそれぞれ選べ。
分類問題にはさまざまな性能指標がある。
ここでは、サンプルを陽性（Positive）と陰性（Negative）の2クラスに分ける2値分類を考える。
（ア）は単純にサンプル全体のうち、予測が正解したサンプル数の比を取ったものである。
また、偽陽性（False Positive, FP）を減らすことを重視する場合には（イ）を、逆に偽陰性（False Negative, FN）を減らすことを重視する場合には（ウ）を採用することが望ましい。
しかし、この両者はトレードオフの関係にあることから、それらの調和平均を取った（エ）が利用されることも多い。
1.正答率
2.実現率
3.協調率
4.調和率
5.適合率
6.再現率
7.f値
8.p値
9.t値
10.z値
```

<< chatGPTの答え >>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/d8a10167-b8b7-9f90-27b6-0defe1242a9c.png)

このレベルの単語であれば、流石に学習されていますね。何なら関連用語の説明もしてきてます。
また今回に関しては、用語の解説も正しいですね。これに関しては、どこかの用語解説文を丸暗記したかのような振る舞いにも見えますが...
まぁ、解説記事などが多そうなドキュメントに関しては、知識も豊富で受け答えがしっかりしていそうですね。

試しに、専門的な分野の説明をお願いすると、こんな答えが返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/7253850a-1670-3324-d256-2a132a97ef3d.png)

概ね、正しい事を言えていますね。（最後の3文のskip-gramの説明が変ですが...）
他にもResNetのモデル構造など、いくつか質問を投げていたところ、特に2010年以降の有名どころの論文に関しては大概答えられているように感じられました。
やはり、学習コーパスの中にそういったドキュメントが大量にあったんでしょうかね。

## その5: 思考力（想像力）
最後に、chatGPT君の想像力（ある事実情報からその背景にある事実を想像する）を検証してみます。
題材としては「ウミガメのスープ」で有名な水平思考ゲームの問いを投げてみたいと思います。
本来の水平思考ゲームは、お題に対して質問を繰り返して答えを導き出すゲームですが、今回は質問する過程がないので、chatGPT君がどんなストーリーを作成するかを確認します。

#### 難易度: 易しい
<< 入力した質問文 >> 
```
筋トレ好きの男はおすすめのダンベルは紹介してるのに、おすすめのプロテインは「自分が困るから」という理由で、絶対に教えてくれなかった。
その理由を想像してみてください。
```
<< chatGPTの答え >>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/63748da9-349b-4b14-af14-3da41ec1c355.png)

意外と、ストーリーを想像してくれていますね。また情報不足である事もしっかり指摘してきています（まぁ元々そういうゲームなんですけどね。）

```
この問いの答え:
紹介した商品が必ず品切れになるほど影響力がある男
消耗品のプロテインは自分が買えなくなってしまうため紹介しませんでした
既に持っているダンベルは品切れになっても困らないので紹介しています
```

#### 難易度: 難しい
<< 入力した質問文 >> 
```
喧嘩をして別れたばかりで怒りがおさまらない女が男の職場に入ってきた。
しかし、仲直りしてないはずの２人は楽しそうに話している。
このようなことが起こる理由を想像してみてください。
```
<< chatGPTの答え >>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346414/03a4cd60-a799-11e5-eb59-e424cfda7043.png)

結論、「時間が経って怒りがおさまった」というストーリーを想像していますね。
一応、筋が通るストーリーにはなっていますし、これは成功としても良いのでは？？
（若干、「感情的な話し合いをしたことで、喧嘩が解消されたと考えられます。」という表現が気にはなりますが...）

```
この問いの答え:
２人は女子アナと野球選手。
別れてすぐに男のホームスタジアムで取材がありました。
プライベートの事情をカメラに写すわけにはいかないので、２人とも笑顔を作ってインタビューをしています。
```

# 終わりに
いかがでしたでしょうか？？個人的には結構面白い結果が出たかなと思っています。
結果としては、質問に情報量が多い単語の穴埋め問題や、思考パターンがある程度制限される計算問題などは得意なようですね。一方で、単語の意味として正しいものを選ぶ問題や、水平思考ゲームなど、質問文の情報が少ない or 不足している場合に、その不足情報を知識または予測から補完するような思考はまだできていない、という印象でした。とはいえ、言語生成型の対話AIとして、まず文法崩壊を起こしていない日本語を生成できているだけでも素晴らしいです。

大規模言語モデルがとてつもない速度で発展する今日この頃、chatGPTのような話題になっているモデルを遊びがてら色々検証し、何が発展していて、何が課題として残っているかを把握しておく事が大事かなと思っています。
また、何か面白そうなものがあれば、記事にまとめていきたいですね。

# 参考資料
1. [Brown, Tom, et al. "Language models are few-shot learners." Advances in neural information processing systems 33 (2020): 1877-1901.](https://arxiv.org/abs/2005.14165)
1. [Wei, Jason, et al. "Chain of thought prompting elicits reasoning in large language models." arXiv preprint arXiv:2201.11903 (2022).](https://arxiv.org/abs/2201.11903) 
1. [日本語検定サイト](https://www.nihongokentei.jp/check/)
1. [微分積分例題集](https://w3e.kanazawa-it.ac.jp/math/q-and-a/bibun/henkan-tex.cgi?target=/math/q-and-a/bibun/bibun-question1-18.html)
1. [G検定例題](https://blog.trainocate.co.jp/blog/g-ken-sample_009#5db243e23f207618cdd00015-1571964680332)
1. [水平思考ゲーム](https://rkquiz.com/no111-120/)