清水理史の「イニシャルB」
ChatGPTの「Code Interpreter」は、Pythonのコード生成だけでなく設計・実行・結果の評価までしてくれる驚異の新機能
筆者「このデータだけ取り出してJSONにしたいんだけど」 ChatGPT「ほらよ!」
2023年7月18日 06:00
ChatGPTに、新機能となる「Code Interpreter」が追加された。現状は有料プラン「ChatGPT Plus」のユーザーのみが使えるGPT-4のプラグインとして提供されるため、誰もが利用できるわけではないが、その威力は驚異的だ。
データ分析でも、データ変換でも、Pythonで可能なことはだいたい何でもやってくれるスグレモノで、ユーザーは当然ながらコードを書く必要がなく、「こういうことをしたいんだけど……」と日本語で指示するだけでいい。今回は、データ分析とデータ加工の2つの実例を紹介する。
Code Interpreterとは
ChatGPTの新機能となるCode Interpreterは、一口で説明すれば、ChatGPT内で実装されたPythonの実行環境だ。
同社が3月に公開したブログで登場が予告されていたが、7月上旬からGPT-4のプラグインとして実装が開始され、有効化できるようになった。
ChatGPTは、自然言語による指示からPythonなどのコードを簡単に生成できることで知られているが、これまでは、単にコードブロックとしてコードを表示することしかできなかった。
これに対して、Code Interpreterでは、コードを自動的に生成するだけでなく、それを実行し、その結果を受けてユーザーに対してフィードバックすることができる。そもそも、コードの生成を明確に要求する必要もなく、「〇〇を計算して」や「このファイルを分析して」のように、あいまいな指示をするだけで、コードが必要かどうかを自動的に判断して“よろしく”やってくれる。
例えるなら、データサイエンティストの友人に「このデータから〇〇を知りたいんだけど……」と言ったり、プログラマーの友だちに「このデータだけ取り出してJSONにしたいんだけど……」とお願いしたところ、「ふむふむ。これならこうやって、こうで、こう」と、ササッと結果のファイルが送られてくるような印象だ。
同様の機能は、ChatGPTのプラグイン「Noteable」でも実現可能で、過去にこちらの記事で簡単な使い方を紹介したが、ChatGPTだけで、ほぼ同じことができると言っていい。
実例1:教育用標準データセットから「子育てしやすい都道府県」を分析する
まずは、データ分析からやってみよう。例として、独立行政法人統計センターで公開されている「SSDSE(教育用標準データセット)」のうち、簡易版の基本素材(SSDSE-E 2023)を使って検証してみた。
▼SSDSE-Eのダウンロード
SSDSE(教育用標準データセット)
このデータには、総務省統計局「統計でみる都道府県のすがた(社会・人口統計体系)2023」から抜粋された都道府県ごとのデータがまとめられている。具体的には、人口、事業者数、医療従事者数、幼稚園数、住宅数など、90項目にもおよぶデータが収録されている。
指示
指示は簡単で、ダウンロードした「SSDSE-E」のExcelファイルをChatGPTのチャット欄にドラッグしてファイルをアップロードする。この状態で、次のようなプロンプトで指示をする。
「子育てのしやすい都道府県はどこだと考えられますか? 理由とデータも示してください。」
データの読み込みと理解
ChatGPTは、ファイルとプロンプトを受け取ると、まずデータを読み込んで内容を確認する。具体的には、以下の画面のようなコードが実行される。このように、Code Interpreterでは、必要に応じて、コードの生成と実行が自動的に行われ、その結果が回答となるのが特徴だ。
分析方法の提案
続いて、分析方法が提案される。この表には90項目のデータが含まれているが、ChatGPTは、「子育てがしやすい」かどうかを判断する指標として「医療施設のアクセス性」「教育機会」「生活費」「保育施設の利用状況」の4項目を挙げている。
もちろん、こちらから項目を指定したり、追加したりすることも可能だが、今回は全ておまかせにした。
データの抽出と計算
上記の提案をもとに、実際に表からデータが抽出される。それぞれの値をピックアップした理由も述べられるほか、保育所等数などは絶対数ではなく、都道府県の人口を考慮した割合として計算されている。
実例2:学習用データから必要な項目のみを取り出してJSONで保存する
続いて、ファイルの加工の例を見てみよう。題材として利用するには、以下の「AI王 公式配布データセット」というクイズデータだ。
▼「AI王 公式配布データセット」のダウンロード
AI王 ~クイズAI日本一決定戦~
オープンソースの大規模言語モデル(LLM)をクイズ形式の回答に最適化させるファインチューニングのためにこのデータを利用したいが、もとのデータは行単位のJSONL形式となっているほか、学習に必要のないデータも含まれている。
こうしたデータは、Pythonを使って整形するのが一般的だが、今回は全てChatGPTのCode Interpreterに代行してもらう。
ただし、ベースとなるデータが数が多いため、ここでは数題のみをピックアップした簡易データを利用する。
指示
先の例と同様にファイルをアップロードしたあと、以下のように箇条書きで2つのプロンプトを入力した。元データには「qid」や「answers」として複数回答の正解例が配列で格納されているが、ここではファインチューニングに必要となるクイズの問題文と答えの2項目のみを取り出すことにする。
・各データから”original_qustion”と”original_answer”だけを取り出してください
・単一のJSON配列に変換してください
ファイルの読み込みと確認
実行すると、ファイルが読み込まれ、データの構造が分析されて表示される。取り出したい値は、「original_question」と「original_answer」の2つの値だ。
活用しながら学べることが素晴らしい
以上、ChatGPTの新機能「Code Interpreter」を実際に試してみた。今回の例のようにデータやファイルを渡して、やりたいことを指示すれば、Pythonでできることは、大抵実現できる。
残念ながら、現状はCode Interpreterとウェブ検索を組み合わせることができないので、外部の情報を取り込むことができないが、遠からず、ウェブから情報をスクレイプしたり、API経由でデータを取得したりできるようになることも期待できるだろう。
こうした機能によって、人間は楽ができるようになるわけだが、個人的には、楽をするというより、どうすればいいのか分からなかったことを、目の前で実際にやって示してくれる(しかも解説付き)点が素晴らしいと感じた。
単なる「お任せでやってくれる作業者」というよりは「インタラクティブな教科書、身近な先生」というイメージで、遠慮なく、「じゃあ、これは?」「このデータも使ってみて」と質問や指示をして、いろいろ試せるのが楽しかった。そして「なるほど、そうやって分析するのか」と、新しい発見ができるメリットが大きいと感じた。
賛否両論ありそうな機能だが、個人的には、ぜひ使ってみることをおすすめする。