ML論文を実装しようとするとき、最初の壁は「論文が曖昧すぎる」ことです。ハイパーパラメータは付録の隅に埋もれ、数式と本文の記述が矛盾していることもあります。LLMにコードを生成させると動くものはできますが、どこまでが論文の記述でどこからがAIの補完なのかを区別する手段がありません。

この記事でわかること:

  • paper2codeが解決する問題と特徴
  • インストール方法と基本的な使い方
  • 生成されるファイルの構成と役割
  • 引用アンカーとUNSPECIFIEDフラグの仕組み

paper2codeとは

https://github.com/PrathamLearnsToCode/paper2code

paper2codeは、arXivのURLを渡すだけで実装コードを生成するClaude Codeのエージェントスキルです。GitHubで1,100以上のスターを獲得しており(2026年4月時点)、2026年4月に公開されました。

通常のLLMによるコード生成との最大の違いは、コードの根拠が明示される点にあります。生成された各コードには論文のセクション番号や数式番号が紐づいており、「このコードは論文の§3.2に基づく」という形で確認できます。論文に記載がない設定値は「[UNSPECIFIED]」と明示され、採用した値と他の候補が並んで示されます。

インストール方法

Claude Codeにスキルとして追加するには、以下のコマンドを実行します。

npx skills add PrathamLearnsToCode/paper2code/skills/paper2code

実行するとエージェントの選択(Claude Codeなど)、スコープの選択(グローバルまたはプロジェクト単位)、インストール方式(シンボリックリンクまたはコピー)を順に問われます。グローバルインストールを選ぶと、どのプロジェクトからでも使えるようになります。

基本的な使い方

インストール後、Claude Codeを起動して以下のスラッシュコマンドを実行します。

/paper2code https://arxiv.org/abs/1706.03762

arXivのIDだけを渡す形式でも動作します。

/paper2code 1706.03762

フレームワークを指定する場合は --framework を付けます。

/paper2code https://arxiv.org/abs/2006.11239 --framework jax

--mode オプションで出力の粒度を変えることができます。full はトレーニングループとデータパイプラインを含み、educational は詳細なコメントとウォークスルーノートブックを追加します。

/paper2code https://arxiv.org/abs/2010.11929 --mode educational

生成されるファイルの構成

コマンドを実行すると、論文名に対応したフォルダが生成されます。「Attention Is All You Need」(1706.03762)を例にすると、以下の構成になります。

attention_is_all_you_need/
├── README.md
├── REPRODUCTION_NOTES.md
├── requirements.txt
├── src/
│   ├── model.py
│   ├── loss.py
│   ├── data.py
│   ├── train.py
│   ├── evaluate.py
│   └── utils.py
├── configs/
│   └── base.yaml
└── notebooks/
    └── walkthrough.ipynb

各ファイルの役割は明確に分離されています。model.py はアーキテクチャの実装で、各クラスが論文のセクションに対応し、変数名は論文の数式表記を踏襲します。REPRODUCTION_NOTES.md は曖昧さの監査レポートで、すべての実装判断を「SPECIFIED / PARTIALLY_SPECIFIED / UNSPECIFIED」に分類して記録します。base.yaml はハイパーパラメータの唯一の定義ファイルで、論文に根拠があるものは引用元を記載し、ないものはUNSPECIFIEDフラグを付けます。walkthrough.ipynb はCPU環境で動作するノートブックで、論文の文章・数式・コードを並べて示します。

引用アンカーとUNSPECIFIEDフラグの仕組み

paper2codeの核心は「なぜそのコードを書いたかを示す」設計にあります。

生成されるコードには、論文のセクション番号と数式番号が注釈として入ります。

# §3.2 — "We apply layer normalization before each sub-layer" (Pre-LN variant)
class TransformerBlock(nn.Module):
    def forward(self, x):
        # §3.2, Eq. 2 — attention_weights = softmax(QK^T / sqrt(d_k))
        attn_out = self.attention(self.norm1(x))  # (batch, seq_len, d_model)
        x = x + attn_out  # §3.2 — residual connection

論文が明示しない設定には、採用した値と候補値を列挙した形でコメントが付きます。

# [UNSPECIFIED] Paper does not state epsilon for LayerNorm — using 1e-6 (common default)
# Alternatives: 1e-5 (PyTorch default), 1e-8 (some implementations)
self.norm = nn.LayerNorm(d_model, eps=1e-6)

曖昧さのタグは4種類あります。§X.Y は論文の該当セクションに直接記載がある箇所、[UNSPECIFIED] は論文に記載のない設定、[PARTIALLY_SPECIFIED] は記載はあるが表現が曖昧な箇所、[ASSUMPTION] は文脈から推論した箇所です。

従来のLLMによるコード生成では、曖昧な部分がデフォルト値で黙って埋められます。どこまでが論文由来でどこからがAIの創作かを区別する手段がなく、再現実験の検証作業が困難でした。paper2codeはその境界線を明示するために設計されています。

paper2codeがカバーしないこと

スキルの仕様として、以下は対象外です。データセットのダウンロードは data.py にスケルトンと取得先の説明を記載するにとどまります。分散学習・実験管理・チェックポイントなどのインフラ整備は含みません。ベースラインモデルの実装も対象外で、論文の主要な貢献部分のみを実装します。

論文の記述が誤っていれば、コードも同様に誤ります。ただし、誤りの発生箇所が引用アンカーで追跡できるため、どのセクションの記述が問題なのかを特定しやすくなります。

まとめ

paper2codeはML論文の実装を自動化するClaude Codeスキルです。すべてのコードを論文の該当箇所に紐づけ、論文に記載のない設定を [UNSPECIFIED] で明示する点が特徴です。

インストールはnpx一行で完了します。arXiv論文を実装する際の初期コードベース生成として使うと、どの部分を自分で検証すべきかを素早く把握できます。