このリポジトリは、GPT4 と著者の一致を使用して、興味深いと思われる論文を見つける Arxiv 用の非常にシンプルな日次スキャナーを実装しています。これは github アクションを介して毎日実行され、この情報をボットを介して Slack に投稿したり、静的な github-pages Web サイトでレンダリングしたりすることができます。
日刊紙の簡単なデモは、 cs.CL
で実行されているここで見ることができます。
コストの見積もりとして、これをすべてのcs.CL
で実行すると、2024 年 2 月 7 日時点で 0.07 ドルかかります。
これは、スキャナを実行するために必要な最小限の手順です。何を実行するかを決めるために、全体を読むことを強くお勧めします。
config/paper_topics.template.txt
をconfig/paper_topics.txt
にコピーし、フォローしたい論文の種類を記入します。config/authors.template.txt
config/authors.txt
にコピーし、実際にフォローしたい著者をリストします。著者の後ろの数字は重要です。これらは semantic speech の著者 ID であり、semantic shaker で著者を検索し、URL の末尾にある数字を取得することで見つけることができます。config/config.ini
で希望の ArXiv カテゴリを設定します。OAI_KEY
) を「github シークレット」として設定します。この時点で、ボットは毎日実行され、静的な Web サイトが公開されるはずです。これをテストするには、github アクション ワークフローを手動で実行します。
オプションですが強くお勧めします:
S2_KEY
) を github シークレットとして取得して設定します。そうしないと、著者の検索ステップが非常に遅くなります。SLACK_KEY
に設定します。SLACK_CHANNEL_ID
として設定します。configs/config.ini
を見て、フィルター処理の方法を調整してください。毎日午後 1 時 (UTC) にボットが実行され、Slack に投稿され、Github ページ Web サイトが公開されます (詳細については、publish_md および cron_runs アクションを参照してください)。
手順は通常上記と同じですが、 requirements.txt
を介して環境をセットアップする必要があります。
github シークレットを介して資格情報を渡す代わりに、環境変数OAI_KEY
、 SLACK_KEY
、 SLACK_CHANNEL_ID
設定する必要があります。
すべてを実行するには、 main.py
を呼び出すだけです。
その他の注意事項:また、slack にプッシュしたくない場合もあります。その場合は、 config/config.ini
のdump_json
、 dump_md
、およびpush_to_slack
フィールドで目的の出力エンドポイント (json、markdown、slack) を設定します。
Semantic Scholar API がタイムアウトするか遅い場合は、S2 API キーを取得し、それを環境変数のS2_KEY
として設定する必要があります。 (github アクションの制限により、これはコードがローカルで実行される場合にのみ役に立ちます)
単独で実行する:この作業全体にはほとんどコンピューティングが必要ないため、AWS から最も安価な VM をレンタルし、このリポジトリをそこに配置し、 requirements.txt
をインストールして環境変数を適切に設定し、次の crontab を追加します。
0 13 * * * python ~/arxiv_scanner/main.py
この crontab は、UTC 午後 1 時、太平洋時間午後 6 時ごとにスクリプトを実行します。
paper_topics.txt
プロンプトの作成paper_topics.txt
ファイルは、GPT のプロンプトを生成するために使用されます。フォローしたいトピックのリストです。一連の例は次のようになります。
1. New methodological improvements to RLHF or instruction-following which are specific fine-tuning steps that are taken to make language models better at following user instructions across a range of tasks.
- Relevant: papers that discuss specific methods like RLHF, or instruction-tuning datasets, improving these methods, or analyzing them.
- Not relevant: papers about adaptation to some task. Simply following instructions or inputs are not sufficient.
2. Shows new powerful test set contamination or membership inference methods for language models. Test set contamination is the phenomenon where a language model observes a benchmark dataset during pretraining.
- Relevant: test statistics that can detect contamination of benchmarks in language models. statistics that can provide guarantees are more interesting. membership inference methods that are general enough to apply to language models are also relevant.
- Not relevant: any papers that do not consider language models, or that do not consider test set contamination.
3. Shows a significant advance in the performance of diffusion language models.
- Relevant: papers that study language models that are also diffusion models. Continuous diffusions are even more relevant, while discrete diffusions are less so.
- Not relevant: papers about image diffusions like DALL-E or Stable Diffusion, or papers that do not explicitly mention language models or applications to text.
これは標準的なプロンプトにすぎませんが、特に「拡散言語モデル」や「指示に従う」など、画像の拡散が関連しているかどうか、または何らかのタスクをより適切に実行することが重要かどうかについて LM が混乱する可能性がある場合には、非常に具体的であることが役立ちます。指導に対するフォローを改善するには十分です。
これに続いて、次のような一般的な関心分野についても説明することもできます。
In suggesting papers to your friend, remember that he enjoys papers on statistical machine learning, and generative modeling in natural language processing.
Your friend also likes learning about surprising empirical results in language models, as well as clever statistical tricks.
He does not want to read papers that are about primarily applications of methods to specific domains.
スクリプトは、RSS フィードを介して、特定の日の ArXiv 論文の候補セットを取得します。論文の二重発表を避けるため、RSS フィードは過去 1 日以内にのみ取得されます。書類の紛失を避けるために、これを毎日実行するとよいでしょう。 UPDATED
論文を除外し、新しい論文のみを発表します。
フィルタリングのロジックは非常にシンプルです。まず著者が一致するかどうかを確認します。
authors.txt
内の誰かと一致する場合、デフォルトのスコアauthor_match_score
を持つ候補セットに入れられます。次に、GPT で評価された関連性を確認します。これを 2 つのステップで行います。
config.ini
のhcutoff
超える h-index を持つ著者のいない論文をフィルターで除外します。これはコストを削減するためです。config.ini
のmodel
で指定された GPT モデルによって評価されます。 GPT3.5 はデバッグにのみ使用してください。この目的ではうまく機能しません。この手順では、 configs/
で定義されている次のプロンプト設定を使用します。あなたは、ArXiv からの毎日の投稿を読んで、友人に関連するかもしれないいくつかの論文を特定する、役に立つ論文読みアシスタントです。以下の論文が最大5件掲載されます。あなたの仕事は、次のような論文を見つけることです。
- 基準1
- 基準2
[論文]
各行に {ARXIVID、COMMENT、RELEVANCE、NOVELTY} を含む JSONL 形式で応答を論文ごとに 1 つずつ記述します。 ARXIVID は ArXiv ID である必要があります。コメントは、論文に非常によく一致する基準があるかどうかを特定する必要があります。一致する場合は、番号で言及する必要があります (一致しない基準について言及する必要はありません)。これらの一致は、「言語モデリング」や「進歩」などの一般的な用語に基づくものではなく、具体的に基準を参照する必要があります。 RELEVANCE は、1 ~ 10 の関連性スコアである必要があります。10 は、ほぼ同義語のキーワードが一致し、そのトピックに取り組んでいることで知られている著者を含む、正確で特定の基準に直接関連している必要があります。1 は、どの基準にも無関係であり、友人の一般的な関心分野、2 ~ 3 は一般的な関心分野に関連するが特定の基準には関連しない論文、5 は特定の基準に直接一致する論文です。 NOVELTY は 1 から 10 までのスコアである必要があります。10 は分野全体を変革する画期的な汎用発見、1 は問題の一側面を改善する研究、または非常に特定の分野への応用です。これを判断するには要旨を注意深く読み、著者の新規性の主張は信頼できないと想定してください。
config/papers_topics.txt
のトピックに対する) と新規性 (スケール 1 ~ 10) をスコアリングします。config.ini
の関連性と新規性のいずれかのカットオフを下回るスコアを持つ場合にフィルタリングされます。最後に、すべての論文はauthor_match_score
の最大値と、GPT で評価された関連性スコアと新規性スコアの合計によって並べ替えられます (関連性スコアと新規性スコアは、構成で設定したカットオフしきい値を超えている場合にのみ最終出力に表示されます)ファイル)。次に、論文がレンダリングされ、エンドポイント (テキスト ファイルまたは Slack) にプッシュされます。
このリポジトリでは ruff- ruff check .
そしてruff format .
pre-commit install
実行して、pre-commit フックをインストールしてください。
filter_papers.py
コードはスタンドアロン スクリプトとして実行することもできます。これにより、 in/debug_papers.json
にある論文のバッチが取得され、必要な設定とプロンプトが実行され、出力がout/filter_paper_test.debug.json
に返されます。ボットが間違いを犯したことがわかった場合は、 out/gpt_paper_batches.debug.json
で関連するバッチを見つけて、それを関連するdebug_papers
ファイルにコピーします。
これにより、フィルターのベンチマークを構築し、反対側で何が得られるかを確認できます。
このリポジトリとコードは、元々は橋本達則によって構築され、Apache 2.0 ライセンスに基づいてライセンスされています。 GPT フィルターのテストとベンチマークを行ってくれた Chenglei Si に感謝します。