Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChatGPT によるプログラミング授業の課題の解答生成の評価

ChatGPT によるプログラミング授業の課題の解答生成の評価

鈴木 智也, 神谷 年洋, 電子情報通信学会技術研究報告, Vol. 123, No. 124, SS2023-10, KBSE2023-21, pp. 55-60, 2023-07-21.

Toshihiro Kamiya

July 21, 2023
Tweet

More Decks by Toshihiro Kamiya

Other Decks in Science

Transcript

  1. プログラミング授業の課題、ChatGPTで解ける説 arXivにアップロードされた次では、MITの学部向けの数学、コンピュータ・サイエンスの授 業の課題、中間試験、期末試験をGPT-4ですべて解くことができると報告 [13] Sarah J. Zhang et al., “Exploring

    the MIT Mathematics and EECS Curriculum Using Large Language Models,”https://doi.org/10.48550/arXiv.2306.08997, 2023/01/15. その反論もアップロードされ、再実験の結果58%で正解になるという結果 Raunak Chowdhuri, Neil Deshmukh, and David Koplow, “No, GPT4 can’t ace MIT”, taken from https://flower-nutria-41d.notion.site/No-GPT4-can-t-ace-MIT- b27e6796ab5a48368127a98216c76864#d4bea55e46b5490184bf797f96de35c0, 2023/06/18. 次の文献では、ChatGPTがソフトウェアテストの教科書の質問に答えられるかを実験的に評 価したところ、77.5%に回答することができ、その55.6%で完全または部分的に正しい解答 を提供 [3] Sajed Jalil, Suzzana Rafi, Thomas D. LaToza, Kevin Moran, Wing Lam, “ChatGPT and Software Testing Education: Promises | Perils,” Proc. 2023 IEEE International Conference on Software Testing, Verification and Validation Workshops (ICSTW), 2023, pp. 4130–4137, doi: 10.1109/ICSTW58534.2023.00078. 皆さんの周りでも同じような声を聞きませんか? 2
  2. ChatGPTとは 大規模言語モデルによるAIチャットボット 人間がテキスト(プロンプト)を入力すると、それ に対する反応(応答)を出力する ChatGPT-3.5と呼ばれるモデルの訓練データは (2021年9月時点の)Web ページ、書籍、 Wikipediaを含む45TBのデータから選別された、 570GBのテキストデータ ChatGPT-4と呼ばれるさらに大規模なモデルも提供

    れている(モデルの詳細は非公開) プラグインが利用できる(ChatGPT 自身がウェブ 検索を行い、その結果応答を生成する等) Code Interpreter Beta: Pythonのインタプリタ を利用してコードを実行する機能 (2023年7月上 旬) コードを生成して実行するのが簡単に(右図 は、エラトステネスのふるいのアルゴリズムを 実装してもらってそのまま実行した例) 3
  3. 実験の対象は、1年生を対象とするプログラ ミング言語Pythonを利用した2つのプログラ ミングの授業 (1) オブジェクト指向プログラミング (OOP) : 基礎。オブジェクト指向プログ ラミングの概念、Pythonの文法、基本的な アルゴリズム、標準ライブラリについて学

    ぶ (2) アプリケーションプログラミング演習 (AP): 応用。具体的なアプリケーション を、主にサードパーティーのライブラリを 再利用して実装する方法を学ぶ OOP課題 説明 o031〜o034 import文, 基本的な関数, if文 o035 random o041〜o044 for文, while文, break文, time o045 簡単な式のパーザー o051, o052 文字列の扱い o053〜o055 リストの扱い o056 str.join o061〜o063 辞書の扱い o071 集合の扱い o072 sorted関数, dict.items o073 集合の扱い, ファイルの扱い o074 strのスライス, 辞書の扱い o081〜o083 関数定義, calendar o084 関数を抽出する書き換え o085 lambda, sorted関数のkey引数 o091〜o093 クラスの定義 o101, o102 メソッドの定義 o111, o112 例外処理 実験対象のプログラミング授業 4
  4. 実験の対象は、1年生を対象とするプログラ ミング言語Pythonを利用した2つのプログラ ミングの授業 (1) オブジェクト指向プログラミング (OOP): 基礎。オブジェクト指向プログ ラミングの概念、Pythonの文法、基本的な アルゴリズム、標準ライブラリについて学 ぶ

    (2) アプリケーションプログラミング演習 (AP) : 応用。具体的なアプリケーション を、主にサードパーティーのライブラリを 再利用して実装する方法を学ぶ AP課題 説明 a031 コマンドライン引数 a032 ヘルプメッセージの作成 a033 docoptの利用 a041 pandasによるCSVの読み込み a042* matplotlibの利用 a043 pandasのiterrowによる繰り返し a052 OpenCVによる画像の読み込みと matplotlibによる画像表示 a053* DNNによる顔認識 a054* OpenCVによる画像の切り出し a081 Flaskサーバーの利用用法 a082* ToDo管理Webアプリ a091 Janomeによる形態素解析を行い 日本語のの曖昧検索を実現 a092 日本語ワードカウントと文字列置換 a093 BeautifulSoupによるテキスト抽出 a101 YouTube動画からの字幕取得 a102 時間の表記から整数への変換 a103 時間指定付きの字幕取得 ※ 「 * 」が付けられている課題は、直前の課題の解答か ら修正していく「続きものの課題」 実験対象のプログラミング授業 5
  5. 実験の対象は、1年生を対象とするプログラ ミング言語Pythonを利用した2つのプログラ ミングの授業 (1) オブジェクト指向プログラミング (OOP): 基礎。オブジェクト指向プログ ラミングの概念、Pythonの文法、基本的な アルゴリズム、標準ライブラリについて学 ぶ

    (2) アプリケーションプログラミング演習 (AP): 応用。具体的なアプリケーション を、主にサードパーティーのライブラリを 再利用して実装する方法を学ぶ 課題の採点方法: 採点は振る舞いによる(基本的には) 課題ごとに用意した入力データを各 解答プログラムに与えて実行して出 力を取得 解答例プログラムの出力、および、 全受講者の解答プログラムの出力を テキストの類似度によりデンドログ ラムとして分類して採点 解答例プログラムに近いものから高 い点数になるようにする ただし、構文の指定(「for文を使う」 等)がある課題、特異な解答プログラム についてはソースコードを参照する 実験対象のプログラミング授業 6
  6. ea041 の 出題文と解答 ea042 の 出題文と解答 プロンプトは 課題の出題文 (プログラムの仕様や 動作確認の方法の指示)

    応答の中のコードフェン スで囲われたものを解答 とする 続きものの課題では、 前の課題の解答を元に、 取り組むべき内容を指示 プロンプト ChatGPT-3.5をAPI経由で利用した場合 出題文の前に指示を付ける 「You are a Python programmer.」 「次のプログラミングに関する出題の解答 を,コードフェンスで囲って出力してくださ い:」 ChatGPT-4をWebから利用した場合 課題の出題文のみをプロンプトとした (それだけでも十分に機能した) 続きものの課題の場合は、同じセッシ ョンに出題文を続けて入力 (例)課題ea041と、続く課題ea042を含む セッション(右図) 7
  7. 実験の手順: ChatGPTに課題の出題文をプロンプト として与え その応答中のコードフェンスに囲まれ た部分をそのまま解答として採点する 応答中に複数のコードフェンスが含まれ る場合: どれか一つが単体で正解であれば、正 解として扱う 編集手順が示されれば従う

    独自に判断して編集しないといけない ものは不正解として扱う 採点 説明 満点 想定した解答例と同じ出力 部分点 想定した解答例と一部異なる 出力 0点 実行できない(エラー)、 出題文のコードのコピー、 課題とは全く関係ない機能 利用したモデル: ChatGPT-3.5, APIによる利用, gpt-3.5-turbo-16k (2023/06/ 15時点のも の) ChatGPT-4, Web UIによる利用, ChatGPT May 24 Version (2023/06/15時 点のもの) 実験のセットアップ 9
  8. OOP課題 の率: 91% (= 32 / 35) 間違いの内容: 出題 トランプの数をA,

    2, ..., 10, J, Q, K と 出力することを求めていた 解答 1, 2, ..., 10, 11, 12, 13と出力していた 出題 不正な入力の具体例とその入力を与 えたときの実行時エラーを示していた 解答 不正な入力を無視する処理になってい た sysモジュールのインポートを削除したた め実行できないプログラムになっていた AP課題 の率: 35% (= 6 / 17) 間違いの内容: 仕様の読み間違い 添字の0ベースと1ベースで変換する必 要がある課題で変換をしない 1つの都市に対するデータ処理を要求し ているところで2つの都市に対して行う プログラムを生成 形態素解析せよという指示を無視 出力フォーマットが異なる 求めている機能を実装しない サンプルとして示したプログラムをその まま解答プログラムとした サードパーティーのライブラリの仕様を 誤解していた ChatGPT-3.5による結果 10
  9. ChatGPT-4にはAP課題についてのみ解答の 作成をお願いした AP課題の正答率: 76% (= 13 / 17) AP課題の間違いの内容: 出題

    URLで指定されているCSVデータを ダウンロードして、列の見出しを取得しな いと正しいプログラムが書けない 解答 見出しが間違っていたため正常に動作 しなかった 出題文 検索を行う問題で、一致率が最大 のものをすべて出力するように求めていた 解答 一致率が最大のものを1つだけ出力す るようになっていた 独立したプログラムを複数出力してい て、切り貼りしないと動作しない 複数のプログラムを解答してともに不正 解 RQ1 ChatGPTはプログラミングの課題 を解くことができるか → ChatGPT-3.5はOOP授業に合格する。 ChatGPT-4はAP授業に合格する RQ2 ChatGPT-3.5と4とで性能の違いは あるか → ChatGPT-3.5よりChatGPT-4のほうが 能力が高い (AP課題で 35% vs 76%) ChatGPT-4による結果 11
  10. プロンプトがChatGPTのトークン制限より 長いための誤答ではないか? a032 a053 a081 a082 a093 a102 a031 a033

    ea041 a042 a052 a054 a101 a043 a091 a092 a103 0 100 200 300 400 500 600 700 800 900 1,000 0 1,000 2,000 3,000 4,000 5,000 6,000 解答長(トークン) 累計出題長(トークン) ▪ 両モデルとも非「◦」 + ChatGPT - 4 でのみ「◦」 • 両モデルとも「◦」 図2: AP 課題のトークン長とChatGPTの解 答の採点 ※ 「解答例」のトークン長を利用 ChatGPT4のセッション(課題、解答をす べて含む)のトークン数を計測 a043(3794トークン)、a091(5618トー クン)についてはChatGPT-4 のトークン 制限よりも短い a092(8441トークン)、a103(8164) については、ChatGPT-4のトークン制 限による誤答が疑われる RQ3に関して、ChatGPTが誤答する課題の分析 ChatGPTのセッションのトークン数では、解 答も累積し、また、解答プログラム以外に ChatGPTが生成した説明も含まれるため、図 のグラフとは数字が乖離しています 12
  11. 課題a043の出題文 気象庁では、ウェブサイトで降水量のCSVデー タを配布しています。 https://www.data.jma.go.jp/obd/stats/data/m drr/docs/csv_dl_readme.html 例えば、次は、日本の各地のその日の降水量の データです。 https://www.data.jma.go.jp/obd/stats/data/m drr/pre_rct/alltable/predaily00_rct.csv Pandasは、ネットで配布されているCSVデー

    タを取得する機能があり、これを利用すると、 気象庁が配布している降水量データも次のよう にして取得することができます。 次のプログラムは、このデータをダウンロード し、その一部を表示するサンプルです。 import pandas as pd # 日本の各地のその日の降水量のデータを取得(表形式) table = pd.read_csv('https://www.data.jma.go.jp/obd/stats/data/mdrr/pre_rct/alltable/predaily00_rct.csv', encoding='shift-jis') # print(table) # デバッグ用 print(list(table.columns)) # 表のすべてのカラムの見出しを表示(デバッグ用) # 表のベテの行のインデックス1のカラムをすべて表示 for idx, row in table.iterrows(): # 表の各行について繰り返し print(row[1]) このサンプルを参考に、引数で与えた地名が含 まれるデータの降水量を表示するプログラムを 作成してください。 (完成したプログラムの実行例) $ python3 main.py 渡島 北海道 渡島地方, 長万部(オシャマンベ), 26.5mm 北海道 渡島地方, 八雲(ヤクモ), 0.5mm 北海道 渡島地方, 森(モリ), 0.0mm 北海道 渡島地方, 大沼(オオヌマ), 0.5mm 北海道 渡島地方, 川汲(カックミ), 1.0mm 北海道 渡島地方, 北斗(ホクト), 0.0mm 北海道 渡島地方, 函館(ハコダテ), 0.0mm ... 課題の特徴: 中間ステップのプログラムを実 行してその結果から出題文にない仕様を読み 取る必要があった 13
  12. 課題a091の出題文 次のプログラムは、文字列を含む行を探す機能 を持ちます。 import sys query = sys.argv[1] file_name =

    sys.argv[2] with open(file_name) as inp: lines = inp.read().split('\n') line_num = 0 for line in lines: line_num += 1 if query in line: print(f"{line_num}: {line}") このプログラムを、コマンドライン引数により クエリ文字列とファイル名を与えて実行する と、そのファイルの行のうちでクエリ文字列を 含むものを、行番号付きで出力します。 (実行例) ... ... ステップ3 クエリ文字列を形態素解析により単語に分割し て、それらの単語をすべて含む行があればその 行を出力。もし、単語をすべて含む行が1行も ない場合には、それらの単語をなるべく多く含 む行を出力。ただし、すべての行が単語を0個 しか含まない場合には、何も出力しない。 ただし、クエリ文字列中に同じ単語が2回以上 含まれる場合については考えなくても良いこと します。例えば「トム・クルーズのスタントの 撮影」なら「の」が2回含まれますが、そのよ うな場合に「の」をどのように数えるかについ ては考えなくて良いこととします。 (実行例1) ... 課題の特徴: 必要とされる処理のなかで何回 かに渡って場合分けを行うなど複雑なアルゴ リズムを求められていた 14
  13. 妥当性の脅威 サンプルサイズが小さい(OOP授業の課題35個、AP授業の課題17個)ため、定量的な 結果は導けていない。また、詳細な考察の事例はさらに少数である トークン制限の扱いが不明瞭である。特に、ChatGPT-4はWeb UIにより利用したが、 実験の途中でプロンプト単独としてもトークン数の制限があることが判明した 単純なプロンプトへの応答ではなく、chain-of-thought, self-critiqueなどの手法を利用 したり、ChatGPTのプラグインやCode Interpreterを利用することで、正解できる課題

    が増える可能性がある 英語圏の同様の研究と比較すると、ChatGPTの日本語能力と英語能力の違いが結果に影 響している可能性がある。特に、同じ内容のテキストをトークン化したときに、英語と 比較して日本語ではトークン数が多めになるといわれており、課題の出題文を英語に翻 訳すると能力が上がる可能性がある ChatGPT-4のトークン制限が緩和されると正解できる課題が増えることが予想される 16
  14. 関連研究 大学の学部のプログラミング演習で、学生をChatGPTを利用する群と利用しない群に分け て、学生の自己評価を比較し、利用する群のほうが、効率や意欲が優位に高くなった Ramazan Yilmazら, "The effect of generative artificial

    intelligence (AI)-based tool use on students' computational thinking skills, programming self-efficacy and motivation," Computers and Education: Artificial Intelligence, Volume 4, 2023, 100147. https://doi.org/10.1016/j.caeai.2023.100147. 大学の学生をChatGPTを利用する群と、ネットへのアクセスをブロックした群に分けて、プ ログラミングの課題を解く実験を行った。平均的な成績はChatGPTを利用した群のほうが高 くなった一方で、生成されるコードの長さ制限や幻覚(ハルシネーション)のためにデバッ グが難航し、課題を解くのにかかる時間が長くなった Basit Qureshi, "Exploring the Use of ChatGPT as a Tool for Learning and Assessment in Undergraduate Computer Science Curriculum: Opportunities and Challenges," https://doi.org/10.48550/arXiv.2304.11214, 2023/04/16. プログラム修正ベンチマークセットであるQuixBugsでChatGPTを実験的に評価した。 ChatGPTが対話システムであることを利用し、観測されたエラーメッセージなどの追加情報 与えることで、他の手法を上回った Dominik Sobaniaら, "An Analysis of the Automatic Bug Fixing Performance of ChatGPT," 4th International Workshop on Automated Program Repair (APR 2023), https://doi.org/10.48550/arXiv.2301.08653, 2023/01/20. 17
  15. (つづき) ソースコード中のAPI呼び出しに関するファインチューニングを行ったLLaMAベースのLLM により、幻覚を抑制し、API呼び出しのコードを精度良く生成できた Shishir G. Patilら, "Gorilla: Large Language Model

    Connected with Massive APIs," https://doi.org/10.48550/arXiv.2305.15334, 2023/05/24. 対照実験により、開発者向けのテキスト生成AIであるGitHub Copilotを用いることでHTTP サーバーの開発が55.8%速く完了した Sida Pengら, "The Impact of AI on Developer Productivity: Evidence from GitHub Copilot," https://doi.org/10.48550/arXiv.2302.06590, 2023/02/13. 国際プログラミングコンテストであるIEEExtreme Challengeをベンチマークとして利用 し、プログラミング言語としてPython、Java、C++を含む102個の課題を解いた。 ChatGPT-4であっても人間のプログラマーに敵わなかった Anis Koubaaら, "Humans are Still Better than ChatGPT: Case of the IEEEXtreme Competition," https://doi.org/10.48550/arXiv.2305. 06934, 2023/05/10. 18
  16. 処方箋??? 日進月歩のAI技術の進化に常時アンテナを張りながら、 トークン数の制限の緩和(10億トークンを処理できるLongNet等) プログラミング用のAI(Code Interpreter、Code Copilot等) 漠然とした「プログラミング」授業から脱却して、明確な目的を持つ授業に分化させる プログラミングの基礎や概念を学ぶ授業(九九を学ぶように) 実験や分析のためにプログラミングを行う授業 より大きなコードを開発・保守する授業

    短期的には: プログラミングだけでは完結しないもの 実験や分析のステップを入れる 仕様のボリュームが大きいもの(コードより自然言語の記述が大きくなる) ⇔ 「テトリスを作成する」みたいに圧縮された概念が存在するものではなく 大きなコードを与えて、テスト、不具合修正、リファクタリングするもの ChatGTPの利用を前提とし、コードを生成させて組み合わせることで、大きなコードを 生成するもの 20