Keep Innovating! Blog
目次
*この記事はAIではなく人間が書いています。
はじめに
2023年3月初旬の現在、ご存知のようにChatGPTブームが嵐のように吹き荒れています。毎日のように新しい関連ニュースが流れ、それらをフォローするだけでも大変で、ブームの全体像を俯瞰するのも困難な状況です(実際、この記事を推敲している間にGPT-4が発表されたりしています)。一部には「これは一時的な流行ではなく、第4次AIブームがはじまったのだ」とする識者の方もおられるようです。私も試してみて、非常に大きな驚きを感じています。これはもしかしたら、PCの登場や、あるいはインターネットの登場に匹敵するイノベーションかもしれません。
この状況を踏まえて、今回書きたいのは ChatGPT/LLM の登場によって私たちプログラマーの仕事がどのように変化するだろうか?という考察です。
しかし、私の専門分野は深層学習等を用いた画像処理なので、言語処理系AIである ChatGPT、あるいはLLM(大規模言語モデル)のポテンシャルや真の意義について十分に理解できていないかもしれません。しかし、これだけ大きなブレークスルーが目の前で起きているのだから、ともかくこの時点で感じたことを記録しておくべきだと感じて、キーボードを叩くことにしました。
したがって、いまからここに書く内容は、最終結論ではなく現時点のスナップショットです。しばらく時間が経過した後には、ここに書いた内容の誤りに気づくかも知れないことは覚悟しています。
なお、この記事では、文脈によって大規模言語モデル(LLM)全般の象徴として 「ChatGPT」というキーワードを用いる場合があります。これらは適宜 Copilot や Notion AI などと読み替えていただければと思います。
ChatGPTのコーディング能力
これは 各種のネット記事や YouTube などで紹介されている多くの事例を見たり、私も自分でいくつか試してみた感触ですが、「ChatGPTは、もちろん限界はあるもののプログラミングの役に立つのは間違いない」というのが私の現時点での結論です。
プログラムの対象分野によっても変わってきますが、ざっくりとした肌感覚では、プログラミング作業の約 60~80%を占める「定番的な」処理のコーディングなら十分に ChatGPT に任せられそうです。特にWeb系やモバイル系のプログラミングのように、ChatGPT/LLMの学習データに多く含まれると思われる分野で効果を発揮します。
また、現時点でもある程度可能ですが、近い将来に本格的に可能になると思われる詳細なカスタマイズ機能(ファインチューニング機能、禁則設定機能など)を使えば、Web・モバイル系以外でも、その分野に向けて専用化したモデルが作れるはずですので、そうなれば更に守備範囲は広がりそうです。
一方で、この ChatGPT をプログラマーが有効に使っていくには、相応の「能力」が必要そうだ、ということも分かってきました。その点を考察してみたいと思います。
ChatGPT/LLM を使いこなすために必要な3つの能力
まず結論から書くと、ChatGPTやGItHub Copilot などの LLM をプログラミングに活用するには、プログラマーには現時点では主に以下の3つの能力が必要、というのが私の考えです。(「現時点では」という但し書きが必要なのがこの分野の恐ろしいところで、また次のブレークスルーがあれば状況がガラリと変わる可能性があります。)
- (1)プログラムのどの部分を ChatGPT に書かせるかを見極める能力
- (2)プロンプト・エンジニアリング力=言語化能力
- (3)ChatGPT が書いたコードをチェックできる能力
以下、それぞれの理由や背景などを書いてみます。
(1)プログラムのどの部分を ChatGPT に書かせるかを見極める能力
前述のように、ChatGPTが得意なのは定番的な処理です。したがって、プログラミングしている時に定番の処理が必要となった場合に「ここはChatGPTに書かせよう」と素早く判断できることが必要です。
この判断を間違えて、ChatGPTが苦手とする種類のコードを書かせようとすると、プロンプティングに手間がかかってしまい、自分で書くよりもかえって時間がかかる、なんていうことになりかねません。
この判断能力を身につけるには、どういったものが定番の処理なのかを知らねばならないので、ある程度プログラミングの経験を積む必要があります。また ChatGPT をある程度試してみて、クセを掴んでおくことも必要でしょう。
とはいえ、トライ&エラーでなんとかするという方法もあります。つまり、とにかく何でもChatGPTに書かせてみて、ダメそうならすぐに諦めるという戦略です。しかし、これには根気と時間がかかります。そもそも、こういう根気のコストを下げたいがために ChatGPT を使うという側面がありますから、これでは本末転倒になってしまいますよね。やはり、ChatGPTをいつ「召喚」するか?という判断力が重要だと思います。
(2)プロンプト・エンジニアリング力=言語化能力
ここ1〜2年の生成系AIの急激な進歩にともなって登場した新しいキーワードがプロンプト・エンジニアリングという言葉です。これは、ChatGPT/LLM や Stable Diffusion などの言語ベースの生成系AIにどのようなプロンプトを与えれば望みのアウトプットをさせられるか?という、プロンプト作成技術のことを指しています。
このプロンプト・エンジニアリングは、プログラミングのための ChatGPT 活用においても、やはり最重要ポイントです。プロンプティングの質によって、ChatGPTが生成するコードの質が大きく変わるからです。
基本的には、普通の日本語で書けば良いのですが、ChatGPTでは独特な書き方のテクニックを使うことで、より細かく出力をコントロールできます。実際、こうしたプロンプティングのテクニックの情報は、毎日のように SNS や YouTube を賑わせています。
また、海外の先進的な?企業の一部にはプロンプト専門のエンジニア(プロンプト・エンジニア?)への求人をかなり高い待遇で募集しはじめたところもあるようです。
しかし、今後も ChatGPT/LLM は猛スピードで進化していくと思われるので、このような「現時点の ChatGPT に寄せた」テクニックは、賞味期限の短いものになるでしょう。したがって、特別な理由がない限り、これにあまり深入りする必要はないと思います。この分野のネット情報をウォッチしておけば、こういう作業が得意な人が次々とテクニックを発表してくれるので、まずは、それを参考にしていけば良いと思います。
プログラマにとって本質的に大切なのは真っ当な自然言語力(国語力や英語力)を高めることです。読書などのインプットや、ドキュメント作成などのアウトプットを増やして語彙力や言語表現力を高めていくことが必要です。特に、欲しいコードの背景や文脈などの抽象的な情報を ChatGPT に対しても的確に説明する能力は重要です。この精度が低いと、ChatGPTは良いコードを生成できないからです。
さらに言えば、昔でいう単なるコーダーみたいな仕事は本当に不要になっていくはずので、プログラマーも課題発見力や洞察力など、「なぜ・何をコンピュータにやらせるのか」という基本構想力が問われる方向になっていくと思います。そのためにも言葉による思考力を高めていくことは重要です。
AIとのコミュニケーション手段としてのコメント・ドキュメント
余談になりますが、自然言語によるプロンプティングが重要というこの状況が生まれたことで、プログラマ業界での長年の論争の種である「ドキュメント要・不要論争」や「コメント要・不要論争」に終止符が打たれるのではないでしょうか。
GitHub Copilotの挙動などですでに確認されていますが、コード中にコメントを書くことによって、AIはより正しくコードのコンテクストを把握でき、コード生成の品質が上がることが知られています。
つまり、今後は人間とAIが連携してプログラミングするのが当然となり、そのためにはドキュメントやコメントを書くことが正しい、というのが結論となります。ちなみに私はずっとドキュメント・コメント必要説を主張してきた人間なので、この結論は嬉しく感じています。
(3)ChatGPT が書いたコードをチェックできる能力
当たり前ですが、ChatGPTは知的に見えるものの、人間と同じような知能はありません。機械学習を成立させるために複雑な仕組みにはなっていますが、原理的には入力されたプロンプトに含まれる言葉のシーケンスや会話の文脈を事前条件として、次に出力する単語の出現確率(条件付き確率)を繰り返し計算することによって、文章やコードを生成しているだけです。
ですので、プロンプトに書かれた指示や依頼の本当の意味は理解していないし、技術的に未解決の問題として Hullucination(幻覚・妄想) と呼ばれる現象が発生することがあります。
Hullucination は ChatGPTが「(平気で)嘘をつく」現象です。ChatGPTが答えようのない問題や知らない知識について質問されたとき、「知りません」と答えてくれれば良いのですが、現状そうはなりません。どんな状況でも確率計算は可能なので、ChatGPTはそれっぽいけど嘘の情報を出力をしてしまうことがあるのです。
当然、ChatGPTは自分が書いたコードが正しいかどうかを判断する能力もありません。正しさを判断できるのは人間だけです。(コードのテスト方法をプロンプトで指示してChatGPTにやらせるという方法もおそらく可能ですが、それはChatGPTがコードの意味を自発的に理解して判断していることにはなりません。)
コードの正しさのチェックは、従来蓄積されてきたノウハウがそのまま使えます。ユニットテストやコードレビューなどなどです。
ユニットテストのコードは、部分的には ChatGPT に書かせることができるかも知れません。その意味でのChatGPTの利用は可能でしょうが、最終確認は人間がやる必要があることには変わりありません。
ChatGPTはプロのためのアシスタント
お気づきの人も多いと思いますが、上で述べた3つの能力を持ったプログラマーとは、つまりは中〜上級の技術力を持ったプログラマーのことです。
ChatGPTは中上級のプログラマーにとって、非常に強力なアシスタントになります。分野によって異なりますが、開発するコード量の最大80%程度までを ChatGPT に書かせることができる可能性があるらからです。残り20%に注力することで、生産性向上だけでなくさらに価値の高いソフトウェアを開発できるかもしれません。
別の捉え方をすると、ChatGPTは、超高性能のエディタ/IDEと考えることもできます。Copilot がまさにそうですが、自然言語や断片的なコードでヒントを与えるだけで、一気にまとまったコードを補完してくれるわけです。しかし、それで出てきたコードのテストはプログラマーが責任を負わなければならない点でもこの考え方は合致します。
素人が急に「プロ品質」のプログラミングできるわけではない
繰り返しになりますが、ChatGPTを効果的に使いこなせるのは、コードに対する判断力をもったプログラマーです。がっかりされた方もいるかもしれませんが、プログラミング初心者や素人の方が ChatGPTにプログラミングを肩代わりさせようとしても無理がある、というのが私の現時点での見解です。上述のように、そのような人には ChatGPTが書いたコードが正しいのかどうか判断する力がないからです。
ChatGPTを使わないとプロ失格となる時代へ
ChatGPTは典型的なブレークスルーです。ブレークスルーが起こったということは、次の方向性が定まったということ。世界中の投資や開発競争がこの方向に向かってなだれ込んでくるのは間違いないと思います。
それゆえ、この先はこの方向でひたすら性能や機能が高まっていくことになりますので、現時点で可能性を感じた部分には着目しつづける必要があるでしょう。ChatGPTによるプログラミングは既にかなり良い線を行っています。まだ弱点もありますが、今後徐々にそれらも解消されていくはずです。
我々プログラマーとしては、そうした動向を追いかけつつ、今後まずは ChatGPTを利用して生産性を高めていくことが当たり前となるでしょう。ChatGPT を使いこなすと生産性が数十%以上異なってくるので、使わなければ事実上プロとしては失格になってしまいます。そういういう状況がここ1〜2年で成立していくのではないでしょうか。
今回のお話はひとまず以上です。お読みいただきありがとうございました。
著者プロフィール
名前: 寺田英雄
株式会社オープンストリーム 執行役員/CTO
技術創発推進室 室長
1980年代からプログラミングを始めて現在に至る現役プログラマ。BASIC・アセンブラ・C・C++など、今で言う低レイヤプログラミングから、MS-DOS、UNIX、Windows などのOSドライバやネイティブアプリケーション開発を経て、近年のWeb開発、クラウドシステム、モバイルアプリ開発まで幅広く実践。最近はPythonを使うことが多いが、Rustも研究中。
専門分野としては、画像処理、プラント・ロボット等の制御システム、画像認識、機械学習、AIなど。近年は、電気通信大学さんとの共同研究を通じて機械学習やAIの研究に重点を置いている。
ChatGPTハッカソン開催についてご相談ください
みなさんの職場や組織で、このようなChatGPTハッカソンを開催してみませんか?ご興味のある方は、ぜひこちらのお問い合わせフォームから、お問い合わせください。当社ではニーズに合わせて様々なアレンジによるハッカソン開催が可能です。
また、ChatGPTの業務活用のご相談や、Azure OpenAI を活用したシステム開発などももちろん承っています。お気軽にご相談いただければと存じます。
今回の記事は以上です。お読みいただきありがとうございました。
- テレワーク
- リリースノート
- リネージ管理
- knitfab
- OpeN.lab
- ChatGPT
- 画像生成
- 画像認識
- 書籍紹介
- 対話
- 自然言語処理
- Open Innovation
- アカデミック
- 活動報告
- ビジネス
- ガジェット
- オープンイノベーション
- TIPS
- 線型代数
- 数学
- Airflow
- 論文紹介
- MediaPipe
- 顔認識
- 可視化
- 異常検知
- プラモデル
- イノベーション
- 自動運転
- AI
- MLOps