見出し画像

AIによる自律論文作成プロセス:AI Scientistのプロンプト解説

sakana.aiが発表した「AI Scientist(AI科学者)」が話題ですね。このAI Scientistは、機械学習の分野で新しいアイデアを生み出し、実験を行い、論文を執筆し、さらには論文を査読する一連のプロセスを自動化します。

今回AI Scientistシステムのプロンプトを紹介していきます。論文作成にも活用できると思いますので是非ご覧ください。AIによる研究プロセスの自動化は、私たち研究者の仕事を大きく変える可能性を秘めています。


個人的な着目点

1.アイデア発案と新規性評価

AIがアイデアを生成し、既存論文との比較により新規性を評価する機能は注目に値します。特に、Semantic Scholar APIを用いた論文検索システムが詳細に指示されている点は興味深いです。私の理解ではSemantic Scholar APIは医学系は弱いと思いますが、Pubmed APIはポンコツなので医学系の論文でこのシステムを構築するのは難しいと思いました。
2.実験の自動化
機械学習系の研究であれば実験計画から実行、結果分析までをAIが担当することができますが、いわゆるWetな基礎系研究やデータを手動で取るような臨床研究はまだ人間が担当しなくてはなりませんね。
3.論文執筆と改善プロセス
AIによる論文執筆、自己査読、改善のサイクルは革新的です。論文作成自体のpromptは比較的シンプルで一発出しで良い文章を得るのは難しいのでは無いかと思いますが、擬似査読を経てブラッシュアップする過程で、論文の質向上に寄与しているのではと思いました(実際AI Scientistによって作成された論文も読めます)。しかし多数のサイクルを回すシステム設計は、API使用料金の増大につながる可能性があります。実際このシステムを回した清水さんも2日間で300ドル近くかかったようです。まあ論文2本が300ドルで一晩で仕上がれば安いといえば安いと思いますが…

4.文献の後付け
論文本文を先に生成し、後から文献を追加する手法は、AIの文章生成能力を活用する工夫として興味深いです。個人的には先に文献を提示してあげた方がハルシネーションが減ってよいとは考えています。


AI Scientistによる論文生成システム

主な機能は以下の通りです:

  1. アイデア生成:

    • `generate_ideas` 関数は、与えられた機械学習のコードとタスクの説明に基づいて、新しい研究アイデアを生成します。

    • `check_idea_novelty` 関数は、生成されたアイデアが既存の文献と重複していないか、つまり新規性があるかをSemantic Scholar APIを用いてチェックします。

  2. 実験の実行:

    • `perform_experiments` 関数は、AI Scientistが生成したアイデアに基づいて、コードを変更し、実験を実行します。

    • 実験結果は自動的に記録され、分析されます。

  3. 論文の執筆:

    • `perform_writeup` 関数は、実験結果に基づいて、LaTeX形式で論文を自動的に生成します。

    • `generate_latex` 関数は、LaTeXコードをコンパイルし、PDFファイルを生成します。

  4. 論文の査読:

    • `perform_review` 関数は、生成された論文を査読し、NeurIPS形式のレビューを生成します。

    • `perform_improvement` 関数は、レビューに基づいて論文を改善します。

このシステムは、以下の特徴を持ちます:

  • 複数のLLM(大規模言語モデル)に対応しており、OpenAI APIやAnthropic APIなどを利用できます。

  • 並列処理に対応しており、複数のアイデアを同時に評価することができます。

  • 査読と改善のプロセスを自動化することで、研究の効率化を図ります。

では以下にこのシステムで利用されているプロンプトを中心に見ていきましょう。長いので興味のある部分だけかいつまんで見てください。以下に各工程のプロンプトの要点を書いておきます。

各工程のプロンプトの要点

1. アイデア生成:

  • `idea_first_prompt` (新規アイデア生成時):

    • 既存のコードやタスクの説明に基づき、新規性・実現可能性・影響力のある研究アイデアをJSON形式で生成。

    • アイデアの動機、実装方法、評価を記述する「思考」セクションを含む。

    • 専門家による評価結果(Score)をフィードバックとして組み込む。

  • `idea_reflection_prompt` (アイデア改善時):

    • 直前に生成したアイデアの質・新規性・実現可能性を再検討し、改善点を修正。

    • 改善が不要な場合は、前回のJSONを繰り返し、「終了します」と明記。

2. 実験の実行:

  • `coder_prompt` (実験計画):

    • 与えられたアイデアとベースライン結果に基づき、最大{max_runs}回の実験計画を`python experiment.py --out_dir=run_i`コマンド形式で立案。

  • `next_prompt` (実験結果に基づく計画修正):

    • 実験結果を提示し、必要であれば実験計画を見直し、`notes.txt`に実験の詳細を記録。

    • 実験が完了したら'ALL_COMPLETED'と返答。

