人間の言葉からプログラムを自動的に書く「OpenAI Codex」を触って考えたこと
2021.08.21
Updated by Ryo Shimizu on August 21, 2021, 07:42 am JST
2021.08.21
Updated by Ryo Shimizu on August 21, 2021, 07:42 am JST
OpenAIが先日発表した新技術「OpenAI Codex」は、一言で言えば、「プログラムを自動的に書くAI」である。
「自動的に書く」と言っても、何もないところから書くわけではなく、人間が「画面に猫を出せ」などと指示を与えると、その通りに書くというAIになる。
このOpenAI Codexを使っている様は、なかなか面白い。
[youtube https://www.youtube.com/watch?v=Zm9B-DvwOgw&w=560&h=315]
「画面に宇宙船を出せ」とか、「そいつを丸く切り取れ」とか「もっと小さくしろ」とか矢継ぎ早に指示を出していくと、プログラムがその通りに生成される。なるほど凄い。まるで魔法である。
しかし我々は常に眉に唾をつけて考えなくてはならない。これは果たしてどこまで本当のことなのか、どこまでが誇張されたショーで、どこからが本当なのか。
確かに言葉からゲームを作り出すところは凄いのだが、どうも作為的なものを感じるところも少なくない。
そうこうするうちに、今度はベータテスターが言葉からWebサイトを作らせてみた、という動画を投稿していた。
[youtube https://www.youtube.com/watch?v=hP5nOFi5HOw&w=560&h=315]
この人もなかなかすごい。
152語で自分のWebサイトをAIに作らせたという話だ。
しかしどうもなんというか、「AIが人間のプログラマーの代わりになる」という感じがしないのである。
なぜかというと、指示がいちいちものすごく細かいからだ。
「このURLのロゴを小さく表示したヘッダーを追加して」
「ピンクの背景でロゴを大きく表示して」
などと、事細かに指示を出す。
僕なんかはプログラマーであると同時に言語環境の設計者であるのでこの時点で疑問に思うのだ。
「この指示そのものがむしろプログラムでは?」
そうこうしているうちに筆者にもOpenAI CodexのInviteが来た。
予想外に早かった。普段からGPT-3に課金しているので、優先的にInviteがもらえたのかもしれない。
さて、実際に使ってみると・・・やはり心配事は的中した。
上の二つの動画は非常に見事なデモだが、かなり作為的なデモである。
普通の人が普通に使おうとすると、まだ全然使えるレベルではないし、プログラマーが使うとすると、悪いけれども自分で書いた方が早い。
何より、AIがしれっと吐き出すコードは、プログラム的には矛盾がないものの、指示を曲解したり、全く無意味な処理にしたりするケースが少なくない。最初は僕の英語力の問題かとも思ったが、そうでもなさそうだ。たとえばこんな感じである。
「猫を出して(show a picture of a cat)」
すると、猫の写真が表示される。すごい。
では、猫よりも好きなコンピュータの写真を表示させてみようと思って、「コンピュータの写真を出して(show a picture of a computer)」と指示を出す。猫がコンピュータに変わっただけである。
するとどうなるか。
何かプログラムが書き足される。
いいね、AIと共同作業してるって感じ。
ブレードランナーのリック・デッカード刑事みたいな、そんな感じ。
猫の画像が一枚追加された。
違うよ。全然違うよ。
その後もいろいろなことを試みたが、一発で出てくるのは猫の写真くらいで、あとは日本の国旗とか星条旗とか。
この時点で不安になった。
確かに、OpenAIの公式のデモでも、ブロガーのデモでも、「猫の画像を出せ」とは言わずに「このURLの画像を出せ」と言ったりしてる。
そこらへんになんとなくきな臭いものを感じていたのだが、URLを指定すれば確実に出してくれる。
その後も、色々やってみるのだが、どうももどかしい。
ここまで細かく指示するんだったら最初から俺がプログラミングするわ!と思うし、プログラミングの知識がゼロの人にとっては、そもそもプログラムの構造や構成を考えること全体が人間に丸投げされているのでとても「私でもプログラミングできた」にはならない気がする。
しかし、やたら面倒臭い「赤い円を出して画面の端で跳ね返るようにアニメーションさせろ」という命令に対しては、ずらずらと長いプログラムを出力する。これはOpenAIが例として出している命令なので、うまくいくことが確認されているのだろう。
しかし、これだとサンプルプログラムをググってコピペするよりは少し手っ取り早い、くらいのことにしかならない(それでも凄いが)。
要は「codexに何をやらせたいかというよりも、codexにどんな言葉を投げつけると目的のプログラムにたどり着くか」といういにしえのテキストアドベンチャーゲームのようなものであり、enchant.jsなら9分で書けるようなプログラムも、codexでは1日経っても書けないような気がする。
とはいえ、codexにも見どころはある。
OpenAI由来の技術だから、codexも当然、GPT-3の成果物である。
通常、GPT-3から出てくる出力というのは温度というかバラツキがあるため、プログラムとして意味をなさないような文字列が出力されてきても全くおかしくない。
ところがcodexは確実に「文法的には正しい」プログラムを生成する。
これはおそらく、codexが内部的にGPT-3にプログラムを生成させた後でプログラムの整合性を確かめる処理をしているか、GPT-3が出した複数の推論の中で最も文法的に問題がなさそうな候補を表示していることで実現しているのだろう。
もしもそうでなくて、プロンプトだけで文法的に矛盾のないコードを生成しているとしたら凄すぎる。
最近の画像生成系AIでは、「Unreal Engine」とか「4K」とか画家の名前とかをプロンプトに追加して生成させると綺麗な絵が手軽に得られることがわかっているが、codexも同じように、「プログラミングの教科書」とか「正しいコード」とかというキーワードをプロンプトに追加して矛盾のないコードを生成しているとしたら確かにすごい。
特に跳ね回るボールについて、「faster it」と言えば実際にスピードが二倍され、「faster it when clicked the screen」と言えば、マウスクリックした時だけスピードが上がるようになる。ここだけ取り出すと確かにすごい。
しかしむしろこれは発見されたマジックワードであって、ヘタをするとどこかの教科書のサンプルを丸ごと学習しただけかもしれない。
OpenAI自身のデモによる「codexで宇宙ゲームを作った」という話がどうも消化不良に見えるのは、そもそもゲームとして面白くなさそうなもの、しかも操作性としても酷いものをなぜ敢えてデモとして作るのか、という点だ。
実際に触ってみればわかるが、要は「そういうものしか作りかたがわかってない」ようなのだ。
たとえば、人間のプログラマー相手なら「縦スクロールのシューティングゲームを作って」と言えば作ってくれる。その後、「ジグザグに動く敵を出して」とか「ボスを出して」とか言えば、その間は適当に埋めてくれる。しかも面白くなるように。
プログラマーの仕事というのは、主に企画マンが「こういうの作ってよ」と言ったときに、その言葉をインスパイアとして自らロジックを創造することであってコードを書く仕事というのは本質的にプログラミングとは関係ない。
秘書の仕事が単なる機械的なアポ調整ではないのと同じで、プログラマーの仕事というのは多分に創造的なものである。
codexの場合、創造的な部分を全て人間に丸投げしてしまっているので、実際的にはプログラマーを不要にするのではなく、プログラミング言語を自然言語に近づけただけである。
しかし、プログラミング言語がなぜ必要なのか、という本質的な問いを考えると、そもそも自然言語では曖昧すぎてダメなのでストリクトな定義をするために形式言語としての人工言語(数式やプログラミング言語)を必要としたのだ。
ただ、これはあくまでもJavaScriptのインタラクティブ環境におけるデモにすぎない。
codexのドキュメントでは他にもいくつか興味深い例が載っていた。
たとえば、自然言語からSQL文を生成してデータベースを検索・集計するなんていうのは、ある領域の人にとっては福音以外の何者でもないだろう(それが現段階でどこまで実用的かどうかは大いに検証する必要があるが)。そもそも自然言語をSQLに変換するタスクというのは昔からある。
codexが示したのは、「自然言語と形式言語の橋渡しは可能であり、その時、形式言語を矛盾なく記述できる」という事実で、これは非常に大きいインスピレーションを与えてくれるが、いつものように、codexがあれば人間のプログラマーがいらなくなるという表現は、誇張しすぎである。
でも、いつも手軽に面白いインスピレーションを与えてくれるOpenAIには感謝しかない。
筆者のYouTubeチャンネルで、実際にOpenAI Codexを操作しているところを公開したのでご興味があればcodexにどこまでできるのか(そしてできないのか)をご確認いただきたい。
[youtube https://www.youtube.com/watch?v=fGDyhNF_HKA&w=560&h=315]
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。