見出し画像

このスクリプトは、サカナAIが作った科学論文のLaTeX文書を自動生成するパイソンコードです。主に、LaTeXファイルの生成、引用の管理、セクションの執筆、エラーの修正などを行います。

perform_writeup.py 論文を書く

スクリプトの詳細

  1. モジュールのインポート

    • `argparse`, `os`, `shutil`, `subprocess`などのモジュールをインポートします。これらは、ファイル操作やコマンドライン引数の処理に使用されます。

  2. LaTeX生成関数: `generate_latex`

    • パスの設定: `osp.abspath`と`osp.join`を使用して、絶対パスを取得し、作業ディレクトリを設定します。

    • 参考文献の確認: LaTeXファイル内の引用が`references.bib`に含まれているかを確認します。見つからない場合は警告を出し、修正を促します。

    • 図の確認: LaTeXファイルに含まれる図がディレクトリ内に存在するかを確認し、存在しない場合は警告を出します。

    • 重複の削除: 重複する図やセクションヘッダーを検出し、削除を促します。

    • エラー修正: `chktex`を使用してLaTeXのバグを検出し、修正を行います。

  3. 引用管理

    • 引用の追加: `get_citation_aider_prompt`関数を使用して、論文に必要な引用を追加します。Semantic Scholar APIを使用して関連する論文を検索し、引用を追加します。

  4. 論文の執筆

    • 各セクション(例: タイトル、概要、導入、背景、方法、実験設定、結果、結論)を執筆するためのプロンプトを生成します。各セクションの執筆前に、コメントで段落の内容を簡単に説明します。

  5. メイン関数

    • コマンドライン引数を解析し、指定されたモデルとフォルダを使用して、論文の執筆を開始します。選択したAIモデルに基づいて、適切なAPIクライアントを設定します。

このスクリプトは、AIを活用して科学論文の執筆プロセスを効率化し、エラーの少ないLaTeX文書を生成することを目的としています。

コードの中身

  1. 必要なライブラリとモジュールのインポート:

import argparse
import os
import os.path as osp
import shutil
import subprocess
from typing import Optional, Tuple
from ai_scientist.generate_ideas import search_for_papers
from ai_scientist.llm import get_response_from_llm, extract_json_between_markers
import re
import json

サブプロセス実行、型ヒント、正規表現処理、JSONハンドリングなど、プログラムの様々な機能に必要なものです。

  1. LaTeX生成関数の定義:

def generate_latex(coder, folder_name, pdf_file, timeout=30, num_error_corrections=5):
    # ... (関数の内容)

LaTeXファイルを生成し、コンパイルしてPDFを作成します。主な処理は以下の通りです:

  • 参照の検証

  • 図の存在確認

  • 重複図の削除

  • 重複セクションヘッダーの削除

  • LaTeXエラーの修正

  1. LaTeXコンパイル関数の定義:

def compile_latex(cwd, pdf_file, timeout=30):
    # ... (関数の内容)

この関数は、LaTeXファイルをPDFにコンパイルします。pdflatexとbibtexコマンドを使用して、参考文献を含む完全なPDFを生成します。

  1. セクションごとのヒントの定義:

per_section_tips = {
    "Abstract": "...",
    "Introduction": "...",
    # ... (他のセクション)
}

これは、論文の各セクションを書く際のヒントを提供する辞書です。

  1. エラーリストの定義:

error_list = """
- Unenclosed math symbols
- Only reference figures that exist in our directory
# ... (他のエラー項目)
"""

これは、LaTeXドキュメントで一般的に発生するエラーのリストです。

  1. 引用ヘルパー関数の定義:

def get_citation_aider_prompt(client, model, draft, current_round, total_rounds):
    # ... (関数の内容)

この関数は、論文に引用を追加するためのプロンプトを生成します。Semantic Scholar APIを使用して関連論文を検索し、適切な引用を選択します。

  1. メイン関数の定義:

def perform_writeup(idea, folder_name, coder, cite_client, cite_model, num_cite_rounds=20):
    # ... (関数の内容)

この関数は、論文の実際の執筆プロセスを管理します。各セクションを順番に書き、引用を追加し、全体を洗練させます。

  1. メインの実行部分:

if __name__ == "__main__":
    # ... (コマンドライン引数の解析とセットアップ)
    # ... (AIモデルの選択と初期化)
    # ... (論文の生成実行)

このセクションでは、コマンドライン引数を解析し、適切なAIモデルを選択・初期化し、論文生成プロセスを開始します。


この記事が気に入ったらサポートをしてみませんか?