3. 論文の執筆:

  • アブストラクト:

    • 論文全体の要約、研究の目的・意義・課題・提案手法・結果などを記述。

    • スムーズで説得力のある文章で、1つの連続した段落として記述。

  • 各セクション (Introduction, Background, Method, Experimental Setup, Results, Conclusion):

    • 各セクションの執筆ガイドラインを提供。

    • 引用の仕方、実験結果の配置、段落の構成方法などについての指示を含む。

  • Related Work (初期段階):

    • 関連研究セクションの構造を簡潔にスケッチし、含める論文を明確化。

    • LaTeXのコメント機能を使用して計画を立てる。

  • 論文改善 (refinement & 2回目のrefinement):

    • 文章の質向上と完成度を高めるための具体的な指示。

    • LaTeX構文エラー、図表の参照、引用の整合性など、よくある問題点の修正を促す。

  • 引用追加 (citation & citation_second_prompt):

    • 論文全体を通して関連論文の引用を追加。

    • Semantic Scholar API を用いて適切な引用を見つけ、`references.bib` ファイルに追加。

  • 引用追加後の修正:

    • 追加された引用をドラフトに統合し、引用がテキストに適切に組み込まれていることを確認。

4. 論文の査読:

  • `reviewer_system_prompt_neg` / `reviewer_system_prompt_pos`:

    • AI Reviewer に対する基本的な査読方針(肯定的 or 否定的)を指示。

  • `template_instructions`:

    • NeurIPS 形式のレビューテンプレートに基づき、具体的なレビュー内容と評価項目を指示。

    • 要約、強み、弱み、新規性、品質、明確さ、重要性、質問、制限、倫理的懸念、健全性、プレゼンテーション、貢献度、全体評価、信頼度、決定を評価。

アイデア生成:

  1. `idea_first_prompt` (新規アイデア生成時):

解説:このプロンプトは、AI Scientistに新しい研究アイデアを生成するよう指示しています。タスクの説明、既存のコード、そして以前に生成されたアイデアを考慮に入れながら、実行可能で影響力のある創造的なアイデアを考え出すことを求めています。回答は「思考」部分とJSON形式のアイデア詳細に分かれており、アイデアの動機、実装方法、そして興味深さ、実現可能性、新規性の評価を含めることを要求しています。

