JuPyT5 と Data Science Problems (DSP):Jupyter ノートブック向けデータサイエンス・アシスタントの訓練と評価

arXiv preprint (arXiv:2201.12901)(2022) · 論文 · chandel2022jupyt5

📅 この論文を見た日

初回 2026-06-16 / 最終 2026-06-16 / 計 1 回更新

AI解説

情報源:arXiv の HTML 版は存在しない(v1 のみ・PDF/TeX ソースのみ)。本ノートは arXiv の TeX ソース(aaai22.tex)全文を精読して執筆。図は TeX ソースに同梱の PNG(LaTeX/figs/)から、本文で実際に \includegraphics されている図のみを取得して掲載した(\iffalse でコメントアウトされた図は除外)。論文 URL: https://arxiv.org/abs/2201.12901数値はすべて本文・表の記載値。なお、本文(contributions など)には DSP 解決率を「78%」「77.5%」と書く箇所、HumanEval を最適化した温度設定の話など、abstract(旧版の名残らしい別数値が併記)と本文で齟齬がある箇所があるため、本文 §Experiments の表(Table)の値を正として扱う。

一言で

公開 Jupyter ノートブックを丸ごと学習した seq2seq Transformer「JuPyT5」を訓練し、教育用ノートブックから自動で抽出した実行可能ベンチマーク「Data Science Problems (DSP)」で評価した論文。DSP は 306 ノートブック・1119 問題(自然言語/Markdown の問題文+assert ベースのユニットテスト+データ依存)からなる。300M パラメータの JuPyT5 は、最良構成(3 文脈セル+cell infilling)で pass@100 = 77.5% の DSP 問題を解いた。鍵は (1) 後続のテストセルを見せる cell-infilling 学習(pass@1 が baseline の数倍に跳ね上がる)、(2) 文脈セルを増やす、(3) Markdown リッチなデータに絞る、の 3 つ。

背景

問題(problem)

学生にデータサイエンスの問題(Jupyter ノートブック上の課題)を解く提案ができるアシスタントを作れるか? という実現可能性が未検証だった。さらに、そのための評価指標が、データサイエンス・教育ドメインかつ「セル間依存・データ依存・LaTeX 数式」を含む現実的なノートブック環境で存在しなかった。

課題(task = 本論文がやること)

  1. DSP ベンチマークの構築:教育用ノートブックを自動収集・フィルタして、問題文+ユニットテスト+データ依存を持つ実行可能評価セットを作る。
  2. JuPyT5 の訓練:公開 Jupyter ノートブックほぼ全量を、新しい cell-infilling 事前学習目的で訓練する。
  3. 評価:DSP・HumanEval・MBPP で pass@k を測り、文脈量・Markdown 集中・テスト可視の効果をアブレーションする。

論文の貢献(contributions)の要約:

Data Science Problems (DSP) とは

DSP の例1

Figure 1:DSP の一例(上)。ファイルを読み込み、Pandas の dataframe のデータクレンジング(zip code の修正)を求める問題で、解は prompt セルと assert を含む採点セルの間に挿入される。JuPyT5 はこの文脈から正しく解を実装している(下)。

DSP の例2(LaTeX)

Figure 2:DSP の一例(上)。LaTeX で書かれた log-Bernoulli 損失関数の実装を求める問題。JuPyT5 は LaTeX の損失定義を torch を使って正しく解釈し、関数名・引数名も prompt の記述どおりに命名している(下)。

ノートブックの 3 種のセル

nbgrader(教員が課題を作成・検証するツール。コードを実行し instructor の書いた assert を検査する)で作られたノートブックは次の 3 種のセルからなる。

DSP の構築パイプライン(フィルタリング)

  1. JuICe(Jupyter Interactive Computing)開発セットの 448 GitHub リポジトリ=33K の nbgrader ノートブックから開始。
  2. nbclient とデフォルトの Anaconda Python 3.9 環境で全 33K を実行。各セル 600 秒の制限を超えたものは破棄。データ依存を読み込めないノートブック、Python 標準ライブラリや Anaconda デフォルトのデータサイエンス環境に無いライブラリ・非ローカルモジュール・import 失敗を含むものも破棄 → 2134 ノートブックが通過
  3. 2134 のうち、grading セルの assert が solution セルで定義された メソッド名/関数名/変数名/クラス名を参照しているかでさらに厳格にフィルタ → 306 ノートブック・1119 solution セルを特定。

DSP の統計(Table)

項目
GitHub リポジトリ 69
ノートブック 306
問題-テストペア 1119
assert 文の総数 2298
データファイル総数 92
データ参照ノートブック 70
データ依存ノートブック中の問題数 395

Table(DSP の出典・特徴の統計)。1 ノートブックあたり平均 3.6 問。35% の問題が何らかのデータファイルに依存(task-grounded)。

DSP の問題内訳(50 問を手作業分類)

ドメイン 割合
Math Problems 微分の計算 39.5%
Programming Question マージソート 26%
Data Science Pandas Groupby 20%
Machine Learning モデルの構築・訓練 12.5%
Miscellaneous HTTP Get Request 2%

Table(DSP 50 例の定性分析)。手作業分類の 32.5%(DS+ML)が「35% がデータ依存」という測定とよく一致。

DSP で最頻のモジュール(Table):numpy(253)、matplotlib(180)、scipy(125)、pandas(99)、sklearn(53)、seaborn(47)、nose.tools(47)、math(30)。プロット・数値・データサイエンス系が支配的。

HumanEval / MBPP との違い

事前学習データセット

t-SNE 可視化

