$30 off During Our Annual Pro Sale. View Details »

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によるプログラミング
    授業の課題の解答生成の評価
    鈴木 智也†, ○神谷 年洋†
    † 島根大学自然科学研究科
    電子情報通信学会 SIGSS 2023年7月研究会, 2023-07-21.
    1

    View Slide

  2. プログラミング授業の課題、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

    View Slide

  3. ChatGPTとは
    大規模言語モデルによるAIチャットボット
    人間がテキスト(プロンプト)を入力すると、それ
    に対する反応(応答)を出力する
    ChatGPT-3.5と呼ばれるモデルの訓練データは
    (2021年9月時点の)Web ページ、書籍、
    Wikipediaを含む45TBのデータから選別された、
    570GBのテキストデータ
    ChatGPT-4と呼ばれるさらに大規模なモデルも提供
    れている(モデルの詳細は非公開)
    プラグインが利用できる(ChatGPT 自身がウェブ
    検索を行い、その結果応答を生成する等)
    Code Interpreter Beta: Pythonのインタプリタ
    を利用してコードを実行する機能 (2023年7月上
    旬)
    コードを生成して実行するのが簡単に(右図
    は、エラトステネスのふるいのアルゴリズムを
    実装してもらってそのまま実行した例)
    3

    View Slide

  4. 実験の対象は、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

    View Slide

  5. 実験の対象は、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

    View Slide

  6. 実験の対象は、1年生を対象とするプログラ
    ミング言語Pythonを利用した2つのプログラ
    ミングの授業
    (1) オブジェクト指向プログラミング
    (OOP): 基礎。オブジェクト指向プログ
    ラミングの概念、Pythonの文法、基本的な
    アルゴリズム、標準ライブラリについて学

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

    View Slide

  7. ea041 の
    出題文と解答
    ea042 の
    出題文と解答
    プロンプトは
    課題の出題文
    (プログラムの仕様や
    動作確認の方法の指示)
    応答の中のコードフェン
    スで囲われたものを解答
    とする
    続きものの課題では、
    前の課題の解答を元に、
    取り組むべき内容を指示
    プロンプト
    ChatGPT-3.5をAPI経由で利用した場合
    出題文の前に指示を付ける
    「You are a Python programmer.」
    「次のプログラミングに関する出題の解答
    を,コードフェンスで囲って出力してくださ
    い:」
    ChatGPT-4をWebから利用した場合
    課題の出題文のみをプロンプトとした
    (それだけでも十分に機能した)
    続きものの課題の場合は、同じセッシ
    ョンに出題文を続けて入力
    (例)課題ea041と、続く課題ea042を含む
    セッション(右図)
    7

    View Slide

  8. 研究設問(RQ)
    攻撃者を想定してRQをたてる
    攻撃者ペルソナ:「自分では一切テキストを編集せず、コピペで解答を提出しようとする受講
    者」
    RQ1 ChatGPTはプログラミングの課題を解くことができるか
    RQ2 ChatGPT-3.5と4とで性能の違いはあるか
    RQ3 ChatGPTを利用して解くのが難しい課題の傾向はあるか
    ※ サンプルサイズが小さいため、統計的な検定は目指さない
    8

    View Slide

  9. 実験の手順:
    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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. プロンプトが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

    View Slide

  13. 課題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

    View Slide

  14. 課題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

    View Slide

  15. RQ3 ChatGPT を利用して解く
    のが難しい課題の傾向はあるか
    網羅的な結果は出せないながらも、実験した中では:
    プログラムを作成するだけではなく、途中で分析を行
    ってプログラムに反映する必要がある課題
    a043の場合、URLを指定してダウンロードした
    CSVの表から、列の名前を取得して、それを
    PandasのAPIに与える(問題分に明示的に指示と
    して書かれていない)作業を行う必要があった
    何度も場合分けするなど複雑なアルゴリズム(ロジッ
    ク)を求められる課題
    右図はa091の解答例の一部
    15

    View Slide

  16. 妥当性の脅威
    サンプルサイズが小さい(OOP授業の課題35個、AP授業の課題17個)ため、定量的な
    結果は導けていない。また、詳細な考察の事例はさらに少数である
    トークン制限の扱いが不明瞭である。特に、ChatGPT-4はWeb UIにより利用したが、
    実験の途中でプロンプト単独としてもトークン数の制限があることが判明した
    単純なプロンプトへの応答ではなく、chain-of-thought, self-critiqueなどの手法を利用
    したり、ChatGPTのプラグインやCode Interpreterを利用することで、正解できる課題
    が増える可能性がある
    英語圏の同様の研究と比較すると、ChatGPTの日本語能力と英語能力の違いが結果に影
    響している可能性がある。特に、同じ内容のテキストをトークン化したときに、英語と
    比較して日本語ではトークン数が多めになるといわれており、課題の出題文を英語に翻
    訳すると能力が上がる可能性がある
    ChatGPT-4のトークン制限が緩和されると正解できる課題が増えることが予想される
    16

    View Slide

  17. 関連研究
    大学の学部のプログラミング演習で、学生を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

    View Slide

  18. (つづき)
    ソースコード中の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

    View Slide

  19. まとめ
    大学1年生を対象とするPythonによるオブジェクト指向プログラミングの、基礎
    (OOP)および応用(AP)の2つの授業の課題を実験対象とした実験を行った
    ChatGPT-3.5およびChatGPT-4に課題を解かせてそのまま提出するようなコピペ解答者
    を想定し、その解答がどのくらいの割合で正解となるかを調査した
    ChatGPT-4を用いれば、授業に十分合格する(AP授業の76%の課題に正答する)とい
    う結果を得た
    ChatGPT-4の解答が正解にならなかった課題について、その特徴を分析し考察を行った
    本稿の実験や考察が、プログラミング教育に携わっている諸氏の授業の立案や設計に少しでも参考になれ
    ば幸いです。
    19

    View Slide

  20. 処方箋???
    日進月歩のAI技術の進化に常時アンテナを張りながら、
    トークン数の制限の緩和(10億トークンを処理できるLongNet等)
    プログラミング用のAI(Code Interpreter、Code Copilot等)
    漠然とした「プログラミング」授業から脱却して、明確な目的を持つ授業に分化させる
    プログラミングの基礎や概念を学ぶ授業(九九を学ぶように)
    実験や分析のためにプログラミングを行う授業
    より大きなコードを開発・保守する授業
    短期的には:
    プログラミングだけでは完結しないもの
    実験や分析のステップを入れる
    仕様のボリュームが大きいもの(コードより自然言語の記述が大きくなる)
    ⇔ 「テトリスを作成する」みたいに圧縮された概念が存在するものではなく
    大きなコードを与えて、テスト、不具合修正、リファクタリングするもの
    ChatGTPの利用を前提とし、コードを生成させて組み合わせることで、大きなコードを
    生成するもの
    20

    View Slide

  21. ChatGPT Code Interpreter Beta
    ChatGPTからPythonインタプリターを呼び出す機能
    ファイルのアップロード、ダウンロードの機能
    利用例: Excelのファイルの処理
    Excelのファイルをアップロード
    データの修正(前処理など)や集計の内容を自然言語でお願い
    生成したPythonコードをアップロードしたファイルに適用
    出力されたExcelのファイルをダウンロード
    21

    View Slide