{タスクの説明}
<experiment.py>
{コード}
</experiment.py>
以下は、あなたがすでに生成したアイデアです:
'''
{以前のアイデアの文字列}
'''
提供されたコードで実行可能な、次の影響力のある創造的な研究実験とその方向性のアイデアを考え出してください。
追加のリソースやデータセットにアクセスできないことに注意してください。
どのアイデアも特定のトレーニングデータセットやモデルに過度に適合せず、より広い意義を持つようにしてください。
以下の形式で回答してください:
思考:
<思考>
新しいアイデアのJSON:
```json
<JSON>

<思考>では、まずアイデアについての直感と動機を簡潔に述べてください。高レベルの計画、必要な設計の選択肢、実験の理想的な結果について詳しく説明してください。そのアイデアが既存のものとどのように異なるかを正当化してください。<JSON>では、以下のフィールドを持つJSON形式で新しいアイデアを提供してください:

"Name": アイデアの短い説明。小文字、スペースなし、アンダースコア可。
"Title": アイデアのタイトル。レポート作成に使用されます。
"Experiment": 実装の概要。例:どの関数を追加または変更する必要があるか、結果をどのように得るか、など。
"Interestingness": 1から10までの評価(最低から最高)。
"Feasibility": 1から10までの評価(最低から最高)。
"Novelty": 1から10までの評価(最低から最高)。

評価には慎重かつ現実的であってください。このJSONは自動的に解析されるため、形式が正確であることを確認してください。アイデアを改善するために{反復回数}回の機会がありますが、すべてを使う必要はありません。

2.`idea_reflection_prompt`(アイデア改善時)

解説:このプロンプトは、AI Scientistに直前に生成したアイデアを評価し、必要に応じて改善するよう指示しています。アイデアの質、新規性、実現可能性を再検討し、改善点があれば修正を加えることを求めています。改善の必要がない場合は、前回のJSONをそのまま繰り返し、「終了します」と明記することで、改善プロセスを終了することができます。

ラウンド {現在のラウンド}/{反復回数}。
思考の中で、まずあなたが直前に作成したアイデアの質、新規性、実現可能性を慎重に検討してください。
アイデアを評価する上で重要だと思われる他の要因も含めてください。
アイデアが明確で簡潔であり、JSONが正しい形式であることを確認してください。
物事を過度に複雑にしないでください。
次の試みでは、アイデアを洗練し改善するよう努めてください。
明らかな問題がない限り、元のアイデアの本質を守ってください。

以前と同じ形式で回答してください:
思考:
<思考>
新しいアイデアのJSON:
jsonCopy<JSON>
改善する点がない場合は、思考の後に前回のJSONを正確に繰り返し、思考の最後(JSONの前)に「終了します」と記載してください。
変更を加えない場合にのみ「終了します」を含めてください。

3. `generate_next_idea` 内で用いられる `idea_first_prompt` への追加部分

解説:この追加部分は、過去に生成されたアイデアの評価結果を提供しています。ML(機械学習)の専門家によるレビューに基づくスコアシステムを説明し、スコア0が失敗を意味することを明確にしています。これにより、AI Scientistは過去のアイデアの成功や失敗を考慮しながら、新しいアイデアを生成することができます。

(オープンエンド生成時):完了したアイデアには、MLの専門家レビュアーによる評価を示す追加の「Score」フィールドがあります。
これは標準的な1-10のML会議スケールに基づいています。
スコア0は、実験中、文章作成中、またはレビュー中にアイデアが失敗したことを示します。

総括:
これらのプロンプトは、AI Scientistが段階的に研究アイデアを生成し、改善し、評価結果を踏まえて新たなアイデアを考案するプロセスを導きます。各段階で求められる思考プロセスと出力形式を明確に指定することで、一貫性のある高品質なアイデア生成を促進しています。また、アイデアの実現可能性や新規性、影響力を常に考慮するよう促すことで、実用的かつ革新的な研究方向性を探索することを目指しています。

実験の実行:

この部分で使用されるプロンプトは、 `perform_experiments` 関数内で動的に生成されるため、コード上に直接記述された形では存在しません。

具体的には、以下の2つの変数に格納されたテンプレートをもとに、実行時の状況に合わせてプロンプトが生成されます。

  1. `coder_prompt`: 各実験の実行前に使用されます。

解説:このプロンプトは、AI Scientist に対して、与えられたアイデア(`title` と `idea`) をもとに、最大 {max_runs} 回の実験計画を立て、`python experiment.py --out_dir=run_i` というコマンド形式で実行するように指示します。ベースラインの結果 (`baseline_results`) も提供されます。

あなたの目標は次のアイデアを実装することです:{title}。
提案された実験は以下の通りです:{idea}。
必要な実験を完了するために、合計で最大{max_runs}回の実行が与えられています。{max_runs}回すべてを使用する必要はありません。
まず、実行したい実験のリストを計画してください。例えば、特定のハイパーパラメータを変化させる場合、各実行で試したい値をそれぞれ計画してください。
なお、すでに基本的なベースラインの結果を提供しているため、それを再実行する必要はありません。
参考として、ベースラインの結果は以下の通りです:
{baseline_results}
各変更を完了した後、私たちはpython experiment.py --out_dir=run_iというコマンドを実行します。ここでiは実行番号であり、結果を評価します。
あなたが提案する変更は、このコマンド形式を使用しなければなりません。追加のコマンドライン引数を加えないでください。
その後、リストの次の項目を実装することができます。

2.`next_prompt`: 各実験の実行後に使用されます。

解説:このプロンプトは、AI Scientist に対して、実験結果 (`results`) を提示し、必要であれば実験計画を見直すように指示します。また、将来の論文執筆のために、`notes.txt` に実験の詳細を記録するように指示します。

実行{run_num}が完了しました。以下が結果です:
{results}
この結果を踏まえて、実験計画を再検討する必要があるかどうかを決定してください(多くの場合、再検討は必要ありません)。
将来、他の誰かがこの実験の報告書を作成するために notes.txt を使用します。
実行{run_num}に関する報告書のためのすべての関連情報を含めてください。実験の説明と実行番号を必ず含めてください。必要に応じて詳細に記述してください。
次に、あなたのリストの次の項目を実装してください。
その後、私たちは python experiment.py --out_dir=run_{run_num + 1} というコマンドを実行します。
あなたが提案する変更は、このコマンド形式を使用しなければなりません。追加のコマンドライン引数を加えないでください。
実験が全て完了した場合は、'ALL_COMPLETED'と回答してください。

総括:
これらのプロンプトは、 `perform_experiments` 関数内でループ処理され、AI Scientist は実験結果に基づいて動的に実験計画を修正しながら、最終的に 'ALL_COMPLETED' を返すまで実験を繰り返します。このように、実験の実行部分のプロンプトは実行時の状況に合わせて動的に生成されます。

論文の執筆

論文の執筆:の部分で使用されているプロンプトは以下の通りです。

1. アブストラクト
解説:
このプロンプトは、LaTeX文書のタイトルと要約(Abstract)セクションを作成するための指示を提供しています。

プロジェクトに latex/template.tex ファイルを提供しました。これをセクションごとに埋めていきます。
まず、論文の「タイトル」と「要約(Abstract)」のセクションを記入してください。
以下にいくつかのヒントを提供します:
- 論文全体の要約 (TL;DR) を記述すること。
- 研究の目的と意義 を明確にすること。
- 研究の課題 を説明すること。
- 提案手法 (貢献) を簡潔に説明すること。
- 実験結果 を要約して、提案手法の有効性を示すこと。
- スムーズで説得力のある文章 を書くこと。
- 段落を改行せず、1つの連続した段落 として記述すること。
各段落の前に、その段落で何を書く予定かを簡単に説明するコメントを入れてください。
必ず最初にファイル名を指定し、これらの編集を行うために SEARCH/REPLACE ブロックを使用してください。

筆者注:「SEARCH/REPLACEブロック」とは、このコード内ではAI Scientistがコードを編集する際に推奨される特定のフォーマットを指しています。具体的には、AI Scientistが論文のLaTeXファイル(template.tex)を編集する際に、直接コードを書き換えるのではなく、以下のような形式で編集指示を出すことを推奨しています。

SEARCH/REPLACE
% ここに検索対象のLaTeXコードを記述する

これは、AI Scientistが生成した編集内容を人間がより容易に理解し、必要に応じて修正できるようにするための工夫です。

latexテンプレート
は以下のようなものです。

1. ドキュメントクラスと必要なパッケージの宣言
- ICLR 2024会議用のスタイルファイルを使用
- 様々な機能(ハイパーリンク、表、数式記号など)のためのパッケージを含む

2. 参考文献のためのBibTeXエントリ
- 深層学習、注意機構、最適化手法などに関する重要な論文が含まれている

3. 論文の基本構造
- タイトル("TITLE HERE"と表示されている箇所を置き換える)
- 著者情報
- 要約("ABSTRACT HERE"と表示されている箇所を置き換える)

4. 本文セクション
- 導入(Introduction)
- 関連研究(Related Work)
- 背景(Background)
- 方法論(Method)
- 実験設定(Experimental Setup)
- 結果(Results)
- 結論と今後の課題(Conclusions and Future Work)

5. 図の挿入例
- 2つのサブ図を含む図の例が提供されている
- キャプションを追加する必要がある

6. 参考文献
- BibTeXを使用して自動生成される

7. AI Scientistによる生成の明記
- 論文がAI Scientistによって生成されたことを示す文が含まれている

2. 各セクション (Introduction, Background, Method, Experimental Setup, Results, Conclusion)

解説:このプロンプトは、論文や報告書の特定のセクションを書くためのガイドラインを提供しています。引用の仕方、実験結果の配置、段落の構成方法などについての指示が含まれています

文書の{section}セクションを記入してください。以下にいくつかのヒントを提供します:
{per_section_tips[section]}
関連する箇所では必ず\citeまたは\citetを使用し、ファイルに提供されている文献を参照してください。
references.bibにすでに含まれているもの以外は引用しないでください。これに新しいエントリーを追加しないでください。
実験結果(図表)は結果セクションにのみ記載し、キャプションが必ず記入されていることを確認してください。
この段階では、論文の後半のセクションにある内容は参照しないでください。
各段落の前に、その段落で書こうとしている内容の簡単な説明をコメントとして含めてください。
必ずまずファイル名を指定し、これらの編集を行うためにSEARCH/REPLACEブロックを使用してください。

`per_section_tips[section]`について
`per_section_tips[section]` は、論文の各セクション (`Introduction`, `Related Work`, `Background`, `Method`, `Experimental Setup`, `Results`, `Conclusion`) に対する執筆のヒントを提供する辞書 `per_section_tips` から、指定されたセクション `section` に対応するヒントを取り出すものです。以下は、`per_section_tips` に定義されている各セクションに対するヒントです。

**1. `per_section_tips["Abstract"]`:**

* 論文全体の要約 (TL;DR)
* 研究の目的と意義
* 研究の課題
* 提案手法 (貢献) の説明
* 実験結果の要約
* スムーズで説得力のある文章
* 段落を改行せず、1つの連続した段落

**2. `per_section_tips["Introduction"]`:**

* アブストラクト (論文全体) の詳細版
* 研究の目的と意義
* 研究の課題
* 提案手法 (貢献) の説明
* 検証方法 (実験と結果) の説明
* 貢献を箇条書きでリストアップ (最近のトレンド)
* 将来の研究 (余裕があれば)

**3. `per_section_tips["Related Work"]`:**

* 関連研究 (同じ問題を解決しようとした論文) の紹介
* 比較と対照 (先行研究との違いを明確化)
* 実験セクションでの比較 (適用可能な場合)
* 適用できない理由の説明 (適用できない場合)
* 単なる論文内容の説明ではなく、比較と対照が重要

**4. `per_section_tips["Background"]`:**

* 基礎となる概念や先行研究 (提案手法を理解するために必要な知識) の説明
* 問題設定 (Problem Setting)
* 問題設定と表記法 (Formalism) を正式に導入
* 異常な仮定があれば強調
* 新規の問題設定を提案する場合は、別のセクションを作成

**5. `per_section_tips["Method"]`:**

* 提案手法の詳細な説明
* なぜその手法を採用したのか
* 問題設定で導入された表記法を使用
* 背景セクションで説明した概念や基盤に基づく

**6. `per_section_tips["Experimental Setup"]`:**

* 提案手法の検証方法
* 問題設定の具体的なインスタンス化
* データセット、評価指標、重要なハイパーパラメータ、実装の詳細
* 不明なハードウェアの詳細を想像しない

**7. `per_section_tips["Results"]`:**

* 実験結果 (Methodセクションで説明した手法をExperimental Setupで説明した問題に適用した結果)
* ハイパーパラメータと公平性に関する問題
* 実際に行った実験の結果のみ (存在しない結果を捏造しない)
* ベースラインとの比較 (結果が存在する場合)
* 統計と信頼区間 (結果が存在する場合)
* アブレーション研究 (手法の特定の部分が関連していることを示す) (結果が存在する場合)
* 手法の限界の議論
* すべての実験結果と関連する図を含める

**8. `per_section_tips["Conclusion"]`:**

* 論文全体の簡単な要約
* 将来の研究 (今後の研究の可能性)

これらのヒントは、AI Scientist が各セクションの内容を理解し、質の高い論文を生成するのを助けるためのガイドラインとして機能します。`perform_writeup` 関数内で、それぞれのセクションを生成する際に対応するヒントが使用されます。

3. Related Work (初期段階)

解説:このプロンプトは、論文や報告書の関連研究セクションを書くための具体的な指示を提供しています。セクションの構造をスケッチし、含める論文を明確にすることを求めています。また、簡潔さを重視し、最も関連性の高い研究に焦点を当てることを強調しています。さらに、LaTeXのコメント機能を使用して計画を立てることや、引用の追加に関する注意事項も含まれています。

文書の関連研究(Related Work)セクションを記入してください。以下にいくつかのヒントを提供します:
{per_section_tips["Related Work"]}
- 関連研究 (同じ問題を解決しようとした論文) の紹介
- 比較と対照 (先行研究との違いを明確化)
- 実験セクションでの比較 (適用可能な場合)* 適用できない理由の説明 (適用できない場合)
- 単なる論文内容の説明ではなく、比較と対照が重要
このセクションでは、セクションの構造を非常に簡潔にスケッチし、含める予定の論文を明確に示してください。
これらすべてを%を使用してLaTeXのコメントで行ってください。
関連研究は簡潔であるべきで、最も関連性の高い研究のみを議論する計画を立ててください。
新しい引用を追加するためにreferences.bibを修正しないでください。これは後の段階で記入されます。
必ずまずファイル名を指定し、これらの編集を行うためにSEARCH/REPLACEブロックを使用してください。


4. 論文改善 (refinement)

解説:
このプロンプトは、文章の質を向上させ、完成度を高めるためのものです。具体的なエラーリストを参照することで、よくある問題点を避け、より洗練された内容にすることを目指しています。

素晴らしい仕事です!ここで、あなたが直前に書いた{section}セクションのみを批評し、改良してください。
この段階で完成させてください。プレースホルダー(仮の内容)を残さないでください。
特に以下のようなエラーの修正に注意を払ってください:
- ディレクトリ内に存在する図のみを参照すること
- LaTeX構文エラー
- 明示的な実験やログに基づかない数値結果
- 重複して定義された図のラベル
- .bibファイルに含まれていない論文の参照(新しい引用を追加しないこと!)
- 不必要な冗長さや繰り返し、不明瞭な文章
- まだ含まれていない`notes.txt`内の結果や洞察
- まだ本文に含まれていない関連図
- \\begin{{figure}}を\\end{{figure}}で、\\begin{{table}}を\\end{{table}}で閉じるなど
- 重複したヘッダー(例:\\section{{Introduction}}や\\end{{document}}の重複)
- エスケープされていない記号(例:テキスト内のshakespeare_charはshakespeare\\_charとすべき)
- 環境の不適切な閉じ方(例:\\end{{figure}}の代わりに</end{{figure}}>を使用)

5. 論文改善 (2回目のrefinement)

{section}のみを批評し、改良してください。以下のアドバイスを思い出してください:
{tips}
この段階で完成させてください。プレースホルダー(仮の内容)を残さないでください。
論文の他の部分とどのように適合するかに注意を払ってください。
冗長な部分(例えば、繰り返される図や繰り返されるテキスト)があれば特定し、論文のどの部分を削除すべきか決定してください。
スペースを節約できる箇所を特定し、テキストのメッセージを弱めることなく、より簡潔にできる部分を見つけてください。
以前と同様に、残っているエラーを修正してください:
- ディレクトリ内に存在する図のみを参照すること
- LaTeX構文エラー
- 明示的な実験やログに基づかない数値結果- 重複して定義された図のラベル
- .bibファイルに含まれていない論文の参照(新しい引用を追加しないこと!)- 不必要な冗長さや繰り返し、不明瞭な文章
- まだ含まれていない`notes.txt`内の結果や洞察
- まだ本文に含まれていない関連図- \\begin{{figure}}を\\end{{figure}}で、\\begin{{table}}を\\end{{table}}で閉じるなど- 重複したヘッダー(例:\\section{{Introduction}}や\\end{{document}}の重複)
- エスケープされていない記号(例:テキスト内のshakespeare_charはshakespeare\\_charとすべき)
- 環境の不適切な閉じ方(例:\\end{{figure}}の代わりに</end{{figure}}>を使用)

6. 引用追加 (citation)

citation_system_msg
このメッセージは、AIの博士課程の学生の役割を説明し、論文の引用を追加するタスクの詳細を提供しています。

あなたは、分野に大きく貢献する論文を発表しようと目指している野心的なAI博士課程の学生です。
すでに論文の初稿を書き上げており、今は論文全体を通して関連論文の引用を追加しようとしています。
関連研究のセクションには、追加して議論すべき論文についていくつかの初期コメントがすでにあります。
既存の記述を完成させることに集中し、必要でない限り全く新しい要素を追加しないでください。
論文の各ポイントが十分な証拠で裏付けられていることを確認してください。
特定のポイントに対して引用が1つか2つしかない場合は、さらに引用を追加してもかまいません。
`references.bib`ファイルに対応する参考文献がない論文が引用されていないことを確認してください。
関連研究の各段落に十分な背景(例:数本の論文の引用)があることを確認してください。
Semantic Scholar APIにアクセスできるようになるので、APIを使用して見つけた引用のみを追加してください。
少なくとも5つの新しい引用を追加してください!
引用をどこにどのように追加するかの正確な説明と、引用する論文の検索クエリを入力するよう求められます。
最後に、検索結果(上位10件の結果が表示されます)から最も関連性の高い引用を選択します。
参考文献に追加するのに{total_rounds}ラウンドありますが、すべてを使用する必要はありません。
すでに存在する引用を追加しないでください!

citation_first_prompt
このプロンプトは、AIに現在の草稿を提示し、新しい引用を追加するための指示を与えています。

ラウンド {current_round}/{total_rounds}:
あなたはこれまでに以下のLaTeX草稿を書きました:
"""
{draft}
"""
まだ追加する必要がある最も重要な引用を特定し、その論文を見つけるためのクエリを提供してください。
以下の形式で回答してください:
THOUGHT:
<THOUGHT>
RESPONSE:
```json
<JSON>
<THOUGHT>では、まず論文について簡単に考察し、どこに引用を追加すべきかを特定してください。さらに引用が必要な場合は、思考に「これ以上の引用は不要」を追加してください。このラウンドで引用を追加する場合は、「これ以上の引用は不要」を追加しないでください。
<JSON>では、以下のフィールドを持つJSON形式で回答してください:
"Description": 必要な編集の正確な説明。提案されたテキストと、それを挿入すべき場所を含めてください。
"Query": 論文を見つけるための検索クエリ(例:attention is all you need)。
説明が、追加の文脈なしに変更を加えるのに十分であることを確認してください。他の誰かが変更を加えます。探している論文の正確な名前や著者を思い出せる場合、クエリが最も効果的に機能します。このJSONは自動的に解析されるため、形式が正確であることを確認してください。