Figure 3:事前学習データから 17K ノートブックをサンプルした t-SNE 可視化。各点が 1 ノートブック、色は Markdown セルの割合。Markdown 量がノートブックを明瞭に分離する。低 Markdown(青)はスクラッチパッド・(意外にも)研究コード・個人プロジェクト、高 Markdown(黄)は教育的ノートブック(チュートリアル・大学課題)。クラスタラベルは各クラスタ約 10 件を目視して手付け。

訓練サブセット:Markdown Focused

訓練データに Markdown リッチ/プアの明確な分離が見えたため、「literate(文芸的)なコードに絞ると DSP 性能が上がるか」を検証するサブセットを定義。少なくとも 1 つのコードセルがあり、かつ全セルの 1/3 以上が Markdown セルのノートブック。4.1M ノートブック(全体の 3/5)・157 億トークン

モデル(JuPyT5)

Cell-Infilling 事前学習

BART は span-masking、PyMT5 は Python メソッドの構文要素(signature / docstring / body)の 1 つをマスクして再構成する目的で事前学習されていた。本論文はこれをセル単位に拡張し、cell-infilling を定義。

制御コード(Control Codes)

ターゲットがコードにも自然言語にもなるので、CTRL / PyMT5 に倣い制御トークンでドメインを指示。5 種<markdown><code>、および(本稿外の研究用の)<function><class><import>

訓練詳細

実験・結果

評価設定

DSP の結果(メイン表)

文脈 訓練方式 pass@1 pass@10 pass@50 pass@100
C=1 Baseline 6.5% 16.5% 22.7% 25.3%
C=1 MD Focused 7.1% 17.3% 26.2% 27.8%
C=1 Cell Infilling 22.3% 53.5% 65.0% 67.9%
C=3 Baseline 11.2% 25.6% 34.4% 37.9%
C=3 MD Focused 11.2% 28.4% 40.6% 43.9%
C=3 Cell Infilling 33.4% 63.5% 73.9% 77.5%

Table(DSP 上の JuPyT5、訓練方式と文脈セル数 C 別の pass@k)。最良は C=3 + Cell Infilling の pass@100 = 77.5%。読み取れる傾向:(1) 文脈が多いほど良い、(2) Markdown 集中は穏やかな改善、(3) テストを見せる cell infilling が最大の効果。

Markdown Focused の効果

Figure 4:C=3 の 2 モデル(全データ訓練 vs Markdown Focused サブセット)の DSP pass@k 比較。Codex / Austin et al. と同じく pass 率は試行数に対し log-linear。Markdown リッチに絞ると(特に k=100 付近で)穏やかに改善。データ量が 2/5 減でも改善が穏やかだったため、この線は深掘りしていない。

Cell infilling の効果

Figure 5:baseline モデルと cell infilling モデル(後続 1 セルを見せる)の DSP pass@k 比較(C=3)。劇的な改善。cell infilling の pass@1 が baseline の pass@100 に匹敵。理由は (1) モデルが判定されるテストを見られる、(2) 後続セルを見ないと assert を自分で生成してしまい(必ずしも正しくない)、それが失敗を招く(Figure 8 参照)。

文脈セル数の効果

Figure 6:cell infilling モデル(後続テストセルを見せる)で C=1 と C=3(ターゲット前の文脈セル数)を比較。全 k で一貫して約 10% の pass@k 向上。前の問題の解が見えるため理にかなう(テンプレ流用挙動、Figure 9 参照)。

CodeBLEU と pass 率

Figure 7:青曲線は全 DSP タスクを JuPyT5 の 100 サンプル pass 率順に並べたもの。赤線は正解コードと各仮説の平均 CodeBLEU。両者の相関は弱く、BLEU/CodeBLEU は仮説プログラムの正しさ判定に有用でないことを示す。

HumanEval / MBPP の結果

HumanEval(pass@k、対 Codex):

モデル k=1 k=10 k=100
Codex-85M 8.22% 12.81% 22.4%
Codex-300M 13.17% 20.37% 36.27%
JuPyT5-300M 5.4% 15.46% 25.6%

Table(HumanEval)。同サイズ(300M)の Codex に JuPyT5 は負ける(85M Codex には勝つ)。Markdown とメソッド docstring の書式差が一因で、docstring を Markdown 風にすると差が縮む(=小さいモデルほど書式に敏感)。

MBPP(pass@k=80、80 サンプル。PS = Program Synthesis モデル):

モデル pass@80
PS-422M 15%
PS-4B 33%
PS-68B 54%
PS-137B 63%
JuPyT5-300M 52.2%

Table(MBPP)。300M の JuPyT5 が 68B の巨大 PS モデルに匹敵(54% に対し 52.2%)。PS はコードを含む多様な英語文書で訓練されたのに対し、JuPyT5 はコードドメインに集中しているため。

考察

assert 生成の例

Figure 8:baseline JuPyT5 が仮説コードと一緒に assert 文まで予測してしまう例。訓練データにユニットテストが多いことの表れ。cell infilling が大きく改善するのは、後続の grading セルが見えると、モデルが(誤りうる)assert を余計に予測しなくなるため。

テンプレ流用の例

Figure 9:JuPyT5 がテンプレート的挙動で予測する例。prompt のコードと解が明らかに類似し、モデルは関数内のコメントまで(ほぼ正しく)適応している。

難問の例

難問の例(続き)

Figure 10:JuPyT5 がほとんど解けなかった DSP の「難問」2 つ。上は least-squared 損失関数の中にモデルが入っており、複数のロジック連鎖を組み立てるのが苦手(Codex / Austin et al. も報告)。下は難しくないが問題文に定義がなく、モデルが L1 ノルムの定義を「知っている」ことに依存する(大きなモデルなら改善しやすい類)。なお最易問は「列を落とす」など一般的な Pandas dataframe 操作だった。

まとめ

Q&A

(まだなし)

自分のコメント

(まだなし)