ChatGPT3.5&4.0で競技プログラミングAtCoderの問題のスキル推定を検証しました
こんにちは、株式会社Hugkunの上江田です。
今回、ChatGPTでの属性推定の検証として、競技プログラミングの1つであるAtCoderの問題のスキル推定を行なってみました。
属性推定というと「年齢」や「性別」といった項目での推定が一般的ですが、今回はアルゴリズムスキルを指標に推定することを目指しています。
検証方法
ChatGPTのプロンプトにAtCoderの問題文と解説文、正解コードを読み込ませ、以下のアルゴリズムスキルごとに推定を行いました。
SKILL_SET = [
"標準入出力",
"if文",
"for文",
"while文",
"リスト(データ構造)",
"セット(データ構造)",
"文字列操作",
"dict(連想配列)",
"ソート",
"set",
"ユーザー定義関数",
"二分探索",
"ユークリッド互除法",
"全探索",
"Bit全探索",
"再帰関数",
"ユークリッド距離",
"二進法",
"multiset",
"ランレングス圧縮",
"DP",
"グラフ理論入門",
]
推定対象
推定するのはAtCoder Beginners Contest(通称ABC)のA, B, C問題です。
問題の難易度は基本A<B<Cの順になっています。
使用したコンテスト範囲はABC289-293の計5回分です。
プロンプト内容
共通プロンプト内容↓
{ "skill" : string, "evaluation" : integer, "reason" : string }
問題文や解説文、正解コードといった問題ごとに変化させるプロンプト内容(以下はABC289のA問題の例)↓
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
for (char c : s)
if (c == '0')
cout << '1';
else
cout << '0';
cout << endl;
return 0;
}
推定結果例
以下は上記プロンプトで「文字列操作」を推定時の返答
{
"skill": "文字列操作,
"evaluation": 2,
"reason": "この問題は文字列の各文字を取り出し、それが0なら1に、1なら0に置き換えるという文字列操作が必要です。この操作は基本的な文字列操作の一つであり、簡単に実装できるべきスキルです。したがって、評価は2となります。"
}
Accuracy算出方法
必要スキルの判定方法
Accuracyを求めるには各問題ごとに必要なアルゴリズムを決めなければいけないのですが、すでに用意しているそういったデータはありませんでした。そのため今回は私個人の主観で「必要なスキル」、「解き方によっては活用できるスキル」、「必要ないスキル」の3つに分類しました。
その中でも「解き方によっては活用できるスキル」に関しては、for文で十分だけれどwhile文でも解ける、といった場面でのwhile文のように重要度が低いスキルを分類したため、Accuracyの算出からは除外しました。
主観による分類割合
必要なスキル:68/330
解き方によっては活用できるスキル:26/330
必要ないスキル:236/330
※判定するスキル数:22 × コンテスト数:5 × 1コンテストあたりの問題数:3 = 330
ChatGPTの推定結果との比較方法
GPTの推定基準はプロンプト内容にあるように、以下の通りです。
このうち0-1ならば必要ないスキル、2以上であれば必要なスキルと判断されたものとして人力で分類した結果と比較します。
結果
GPT3.5
必要ないと分類したスキル(236/330)のうち、0 または 1と推定された割合:56.78%
必要と分類したスキル(68/330)のうち、2 以上と推定された割合:95.59%
Accuracy: 65.46%
GPT4
必要ないと分類したスキル(236/330)のうち、0 または 1と推定された割合:92.65%
必要と分類したスキル(68/330)のうち、2 以上と推定された割合:88.98%
Accuracy: 89.80%
所感
GPT3.5では必要のないスキルに対しても必要と出やすく、GPT4では必要なスキル数が絞られている様子がみられました。
これはGPT4の方がGPT3.5よりも事実に基づいた回答を行えることが影響していると考えられます。
検証結果としてGPT4の結果であれば精度は高い方だと思いますが、今回のスキル単体ごとに推定する方法だとすべてのスキルに対する推定に時間(料金も…)がかかるため、それに見合う精度としてはもう少し欲しかったように思います。
おわりに
今回の検証はGPT3.5とGPT4の精度の差を実感した結果となりました。
料金の壁はあるものの、GPT4であれば専門的な領域でも活用シーンが広がってくるのではないかと感じました。
この記事が気に入ったらサポートをしてみませんか?