citation_second_prompt
このプロンプトは、検索結果を提示し、AIに最も適切な引用を選択させ、その選択理由を説明させるものです。

検索により以下の記事が見つかりました:
{papers}
以下の形式で回答してください:
THOUGHT:<THOUGHT>
RESPONSE:
<JSON>
<THOUGHT>では、まず検索結果について簡単に考察し、どの引用があなたの論文に最も適しているか、どこに追加されるべきかを特定してください。適切なものがない場合は、思考に「追加しない」を加えてください。
<JSON>では、以下のフィールドを持つJSON形式で回答してください:
"Selected": 引用する選択された論文のインデックスのリスト。例:「"[0, 1]"」。論文が選択されない場合は「"[]"」。これは文字列でなければなりません。
"Description": 必要に応じて、前回の編集の説明を更新してください。引用が`references.bib`ファイル内の名前と正確に一致することを確認してください!!!
草稿の先頭にある`references.bib`ファイルにすでに存在する論文や、同じ引用が異なる名前で存在する場合は選択しないでください。このJSONは自動的に解析されるため、形式が正確であることを確認してください。

全体として、このシステムは論文の引用を効果的に追加するためのステップバイステップのプロセスを提供しています。AIは論文を分析し、適切な引用を見つけ、それらを論文に統合する役割を果たします。

