人気ブログランキング | 話題のタグを見る
ブログトップ

EARLの医学ノート

drmagician.exblog.jp

敗血症をメインとした集中治療,感染症,呼吸器のノート.医療におけるAIについても

【AI】ChatGPTが生成するプログラムコードの1/4が誤った出力を含む

■ChatGPTが生成するプログラムコードは1/4が誤った出力との報告がarXivに出ている.もっとも,Code Interpreterを使いChatGPT上でのプログラム実行時にエラーが非常に多いのは経験している人も多いと思われる.では,どのようなエラーが多いのか,どこに注意すべきか,についてこの論文では研究結果から示している.医学/医療でも,ChatGPTのCode Interpreter機能を使用する際は基本的にはプログラミングの知識は不要で扱えるものの,出力が正しいかどうかに関しては,そのエラー等をちゃんと確認する必要がある.以下に論文Abstractと解説を書いた.
ChatGPTによるコード生成の改良:コード品質問題の特性評価とその対策
Liu Y, Le-Cong T, Widyasari R, et al. Refining ChatGPT-Generated Code: Characterizing and Mitigating Code Quality Issues. arXiv 2023 Jul.24[arXiv:2307.12596 [cs.SE]]https://arxiv.org/abs/2307.12596

Abstract

【目的】この論文では,我々は2,033のプログラミングタスクに対してChatGPTが生成したJavaとPythonという2つの人気のあるプログラミング言語で実装された4,066のコードの品質を系統的に調査した.この作業の目的は三つある.まず,ChatGPTがコード生成タスクに対する正確さを分析し,その効果に影響を与える要素,つまりタスクの難易度,プログラミング言語,タスクが導入される時間,プログラムのサイズを明らかにしする.次に,ChatGPTが生成したコードの品質に潜む問題を特定し,特性を明らかにする.最後に,これらの問題がどのように軽減されるかについての洞察を提示する.

【結果】実験結果から,ChatGPTが生成した4,066のプログラムのうち,2,757のプログラムが正しいと判断され,1,081のプログラムが間違った出力を提供し,177のプログラムがコンパイルエラーやランタイムエラーを含んでいることが判明した.さらに,我々は静的解析ツールを通じて生成されたコードの他の特性を分析し,コードのスタイルや保守性などを評価した.その結果,1,933のChatGPTが生成したコードスニペットが保守性の問題を抱えていることが判明した.その後,我々はChatGPTの自己デバッグ能力と静的解析ツールとの相互作用を調査し,前のステップで明らかにされたエラーを修正する方法を探った.実験結果から,ChatGPTはこれらの問題を部分的に解決し,コードの品質を20%以上向上させることができることが示唆されたが、まだ限界があり,改善の余地があった.

【結論】全体として,私たちの研究はChatGPTの現在の限界について重要な洞察を提示し,ChatGPTのようなAIモデルのコード生成能力を強化するための未来の研究と開発の道筋を示す.
1.「コードの誤った出力」の内容

■この論文では,ChatGPTによって生成されたプログラムコードの約1/4が誤った出力を提供するという結果が得られている.これらの誤った出力は以下の特徴を持つことが明らかになった.
誤ったアルゴリズムやエッジケースの不適切な処理:これらのエラーは,コードが構文的に正しく,ランタイムエラーがない場合でも発生する.ここでのエッジケースとは,プログラムが扱うべきデータや状況の中でも特に極端な状況や境界値を指す.例えば,配列の最初や最後の要素にアクセスする場合,0で割る操作,空のリストや文字列を処理する場合などがエッジケースの一例である.エッジケースの「不適切な処理」とは,これらの特殊な状況を適切に処理できず,予期しない結果やエラーを引き起こすことを指す.

コードの長さ:生成されたコードの長さが増えると,そのぶん不正確なコードやバグが発生しやすくなる.これは、コードのサイズが大きくなると,コードの複雑さが増し,コード要素間の潜在的な相互作用が増えるため,モデルが正確で完全な解を生成するのが難しくなるからである.

コードの品質と保守性:ChatGPTによって生成されたコードは,コードの品質や保守性に関する問題を抱えていることが多い.この論文では,具体的には,4,066の生成コードスニペットのうち1,933(47.5%)がコードスタイルと保守性に関連する問題を抱えていた.特に,ChatGPTに生成されたコードの中には、インデントが一貫していない、行が過度に長い、変数名が意味を持っていないなど、可読性を低下させる要素が目立っていた.

