c6d6b19d63bada158e7be253b890d7caca7b24ec

こんにちは、AIエンジニアの佐々木です。

自然な文章でプログラミングをする時代は到来するのでしょうか?
OpenAIはそんな未来を思わせる AI モデルを作ろうとしています。

超大規模自然言語処理モデル GPT-3 エンジンのバリエーションの一つに、昨年、コードを自動生成するエンジン Codex が加わりました。
原稿執筆時点ではまだ Private Beta で世界中の β テスターによって試行が繰り返され、モデルの改良が続けられています。

今回は、未来のプログラミングツール Codex によるコード生成の様子を動画にてご紹介します。
動画でご紹介するプログラミング言語は JavaScript と Python です。
音声による解説をしていますので、是非音声オンでご視聴ください。

JavaScript

Codex JavaScript Sandbox でコード生成します。
自然なテキストを入力すると、コードが生成され、実行されます。

js_playground

こんにちは

自然な文で「こんにちは」を表示させ、フォントサイズ、色、位置、言語を変化させてみます。

変色するボール

ウィンドウ内をバウンドするボールを作り、バウンドする度に変色するようにします。

ホームページトップサイトの作成

同じ指示を日本語と英語で与えて結果を比較します。

One Sentence to Code (一文でコードを生成します)

  • ボタンでサイコロを振る
  • 壁掛け時計
  • ボールを地面に落とした時の様子
  • 太陽と月
  • ブロック崩しゲーム
  • Make a snowstorm on a black background
  • 泡の芸術

Python

Pythonコード生成は、Jupyter Lab に Codex Plug-In をインストールし実験します。

$ pip install jupyterlab-codex

この Plug-In により Jupyter Notebook からシームレスに Codex API をコールできます。

plugin-2

基本操作①

  • "Hello World!"の表示
  • Packageインポート(Numpy, Pandas, Matplotlib)
  • 1からnまでの足し算
  • フィボナッチ数列の生成と表示 (0,1,1,2,3,5,8,13,21,34,55.........)
  • 球の体積
  • サイズが10のnullベクトル、ただし5番目だけ1のアレイ生成
  • N個の乱数を生成し、ヒストグラムにする
  • 横浜市の2021年8月の最高気温のグラフ化
  • 変数の数が多い場合の計算

インストラクションを記載したセルにカーソルを合わせ、上部のCodex Plug-In ボタンをクリックすると、Codexによるコードが生成されます。

基本操作②

  • 文字列操作 ('e' の削除、小文字変換、母音操作)

numpy-100 チャレンジ

最後に numpy-100 へのチャレンジです。numpy-100 とは、Pythonの数値計算ライブラリ numpy の練習問題 100 問です。
Github で公開されており、Codexの学習データとしても活用していると考えられます。

numpy-100
https://github.com/rougier/numpy-100

3段階の難易度に分けられており、難易度別に ★☆☆ 35問 ★★☆ 29問 ★★★ 36問 が用意されています。
例えばこのような問題です。

例)
9. Create a 3x3 matrix with values ranging from 0 to 8 (★☆☆)
30. How to find common values between two arrays? (★☆☆)
43. Make an array immutable (read-only) (★★☆)
68. Considering a one-dimensional vector D, how to compute means of subsets of D using a vector S of same size describing subset indices? (★★★)

良問が揃った練習問題で、レベル ★★★ はなかなかの難問だと感じます。
今回 Codex にレベル ★☆☆ と ★★☆ を解かせてみました。
試行 5 回以内に正解したものを正解としました。
ここでは動画は省略し、結果のみお伝えします。

レベル ★☆☆

d0a65898d84e5df97b605cb71263db41

レベル ★★☆

f5c2a494fa305a6394c34c0021acd2a2b33d3e89

結果集計

numpy-100-results

Pythonコード生成問題でないものもいくつか含まれており、それらは除外扱いとしました。
コードの完全一致確認は、変数名の違いのみである場合も違いとして判断し、正解がどう考えても一つしか無いような場合、たとえばパッケージのインポート問題などについては、完全一致とはみなさない判断をしています。

結果は、レベル ★☆☆ 不正解 1 問で正解率 96.6%、コードの完全一致はありませんでした。
レベル ★★☆ は不正解は 9 問、正解率は 69% でした。コードの完全一致も 3 問見られました。   以上の結果から、自然文のインストラクションにつづく Python コードの学習が進んでいると考えられますが、一方で、難易度の高いレアな問題は、問題文にモデルがオーバーフィットしている可能性もあるのではないかと思いました。しかし、レアな問題でも正解できないものが一定数あるので、単純にそう言い切れるものでも無いなと考えています。 ここは、もう少し深い考察が必要だと思われます。

おわりに

私の主観的な感想にはなりますが、コード生成実験として非常に興味深いと感じています。
まだまだ改善の余地はあると思いますが、今後の進歩のポテンシャルを大いに感じました。
あと数年すると、自然文を組み合わせてプログラミングをする時代がやってくるかもしれません。

また、今現在の状態でも、プログラミングの補助ツールになりえるな、と思います。
コーディング主体はあくまで人で、良いアイデアが浮かばない時に、Codex に聞いてみよう、という気になります。
抽象的なインストラクションによって得られる結果も、大変面白いと感じました。

3 回シリーズでお届けしました 実践 GPT-3 シリーズ、いかがでしたでしょうか ?
みなさんの情報源として、少しでもお役に立てれば幸いです。

第 1 回:実践GPT-3シリーズ① アド・ジェネレータの作成
第 2 回:実践GPT-3シリーズ② ファインチューニングにより精度向上するのか?

最後までお読みいただきありがとうございました。

佐々木 宏

マクニカAIエンジニアブログ 関連記事

 



マクニカでは、AIを活用した様々なソリューションの導入事例・ユースケースをご用意しています。以下リンクより、ぜひお気軽に資料DL・お問い合わせください。

▼世界2.5万人のデータサイエンスリソースを活用したビジネス課題解決型のAIサービス 詳細はこちら