学生必見!GitHub Copilotに指示して始める快適コーディングライフ
今回は、GitHub Copilotがまじで便利なので紹介します。Tensorflowやpytorchのような深層学習ライブラリのことをあまりよく知らなくても、約10秒で深層学習デモのサンプルを生成できます。
筆者は普段、研究活動でコーディングをしているので日常的に使っています。
GitHub Copilotとは
GitHub Copilotは、最近話題のAI プログラマーアシスタントです。自然言語を使って、コードを生成したり、コードの意味を考えたり、使用者が書いているコードの先を予測して、コード候補を提示してくれたりします。
GitHub Copilot Chatは、ChatGPTをVSCodeに追加して使用できるみたいな、会話形式のインターフェースです。
月額制だが、学生は無料で使える!!
まず、これがやばすぎです。学生には、無料のGitHub Educationプログラムがあり、学生としての身分を証明すれば、VSCode上の拡張機能が使えます。研究に携わる大学院生や社会人学生など、みんな使えます。筆者は社会人大学院生なので、ばりばり使っています。
本当に便利なので、登録していない人は今すぐ登録しにいってください。また、学生でなくてもコーディングを生業にしている人ならおすすめです。
▼GitHub.com
https://GitHub.com/edu
GitHub Copilotの登録・インストール
GitHub Copilotの登録からインストールについては、すでに詳しい記事がありました。ここを参考にしてみてください。
知らないライブラリの深層学習デモを10秒で生成
著者はいつも、torchを好んで使っています。不慣れなtensorflowライブラリを使って深層学習デモを生成してみましょう。
VSCodeに拡張機能を入れ、有効にした状態とします。
指示通りCtrl + I で実装指示
Ctrl + I すると、指示用のボックスが出てくるので以下を指示しました。これで8秒です。
> tensorflowで完全な深層学習デモを生成してください。
コード生成は2秒くらいで完了
以下が提示されたのでアクセプト(同意)します。
import tensorflow as tf
from tensorflow import keras
# Load the dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Preprocess the data
x_train = x_train / 255.0
x_test = x_test / 255.0
# Define the model architecture
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Train the model
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)
とりあえず出てきました。
何も考えないまま、取りあえず適当なpythonの環境で実行します。tfを入れていない人は入れましょう。
実行
python3 test.py
実行結果
私が使っている環境ではGPUは入れていないので、CPU上で動作させました。エラーも出ず、実行されました。いいですね。
コードの意味を尋ねる
取りあえず動くのを確認したら、tensorflowの実装の仕方や実装感覚を、Copilotと会話しながら勉強していきましょう。
コードの中で処理内容や、モデル概要がよく分からないときは、選択しましょう。選択した状態のまま、GitHub Copilot Chatの左サイドバーのチャットボックスに行き、以下を実行します。
> #selection どのような形状の何のデータを、どのような形状のモデルに入力している?
#selection というのは、選択した範囲内容のコンテキストを前提とした上で、質問の内容を受け取り回答してくれます。便利なので使いましょう。
実際に以下の回答が返ってきました。
> このモデルは、形状が(28, 28)の2次元データを入力として受け取ります。この形状は、一般的に28×28ピクセルの画像データを表します。このデータは、最初のレイヤーである`keras.layers.Flatten`によって、784要素の1次元配列(28 * 28 = 784)に変換(平坦化)されます。
この平坦化されたデータは、次に128ノードの全結合層(`keras.layers.Dense`)に送られます。このレイヤーは、データの非線形変換を行います。
最後に、10ノードの全結合層(もう一つの`keras.layers.Dense`)に送られます。このレイヤーは、各ノードが1つのクラスを表す10クラス分類問題の出力を生成します。出力は、10要素の1次元配列で、各要素は特定のクラスにデータが属する確率を表します。これらの確率は全て合計すると1になります。
すごいですね。最高です。何か、コードリーディングのときにわけわかんない処理とか出てきたら、気軽に聞いていきましょう。自身の理解の補助になったりします。
次コード補完
インライン補完の機能が便利すぎです。
コード全体のコンテキストを加味して、coderが次に何を書きたいかを予測して、補完候補を提示してくれます。
例えば、modelオブジェクトを作った後に、モデルのパラメータ数を確認するのにprint文を出力したいとします。
私は、modelの下にコメントアウトを書きました。
import tensorflow as tf
from tensorflow import keras
# Load the dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Preprocess the data
x_train = x_train / 255.0
x_test = x_test / 255.0
# Define the model architecture
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
# print the number of parameters in the model (made by coder)
# Compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Train the model
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)
その次の行で待っていると、勝手にCopilotがコードを構築してくれます。
受け入れるときは、Tabキーを押してアクセプトしておしまいです。実行により、次のようなログが出ました。
GitHub Copilotを頼れる相棒にするには?
GitHub Copilotを使う上で大事なのは、AIが理解しやすいようなコンテキスト(文脈)でコードを展開することです。何をしてほしいかをコメントアウトで先に書いて、次の実装の方向性を示してあげるわけです。Tab待ち職人とも言えますが、実はこれがやってみると難しいです。
イメージとしては、「使用者がAIを導き、方向づけして上手く操る」みたいな感覚です。ポケモントレーナーがポケモンに技指示を出す感覚、野球の監督やコーチが選手にサインを出す感覚と例えてもいいかもしれません。
GitHub Copilotが理解しやすいようにコードをきれいに読みやすく書いていくことで、結果としてCopilot自身もより有益なコード補完を出しやすくなります。ごくまれに、テキストが補完されなくなる時がありますが、再起動すれば元に戻ります。使い倒しては結果を見ながら、いろいろ工夫をしていくことで、どんどん効率が上がっていく実感があります。
学生の皆さんはぜひ、今の自分の社会的な立場を最大限に利用して、新しいコーディングの世界を肌で感じてみてください。