コンパイルとランタイムエラー:これらのエラーは,コードの正確な実行を妨げる問題を含む.これらのエラーは,プログラミング言語の構文の誤った使用,データ構造の不適切な処理,無効な入力,または配列の境界を超えるなど,さまざまな要因により発生する.
■一部の用語について解説を補足する.コードの品質は,プログラムのコードがどれだけ良いか,すなわち,そのコードがどれだけ効率的に,エラーなく、そして読みやすく書かれているかを指す.①正確性(コードが期待通りの動作をするか),②効率(コードがどれだけリソース(CPU時間,メモリなど)を効率的に使用しているか),③可読性(他の開発者がコードを理解しやすいかどうか),の3つで評価される.

■コードの保守性とは,ソフトウェアが将来的に変更や修正を容易に受け入れられる能力を指し,高い保守性を持つコードは,バグの修正、機能の追加、パフォーマンスの改善など、将来の変更を容易に行うことができる.①可読性,②モジュラリティ(コードが適切にモジュール(独立した部品)に分割されているかどうか),③ドキュメンテーション(コードの動作,目的,使用方法が適切に文書化されているか),の3つで評価される.

■コンパイルエラーは,プログラムのソースコードをコンピュータが理解できる形式(通常はバイナリ形式)に変換する過程(これをコンパイルと言います)で発生するエラーである.コンパイルエラーは,主にプログラムの構文が正しくない場合に発生する.例えば,括弧が閉じられていない,予約語が誤って使用されている,必要なセミコロンが欠けているなどがある.コンパイルエラーが存在するとプログラムは実行可能な形式に変換されず,その結果,プログラムは実行されない.

■ランタイムエラーは,プログラムが実行中に発生するエラーであり,プログラムの構文が正しくても発生する.ランタイムエラーの一般的な例としては,ゼロ除算エラー(数値をゼロで割る操作),null参照エラー(存在しないオブジェクトを参照する操作),配列の範囲外アクセス(存在しない配列の要素にアクセスする操作)などがある.ランタイムエラーが発生すると,プログラムは予期しない動作をするか,または完全に停止する.

2.コードの誤った出力の解決方法は?

■この論文では,ChatGPTが生成したコードの誤った出力を解決するための以下にいくつかの方法が提案されている.特にフィードバックを用いた場合,ChatGPTに品質の問題を解決させる試みが行われ,20-60%の問題が修正できることが示されている.ただし,同時に,フィードバックによる新たな品質の問題(ノイズやエッジケースの問題で,修正することで新たにエラーが発生する)も生じることに注意が必要である.
静的解析とランタイムエラーによるフィードバック:静的解析ツールからのフィードバックは,コードの品質問題について詳細な情報を提供し,ChatGPTがこれらの問題を自己緩和するためのガイドとなる.例えば,静的解析ツールはコードスタイルや保守性の問題について警告を発し,その問題の位置や解決策まで詳細に提供する.これにより,ChatGPTは問題を簡単に緩和できる.

シンプルなフィードバック:実行エラーや間違った出力などの残りの問題に対しては,シンプルなフィードバックがより効果的であることが示されている.これは,静的解析やランタイムエラーによるフィードバックがノイズを導入し,ChatGPTを混乱させ,誤ったパッチを導く可能性があるためである.

プロンプトエンジニアリング:ChatGPTが生成するコードの品質はChatGPTに入力するプロンプトの質に大きく影響される.効果的なプロンプトは,ChatGPTがより正確で信頼性の高いコードを生成するのを助ける.

AIモデルの改善:タスクの難易度,タスクの設定時間,プログラムのサイズなどの要素がChatGPTのパフォーマンスに大きな影響を与えることが示されている.これらの要素を考慮に入れてAIモデルを改善することで,さまざまなタイプのコード生成タスクに対応できるようになると提案されている.
■静的解析ツールとは,プログラムのソースコードを実行せずに分析し,潜在的なエラーや問題を検出するソフトウェアツールのことを指す.静的解析はコードが実行される前に行われるため,ランタイムエラーやその他の問題を予防するのに役立つ.
by DrMagicianEARL | 2023-07-26 11:35 | 医学・医療とAI

by DrMagicianEARL