7. 引用追加後の修正
このコードは、論文のドラフトに新しい引用を追加するためのフォーマットとプロンプトを定義しています。

# ドラフトに引用を追加する
aider_format = '''以下の引用が、ファイルの先頭にある`references.bib`ファイル定義の末尾に追加されました:
"""
{bibtex}
"""
あなた自身でこれらを追加する必要はありません。
絶対に再度追加しないでください!!!
これらの新しい引用を組み込んで、ドラフトに提案された変更を加えてください:
{description}
これらの引用を他の場所でも使用すべきかどうかは、あなたの判断で決めてください。
引用が`references.bib`の名前と正確に一致していることを確認してください。必要であれば、bibtexの正しい名前に変更してください。
引用がテキストにうまく統合されていることを確認してください。'''
aider_prompt = (
aider_format.format(bibtex=bibtex_string, description=desc)
+ """\n 論文を参照する際は必ず\citeまたは\citetを使用し、著者名を手動で入力しないでください。"""
)

これらのプロンプトによって、AI Scientist は論文を段階的に作成し、完成度を高めていくことができます。

論文の査読

論文の査読:の部分で使われているプロンプトは以下の3つです。

  1. `reviewer_system_prompt_base`: すべてのレビューに共通する基本的な指示

reviewer_system_prompt_base = (
"あなたは、権威あるML(機械学習)の会議に投稿された論文を査読しているAI研究者です。"
"あなたの判断には批判的かつ慎重であるべきです。"
)

