Este repositório implementa um scanner diário muito simples para Arxiv que usa GPT4 e correspondências de autores para encontrar artigos que você possa achar interessantes. Ele será executado diariamente por meio de ações do github e pode postar essas informações no Slack por meio de um bot ou apenas renderizá-las em um site estático de páginas do github.
Uma demonstração simples dos jornais diários pode ser vista aqui rodando em cs.CL
Como estimativa de custo, executar isso em todo o cs.CL
custava US$ 0,07 em 07/02/2024
Estas são as etapas mínimas necessárias para que o scanner funcione. É altamente recomendável ler tudo para decidir o que você deseja executar.
config/paper_topics.template.txt
para config/paper_topics.txt
e preencha com os tipos de artigos que deseja acompanharconfig/authors.template.txt
para config/authors.txt
e liste os autores que você realmente deseja seguir. Os números por trás do autor são importantes. Eles são IDs de autores acadêmicos semânticos que você pode encontrar pesquisando os autores em acadêmico semântico e pegando os números no final da URL.config/config.ini
.OAI_KEY
) como ``um segredo do githubNeste ponto, seu bot deve ser executado diariamente e publicar um site estático. Você pode testar isso executando o fluxo de trabalho de ação do github manualmente.
Opcional, mas altamente recomendado :
S2_KEY
) como um segredo do github. Caso contrário, a etapa de busca do autor será muito lentaSLACK_KEY
como um segredo do githubSLACK_CHANNEL_ID
em um segredo do github.configs/config.ini
para ajustar como as coisas são filtradas.Todos os dias às 13h UTC, o bot será executado e postado no Slack e publicará um site de páginas do GitHub (consulte as ações subscribe_md e cron_runs para obter detalhes).
As etapas geralmente são as mesmas acima, mas você deve configurar o ambiente por meio de requirements.txt
Em vez de passar credenciais por meio de segredos do github, você deve definir variáveis de ambiente OAI_KEY
, SLACK_KEY
, SLACK_CHANNEL_ID
.
Para executar tudo, basta chamar main.py
Outras notas: você também pode querer não fazer push para o slack; nesse caso, defina o endpoint de saída desejado (json, markdown, slack) nos campos dump_json
, dump_md
e push_to_slack
de config/config.ini
.
Se a API semântica do estudioso expirar ou estiver lenta, você deverá obter uma chave de API S2 e defini-la como S2_KEY
em suas variáveis de ambiente. (devido às limitações das ações do github, isso só ajudará se o código for executado localmente)
Fazendo-o funcionar sozinho: tudo isso quase não requer computação, então você pode alugar a VM mais barata da AWS, colocar este repositório nele, instalar o requirements.txt
, configurar adequadamente as variáveis de ambiente e adicionar o seguinte crontab
0 13 * * * python ~/arxiv_scanner/main.py
Este crontab executará o script a cada 13h UTC, 18h do Pacífico.
paper_topics.txt
O arquivo paper_topics.txt
é usado para gerar o prompt para GPT. É uma lista de tópicos que você deseja seguir. Um conjunto de exemplos pode ser algo como
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.
Este é apenas um prompt padrão, mas ser muito específico pode ajudar, especialmente para coisas como 'modelos de linguagem de difusão' ou 'seguimento de instruções', onde o LM pode ficar confuso sobre se as difusões de imagens são relevantes ou se fazer melhor alguma tarefa é suficiente para melhorar o seguimento da instrução.
Você também pode querer seguir isso com algumas áreas de interesse geral, como
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.
O script captura um conjunto candidato de artigos ArXiv para um dia específico, por meio de feeds RSS. Para evitar o anúncio duplo de artigos, ele só obterá um feed RSS no último dia. Para evitar a perda de papéis, você deve fazer isso todos os dias. Ele filtra quaisquer artigos UPDATED
e anuncia apenas os novos.
A lógica de filtragem é bastante simples. Primeiro verificamos a correspondência do autor.
authors.txt
ele entrará no conjunto de candidatos com uma pontuação padrão de author_match_score
.Em seguida, verificamos a relevância avaliada pela GPT. Fazemos isso em duas etapas.
hcutoff
em config.ini
. Isto é para reduzir custos.model
em config.ini
. Você só deve usar GPT3.5 para depuração. Não funciona bem para esse propósito! Esta etapa usa a seguinte configuração de prompt definida em configs/
Você é um útil assistente de leitura de artigos, cujo trabalho é ler postagens diárias do ArXiv e identificar alguns artigos que podem ser relevantes para seu amigo. Haverá até 5 artigos abaixo. Seu trabalho é encontrar documentos que:
- Critério 1
- Critério 2
[PAPERS]
Escreva a resposta no formato JSONL com {ARXIVID, COMMENT, RELEVANCE, NOVELTY} em cada linha, uma para cada artigo. O ARXIVID deve ser o ID do ArXiv. O COMENTÁRIO deve identificar se existe um critério que corresponda muito bem ao artigo. Em caso afirmativo, deverá mencioná-lo por número (não há necessidade de mencionar os critérios de não correspondência). Estas correspondências não devem basear-se em termos gerais como “modelagem de linguagem” ou “avanços” e devem referir-se especificamente a um critério. A RELEVÂNCIA deve ser uma pontuação de relevância de 1 a 10, onde 10 deve estar diretamente relacionado ao critério exato e específico com correspondências de palavras-chave quase sinônimas e autores conhecidos por trabalhar no tópico, 1 é irrelevante para qualquer critério e não relacionado a a área de interesse geral do seu amigo, 2-3 são artigos relevantes para a área de interesse geral, mas não critérios específicos, e 5 é uma correspondência direta com um critério específico. A NOVIDADE deve ser uma pontuação de 1 a 10, onde 10 é uma descoberta inovadora e de uso geral que transformaria todo o campo e 1 é um trabalho que melhora um aspecto de um problema ou é uma aplicação a um campo muito específico. Leia o resumo com atenção para determinar isso e presuma que não se pode confiar nos autores em suas afirmações de novidade.
config/papers_topics.txt
) e novidade (escala de 1 a 10)config.ini
Por fim, todos os artigos são classificados pelo máximo de seu author_match_score
e pela soma das pontuações de relevância e novidade avaliadas pelo GPT (as pontuações de relevância e novidade só aparecerão na saída final se estiverem acima dos limites de corte definidos na configuração arquivo). Em seguida, os papéis são renderizados e colocados em seus endpoints (arquivos de texto ou Slack).
Este repositório usa ruff check .
e ruff format .
Instale o gancho de pré-commit executando pre-commit install
O código filter_papers.py
também pode ser executado como um script independente. Isso levará um lote de documentos in in/debug_papers.json
, executará qualquer configuração e prompts que você tiver e retornará uma saída para out/filter_paper_test.debug.json
. Se você descobrir que o bot comete erros, você pode encontrar o lote associado em out/gpt_paper_batches.debug.json
e copiá-lo para o arquivo debug_papers
relevante.
Isso permite criar uma referência para o filtro e ver o que sai do outro lado.
Este repositório e código foram originalmente construídos por Tatsunori Hashimoto e estão licenciados sob a licença Apache 2.0. Agradecimentos a Chenglei Si por testar e comparar o filtro GPT.