Ce référentiel implémente un scanner quotidien très simple pour Arxiv qui utilise GPT4 et les correspondances d'auteurs pour trouver des articles qui pourraient vous intéresser. Il s'exécutera quotidiennement via les actions github et pourra publier ces informations sur Slack via un bot ou simplement les restituer dans un site Web de pages github statiques.
Une simple démo des quotidiens peut être vue ici fonctionnant sur cs.CL
À titre d'estimation des coûts, l'exécution de cette opération sur l'ensemble de cs.CL
coûte 0,07 $ le 07/02/2024.
Il s’agit des étapes minimales nécessaires pour faire fonctionner le scanner. Il est fortement recommandé de lire l'intégralité du document pour décider de ce que vous souhaitez exécuter.
config/paper_topics.template.txt
dans config/paper_topics.txt
et remplissez-le avec les types d'articles que vous souhaitez suivreconfig/authors.template.txt
dans config/authors.txt
et répertoriez les auteurs que vous souhaitez réellement suivre. Les chiffres derrière l’auteur sont importants. Il s'agit d'identifiants d'auteurs sémantiques que vous pouvez trouver en recherchant les auteurs sur sémantique et en prenant les numéros à la fin de l'URL.config/config.ini
.OAI_KEY
) comme ``un secret githubÀ ce stade, votre bot doit s’exécuter quotidiennement et publier un site Web statique. Vous pouvez tester cela en exécutant manuellement le workflow d'action github.
Facultatif mais fortement recommandé :
S2_KEY
) en tant que secret github. Sinon l'étape de recherche d'auteur sera très lenteSLACK_KEY
comme secret githubSLACK_CHANNEL_ID
dans un secret github.configs/config.ini
pour modifier la façon dont les choses sont filtrées.Chaque jour à 13 heures UTC, le bot s'exécutera et publiera sur Slack et publiera un site Web de pages Github (voir les actions submit_md et cron_runs pour plus de détails).
Les étapes sont généralement les mêmes que ci-dessus, mais vous devez configurer l'environnement via requirements.txt
Au lieu de transmettre les informations d'identification via les secrets github, vous devez définir les variables d'environnement OAI_KEY
, SLACK_KEY
, SLACK_CHANNEL_ID
.
Pour tout exécuter, appelez simplement main.py
Autres notes : vous souhaiterez peut-être également ne pas pousser vers slack, auquel cas définissez le point de terminaison de sortie souhaité (json, markdown, slack) dans les champs dump_json
, dump_md
et push_to_slack
de config/config.ini
.
Si l'API sémantique expire ou est lente, vous devez obtenir une clé API S2 et la définir comme S2_KEY
dans vos variables d'environnement. (en raison des limitations des actions github, cela ne sera utile que si le code est exécuté localement)
Le faire fonctionner tout seul : tout cela ne nécessite presque aucun calcul, vous pouvez donc louer la machine virtuelle la moins chère d'AWS, y placer ce dépôt, installer le requirements.txt
, configurer les variables d'environnement de manière appropriée et ajouter la crontab suivante.
0 13 * * * python ~/arxiv_scanner/main.py
Cette crontab exécutera le script toutes les 13h UTC, 18h Pacifique.
paper_topics.txt
Le fichier paper_topics.txt
est utilisé pour générer l'invite pour GPT. Il s'agit d'une liste de sujets que vous souhaitez suivre. Un ensemble d'exemples pourrait ressembler à quelque chose comme
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.
Il ne s'agit que d'une invite standard, mais être très spécifique peut aider, en particulier pour des choses comme les « modèles de langage de diffusion » ou le « suivi des instructions », où le LM peut ne pas savoir si les diffusions d'images sont pertinentes ou s'il est préférable d'effectuer certaines tâches. suffisant pour améliorer le suivi pédagogique.
Vous souhaiterez peut-être également suivre cela avec certains domaines d'intérêt général comme
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.
Le script récupère un ensemble candidat d'articles ArXiv pour un jour spécifique, via les flux RSS. Pour éviter les doubles annonces, il ne récupérera un flux RSS que le dernier jour. Pour éviter de manquer des papiers, vous voudriez l'exécuter tous les jours. Il filtre tous les articles UPDATED
et n'en annonce que les nouveaux.
La logique de filtrage est assez simple. Nous vérifions d’abord la correspondance de l’auteur.
authors.txt
il entre dans l'ensemble de candidats avec un score par défaut de author_match_score
.Nous vérifions ensuite la pertinence évaluée par GPT. Nous procédons en deux étapes.
hcutoff
dans config.ini
. Il s’agit de réduire les coûts.model
dans config.ini
. Vous ne devez utiliser GPT3.5 que pour le débogage. Cela ne fonctionne pas bien à cet effet ! Cette étape utilise la configuration d'invite suivante définie dans configs/
Vous êtes un assistant de lecture d'articles utile dont le travail consiste à lire les publications quotidiennes d'ArXiv et à identifier quelques articles qui pourraient être pertinents pour votre ami. Il y aura jusqu'à 5 articles ci-dessous. Votre travail consiste à trouver des articles qui :
- Critère 1
- Critère 2
[PAPIERS]
Écrivez la réponse au format JSONL avec {ARXIVID, COMMENT, RELEVANCE, NOVELTY} sur chaque ligne, un pour chaque article. L'ARXIVID doit être l'ID ArXiv. Le COMMENTAIRE doit identifier s'il existe un critère qui correspond de très près au document. Si oui, il devra le mentionner par un numéro (inutile de mentionner les critères de non-concordance). Ces correspondances ne doivent pas être basées sur des termes généraux tels que « modélisation du langage » ou « avancées » et doivent spécifiquement faire référence à un critère. La PERTINENCE doit être un score de pertinence compris entre 1 et 10, où 10 doit être directement lié au critère exact et spécifique avec des correspondances de mots clés proches des synonymes et des auteurs connus pour travailler sur le sujet, 1 n'est pertinent pour aucun critère et sans rapport avec le domaine d'intérêt général de votre ami, 2-3 correspondent aux articles qui sont pertinents pour le domaine d'intérêt général, mais pas à des critères spécifiques, et 5 correspondent directement à un critère spécifique. La NOUVEAUTÉ doit être une note de 1 à 10, où 10 est une découverte révolutionnaire à usage général qui transformerait l'ensemble du domaine et 1 est un travail qui améliore un aspect d'un problème ou est une application à un domaine très spécifique. Lisez attentivement le résumé pour déterminer cela et supposez qu'on ne peut pas faire confiance aux auteurs dans leurs affirmations de nouveauté.
config/papers_topics.txt
) et de leur nouveauté (échelle de 1 à 10)config.ini
Enfin, tous les articles sont triés en fonction du maximum de leur author_match_score
et de la somme des scores de pertinence et de nouveauté évalués par GPT (les scores de pertinence et de nouveauté n'apparaîtront dans le résultat final que s'ils sont supérieurs aux seuils de coupure que vous avez définis dans la configuration. déposer). Ensuite, les articles sont rendus et poussés vers leurs points de terminaison (fichiers texte ou Slack).
Ce dépôt utilise ruff check .
et ruff format .
Veuillez installer le hook de pré-commit en exécutant pre-commit install
Le code filter_papers.py
peut également être exécuté en tant que script autonome. Cela prendra un lot de documents dans in/debug_papers.json
, exécutera la configuration et les invites dont vous disposez et renverra une sortie à out/filter_paper_test.debug.json
. Si vous constatez que le bot fait des erreurs, vous pouvez trouver le lot associé dans out/gpt_paper_batches.debug.json
et le copier dans le fichier debug_papers
approprié.
Cela vous permet de créer une référence pour le filtre et de voir ce qui sort de l'autre côté.
Ce référentiel et ce code ont été initialement construits par Tatsunori Hashimoto et sont sous licence Apache 2.0. Merci à Chenglei Si pour avoir testé et comparé le filtre GPT.