2.`reviewer_system_prompt_neg` / `reviewer_system_prompt_pos`:
このコードは、先ほどのreviewer_system_prompt_baseに基づいて、2つの異なる査読方針を定義しています。

reviewer_system_prompt_neg:
これは否定的(ネガティブ)な査読方針を定義しています。
基本のプロンプトに加えて、論文が悪いか査読者が確信を持てない場合は、低い評価を与え、論文を拒否するよう指示しています。
この方針は、より厳しい査読プロセスをシミュレートし、品質に疑問がある論文を排除することを目的としています。

reviewer_system_prompt_pos:
これは肯定的(ポジティブ)な査読方針を定義しています。
基本のプロンプトに加えて、論文が良いか査読者が確信を持てない場合は、高い評価を与え、論文を採択するよう指示しています。
この方針は、より寛容な査読プロセスをシミュレートし、潜在的に価値のある論文を受け入れることを目的としています。

これらの異なる方針を使用することで、査読プロセスにおける異なるバイアスや判断基準をシミュレートし、それらが論文の評価にどのような影響を与えるかを検討することができます。

reviewer_system_prompt_neg = (
reviewer_system_prompt_base
+ "論文が悪いか、あなたが確信を持てない場合は、低い評価を与え、拒否してください。"
)

reviewer_system_prompt_pos = (
reviewer_system_prompt_base
+ "論文が良いか、あなたが確信を持てない場合は、高い評価を与え、採択してください。"
)

