AIはコーディングできるのか?ベイビーステップのみ
コーディングのキャリアを諦めないでください。研究によると、生成 AI はコーディングに関してはまあまあの仕事しかできず、難しい問題では見事に失敗します。
昨年の冬に OpenAI が ChatGPT を一般公開した最初のスリリングな日々には、このプログラムがコンピュータ コードを生成する能力があるという証拠がもたらされましたが、これは開発者にとっては啓示でした。当初、ChatGPT はコードが非常に優れているように見えましたが、実際、突然、コーディングの知識がほとんどない人でも ChatGPT を使用して強力なソフトウェアを生成できるようになり、コンピューター ネットワークを脅かすマルウェアとして使用することもできるほど強力になりました。
何ヶ月にもわたる経験と、この問題に関する正式な調査により、ChatGPT やその他のそのような生成 AI は、それ自体では実際にはプログラムを開発できないことが明らかになりました。彼らができる最善のことは、主に単純なコーディングの問題に対して、基本的な手順を提供することですが、それは人間のプログラマーにとって役立つかどうかはわかりません。
AI スタートアップの共同創設者兼 CEO のナヴィーン・ラオ氏は、「ジェネレーティブによってみんなの目が開かれたのは、創造的な障害を乗り越えるための提案を本質的に与えてくれる仕事をしているときに、ほぼパートナーがいるという事実だ」と語った。 MosaicML は 8 月に Databricks によって買収されました。
同時に、コーディングに対する支援のレベルは低い、とラオ氏は述べた。
「それらは足場を与えてくれるものであり、いくつかの繰り返し可能なことはあるが、特に良いものは何も与えてくれない」と彼は言う。 「私がこの非常に難しい問題を解決してくださいと言っても、彼らにはそんなことはできませんよね? 彼らは特に優れたコードを書くわけでもありません。それは、それを 1 ~ 2 年やっている人のような、ある種のレベルのコードです」 。」
実際、いくつかの研究では、GPT-4 などの大規模な言語モデルは、全体的なコード品質レベルにおいて人間のプログラマーのモデルよりもはるかに低いことが判明しています。
テキサス工科大学の学者、サイード・エルファン・アレフィン氏らによる最近の研究では、オンラインプラットフォームLeetCodeのコーディング問題を例に、GPT-4とその前身であるGPT-3.5をテストした。これは、Googleなどへの求職者に求められる類の問題である。テクノロジーの巨人。
プログラムは、「効率的にアクセスできるようにデータを整理する(適切なデータ構造を使用)」と「データを処理するワークフローを作成する(効果的なアルゴリズムを使用)」という 2 つの主要な課題に基づいて評価されました。これらは、他の 2 つの両方と交差する、いわゆる「文字列操作」についても評価されました。
著者らが完全な質問と呼んだもの、つまり質問に対する解決策の例がプログラムに提供されたものを言語モデルに与えたとき、GPT-4 は質問の 26% しか答えませんでした。人間の回答者の場合は 45% でしたが、正しく答えられました。一部の情報が削除されると、GPT-4 の能力は質問の正答率 19% に急落しました。 GPT-3.5 はそれぞれ約 12% と 10% 減少しました。
著者らは、成功と失敗の両方について GPT コードの品質も検査しました。どちらの場合でも、彼らは一貫した問題を発見しました。GPT は、「一貫した方法で変数を定義する」というコーディングの基本的な実践にしばしば苦労していました。
完全な問題情報、解決策の例、または不完全な情報が与えられた場合の、トレーニング セットおよびテスト セットに対する GPT-3、GPT-4、および人間の正確さ。
AI コード生成ではスケールも問題になります。これまでのところ、GPT-4 の研究で最も有望な結果は、主に赤ちゃんの問題に関するものです。
サイバーセキュリティ企業PeopleTecのDavid Noever氏によるある研究では、「静的アプリケーションセキュリティ」の一種であるSnykなどの脆弱性テスト用に市販されている既存のプログラムと同様に、GPT-4がコードサンプルから欠陥のあるコーディングをどの程度見つけられるかをテストした。テスト中」または SAST。
場合によっては、GPT-4 が Snyk よりも多くのエラーを検出したと著者らは報告しています。しかし、多くのエラーも見逃していました。そして、合計 2,000 行をわずかに超えるコードでテストされました。これは、リンクされた多数のファイルにわたって数十万行から数百万行のコードが含まれる可能性がある完全な運用アプリケーションに比べれば、ごくわずかです。おもちゃの問題での成功が、これほど複雑な問題にまで拡張できるかどうかは明らかではありません。
上海理工大学の Zhijie Liu 氏らによる先月の研究では、正確性、わかりやすさ、セキュリティに基づいてコードの品質が調査されました。この試験では、Arefin とテキサス工科大学のチームのような LeetCode タスクに関する ChatGPT に挑戦し、また、調査会社 MITRE が管理する脆弱性のテストである Common Weakness Environment と呼ばれるものでコード生成をテストしました。
ルー氏とチームは、2021 年以前または以降に策定されたタスクで ChatGPT をテストしました。ChatGPT は 2021 年以前の資料でのみトレーニングされていたため、確立された課題と新しい課題の両方でテストされたときにプログラムがどのように機能するかを確認したいと考えていました。
その結果は驚くべきものでした。 2021 年以降の「Aft.」と呼ばれる新しい問題について、Lui 氏とチームは、ChatGPT コードの正答率が非常に低いことを発見しました。 「問題の難易度が上がるにつれて、コード生成を機能的に修正する ChatGPT の能力は大幅に低下します」と彼らは書いています。 C 言語プログラム コードのうち許容できるのは 15.4% のみで、最も難しい問題についてはどれも許容できませんでした。そして、「ハードおよびミディアムの問題に対して ChatGPT によって生成されたコードには、コンパイル エラーと実行時エラーの両方が含まれる可能性が高くなります。」テストを受けた人間のプログラマーは、平均して 66% の正解率を示しました。
「Bef.」とラベル付けされた古い問題の場合、正解率は 31% に上昇しますが、これはまだ低いです。
チームは多数の例を検討し、ChatGPT がそのコード行で与える誤った答えの種類を特定しました。たとえば、プログラム全体の設計は正しい方向に進んでいるとしても、コードの特定の行には、変数の評価という単純なものの根本的な間違った使用法が示されており、これは初心者プログラマーが犯すとは想像しにくいエラーです。
ChatGPT によって生成された間違ったコードの例。プログラムはボックスを説明ごとにカテゴリに分類することになっています。 12 行目では、コードは、箱が「かさばる」でも「重い」でもない場合、「両方」のカテゴリに分類する必要があると決定します。これは、「どちらでもない」はずの箱の説明とはまったく逆です。
Liu とチームは、一連の興味深い一般的な結論と緩和要因に到達しました。その 1 つは、ChatGPT が新たな問題に直面していることです。「ChatGPT は、たとえ人間の観点からロジックを使えば簡単な問題であっても、トレーニング データセット内でなじみのない問題や目に見えない問題のコードを生成する際に制限がある可能性があります。」
しかし、どのプログラミング言語が使用されるかは重要です。このテクノロジーは、「厳密に型指定された」またはより「表現力豊かな」特定のプログラミング言語でより優れた性能を発揮します。
「一般に、ChatGPT が機能的に正しいコードを生成する確率は、より強力な表現力を持つ言語 (Python3 など) を使用するときに高くなります。」と彼らは書いています。
もう 1 つの欠点は、ChatGPT が複雑になる可能性があるため、エラーを修正するのが難しくなることです。彼らは、「ChatGPTのコード生成プロセスが不注意である可能性があり、生成されたコードが記載されている詳細な条件の一部を満たしていない可能性があり、その結果、正常に生成したり(機能的に正しく)修正することが困難になる可能性がある」と書いている。
また、MITREによる共通脆弱性テストについては、「ChatGPTによって生成されたコードには、関連する脆弱性がしばしば見られ、これは深刻な問題である」と彼らは書いている。幸いなことに、ChatGPT は、MITER データ セットからのより詳細な情報が提供された場合、後続のプロンプトでこれらの脆弱性の多くを修正できることに注目しています。
3 つの研究はすべて、プログラミングでの生成 AI の使用が非常に初期段階にあることを示唆しています。ラオ氏が言うように、プログラマーが担当する単純なアシスタントのタスクに役立ちます。
プログラミングのパラダイムを打ち破る新しいアプローチによって進歩がもたらされる可能性があります。たとえば、最近の Google の取り組みでは、タスクを解決するためのツールをインターネットに接続できるように言語モデルをトレーニングしています。また、Google の DeepMind 部門の研究では、言語モデルをトレーニングして、パフォーマンスを向上させるための独自のプロンプトのエンジニアリングをより深く掘り下げています。これは一種の自己再帰的プログラミングであり、有望に思われます。
最終的にはもっと深いものが必要になるかもしれない、とラオ氏は言う。
「プロンプトでは解決できないと思います」とラオ氏は言う。 「実際には、まだ解決しなければならない根本的な問題がいくつかあると思います。根本的に何かがまだ欠けているのです。」
Rao 氏はさらに、「基本的に、人間の生涯の 100 回以上の経験に匹敵するほど大量のデータを大規模なニューラル ネットワークに投入できますが、経験がはるかに少ない人間でも、新しい問題をより適切に解決でき、特定の種類の基本的なエラーを犯すことはありません」と付け加えました。 。」