3.`template_instructions`:
これらのプロンプトは `perform_review` 関数内で使用され、生成された論文をAIが査読する際に具体的な指示を与えます。

具体的な動作:

  1. `perform_review` 関数は、まず `reviewer_system_prompt_neg` または `reviewer_system_prompt_pos` を用いて、AIにレビューの基本的な姿勢を指示します。

  2. 次に、`neurips_form` と呼ばれるNeurIPS形式のレビューテンプレートと `template_instructions` を組み合わせて、具体的なレビュー内容と評価項目を指示します。

  3. AIはこれらのプロンプトに基づいて論文を評価し、JSON形式でレビュー結果を出力します。

以下の形式で回答してください:
THOUGHT:
<THOUGHT>
REVIEW JSON:
```json
<JSON>
<THOUGHT>では、まず評価に関するあなたの直感と推論を簡潔に議論してください。高レベルの議論、必要な選択、そしてレビューの望ましい結果を詳細に述べてください。ここで一般的なコメントをするのではなく、現在の論文に特化した内容にしてください。これをレビューのメモ取りフェーズとして扱ってください。

<JSON>では、以下のフィールドを順番に含むJSON形式でレビューを提供してください:
"Summary": 論文の内容とその貢献の要約。
"Strengths": 論文の強みのリスト。
"Weaknesses": 論文の弱みのリスト。
"Originality": 1から4の評価(低、中、高、非常に高い)。
"Quality": 1から4の評価(低、中、高、非常に高い)。
"Clarity": 1から4の評価(低、中、高、非常に高い)。
"Significance": 1から4の評価(低、中、高、非常に高い)。
"Questions": 論文著者に回答を求める明確化のための質問セット。
"Limitations": 研究の限界と潜在的な社会的悪影響のセット。
"Ethical Concerns": 倫理的懸念があるかどうかを示すブール値。
"Soundness": 1から4の評価(不十分、普通、良い、優秀)。
"Presentation": 1から4の評価(不十分、普通、良い、優秀)。
"Contribution": 1から4の評価(不十分、普通、良い、優秀)。
"Overall": 1から10の評価(非常に強い拒否から賞品質まで)。
"Confidence": 1から5の評価(低、中、高、非常に高い、絶対的)。
"Decision": 以下のいずれかの決定:採択、拒否。
"Decision"フィールドでは、弱い採択、境界線上の採択、境界線上の拒否、または強い拒否を使用しないでください。代わりに、採択または拒否のみを使用してください。このJSONは自動的に解析されるため、形式が正確であることを確認してください。

追加情報:

  • `perform_review` 関数は、Few-shot learning のために過去のレビュー例 (`get_review_fewshot_examples` 関数) をプロンプトに含めることもできます。

  • 複数のAIによるレビュー結果を統合するために、`get_meta_review` 関数が用意されています。

`get_meta_review` 関数
は、複数のAI Reviewerによるレビュー結果を統合し、メタレビューを作成する関数です。

  1. 複数のAI Reviewerがそれぞれ独立に論文を査読し、`perform_review` 関数によってJSON形式のレビュー結果を出力します。

  2. `get_meta_review` 関数は、これらのレビュー結果をまとめて入力として受け取ります。

  3. 各レビュー結果をフォーマットして結合し、`meta_reviewer_system_prompt` と `neurips_form` を用いて、メタレビューを作成する指示をAIに与えます。

  4. AIはこれらの指示に基づいて、個々のレビューを考慮し、全体的な評価と意見をまとめたメタレビューをJSON形式で出力します。

プロンプト:

  • `meta_reviewer_system_prompt`: メタレビュー作成の基本的な指示

あなたは機械学習の学会のエリアチェアです。
{reviewer_count}人の査読者によって査読された論文のメタレビューを担当しています。
あなたの仕事は、複数のレビューを同じフォーマットで1つのメタレビューにまとめることです。
決定には批判的かつ慎重であり、合意点を見出し、すべての査読者の意見を尊重してください。

主な役割:

  • 多様な意見の統合: 複数のAI Reviewerによる異なる視点や意見をまとめ、よりバランスの取れた包括的な評価を可能にします。

  • 合意形成: 個々のレビュー間の矛盾や相違点を調整し、可能な限り合意に基づいたメタレビューを作成します。

  • 最終判断の支援: メタレビューは、論文採択の最終判断を行う際に重要な参考資料となります。

利点:

  • より客観的で公平な評価が可能になる。

  • 個々のReviewerの偏りを軽減できる。

  • 最終的な判断の精度を高めることができる。

`get_meta_review` 関数は、AIによる論文査読プロセスにおいて、複数の評価を統合し、最終的な判断を支援する重要な役割を果たします。

まとめ


AI Scientistシステムは、研究プロセスを大きく変革する可能性を秘めています。アイデアの発案から論文執筆まで、AIが支援してくれることで、私たち研究者はより創造的な思考に時間を割くことができるかもしれません。

研究の本質的な部分や倫理的判断は依然として人間が担う必要がありますが試みとしてAIが自律してアイデアの発案から論文執筆まで行うというのは革新的と思います。

今後、AI技術はさらに進化し、研究プロセスにおける役割も変化していくと考えられます。私たち研究者は、こうした技術の発展に注目しつつ、それらを効果的に活用する方法を模索し続ける必要があります。AI Scientistシステムのプロンプトを活用した論文作成は、その第一歩となるかもしれません。

こちらではほとんど手動ですが現状では人間がAIに対してコントロールを握っている感じの方が良いと思います

論文を査読するpromptについても記事を書いています。

こちらChatGPTの基本から仕事への応用まで書かれたNote深津さんのChatGPT本。生成AIへの導入としてとてもわかりやすい本だと思います。


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