Leandro Carísio Fernandes
Projeto: Foi solicitada a construção de um sistema de recuperação de informação usando o algoritmo BM25, com resultados sendo avaliados na base de dados CISI.
- Relatório
- Implementação: Jupyter notebook / Colab
Leitura: Seção 1 do artigo "Pretrained Transformers for Text Ranking: BERT and Beyond"
Projeto: (1) Usar o BM25 implementado pelo pyserini para buscar queries no TREC-DL 2020; (2) Implementar um buscador booleano/bag-of-words; (3) Implementar um buscador com TF-IDF; (4) Avaliar implementações 1, 2, e 3 no TREC-DL 2020 e calcular o nDCG@10.
Entregas:
-
Implementação: Jupyter notebook / Colab
Leitura: Seção 3 (até 3.2.2) do artigo "Pretrained Transformers for Text Ranking: BERT and Beyond"
Projeto: Reranqueamento usando um modelo estilo-BERT com o treinamento no dataset do MS MARCO e avaliação no TREC-DL 2020
-
Implementação: Jupyter notebook / Colab / Apresentação
Leitura: GPT-3: Language Models are Few-Shot Learners
Projeto: (1) Escolher uma tarefa para resolver de maneira zero ou few-shot. (2) É importante ter uma função de avaliação da qualidade das respostas do modelo few-shot. (3) É possível criar um pequeno dataset de teste manualmente. (4) Usar a API do LLAMA ou do ChatGPT (gpt-3.5-turbo).
-
Implementação: Jupyter notebook / Apresentação
Leitura: A neural probabilistic language model ou GPT-2
Projeto: Treinar um modelo de linguagem em dados em português e avaliar o modelo usando perplexidade.
-
Implementação: Jupyter notebook / Colab / Apresentação
Projeto: Treinar um modelo seq2seq (a partir do T5-base) na tarefa de expansão de documentos.
-
Implementação:
- BM25 sem expansão: Jupyter notebook / Colab
- Fine-tuning e geração de queries: Jupyter notebook / Colab
- BM25 com expansão: Jupyter notebook / Colab
- Teste 1 - BM25 sem os documentos (apenas doc2query): Jupyter notebook / Colab
- Apresentação
Projeto: Finetuning de um buscador denso. Treino usando dataset tiny do MS-MARCO e avaliação no TREC-COVID. Comparar resultados com busca exaustiva e aproximada.
-
Implementação:
- Caderno completo com loss calculada usando produto interno: Jupyter notebook / Colab
- Teste com loss calculada usando produto interno de vetores normalizados (similaridade de coseno): Jupyter notebook / Colab
- Apresentação
Projeto: Implementar a fase de indexação e buscas de um modelo esparso.
-
Implementação: Colab / Jupyter notebook / Apresentação
Projeto: Gerar dataset para treino de modelos de buscas usando a técnica do InPars e avaliar um modelo reranqueador treinado neste dataset no TREC-COVID.
A ideia é usar um LLM como gerador de queries para documentos do TREC-COVID. A partir daí, gerar exemplos negativos usando o BM25 e treinar um reranqueador para o TREC-COVID.
-
Implementação
- Caderno 1 - geração de query a partir de documentos usando gpt-3.5-turbo: Jupyter notebook
- Caderno 2 - geração de documentos não relevantes para as queries geradas usando BM25: Colab / Jupyter notebook
- Caderno 3 - fine-tuning e testes na base TREC-COVID: Colab / Jupyter notebook
- Apresentação
Projeto:
O objetivo do exercício desta semana é construir alguns pipelines de busca e analisá-los em termos das seguintes métricas:
- Qualidade dos resultados: nDCG@10
- Latência (seg/query)
- USD por query assumindo utilização "perfeita": assim que terminou de processar uma query, já tem outra para ser processada
- USD/mês para deixar o sistema rodando para poucos usuários (ex: 100 queries/dia)
- Custo de indexação em USD
Iremos avaliar os pipelines no TREC-COVID.
A latência precisa ser menor que 2 segundos por query.
Considerar:
- 1,50 USD/hora por A100 ou 0,21 USD/hora por T4 ou 0,50 USD/hora por V100
- 0,03 USD/hora por CPU core
- 0,005 USD/hora por GB de CPU RAM
Dicas:
- Utilizar modelos de busca "SOTA" já treinados no MS MARCO como parte do pipeline, como o SPLADE distil (esparso), contriever (denso), Colbert-v2 (denso), miniLM (reranker), monoT5-3B (reranker), doc2query minus-minus (expansão de documentos + filtragem com reranqueador na etapa de indexação)
- Variar parametros como número de documentos retornados em cada estagio. Por exemplo, BM25 retorna 1000 documentos, um modelo denso ou esparso pode reranquea-los, e passar os top 50 para o miniLM/monoT5 fazer um ranqueamento final.
-
Implementação: Colab / Jupyter notebook / Apresentação
Projeto:
Implementar um pipeline multidoc QA: dado uma pergunta do usuário, buscamos em uma grande coleção as passagens mais relevantes e as enviamos para um sistema agregador, que irá gerar uma resposta final.
- Avaliar no dataset do IIRC
- Métrica principal: F1
- Usar o gpt-3.5-turbo como modelo agregador. Limitar dataset de teste para 50 exemplos para economizar.
Dicas:
- Se inspirar no pipeline do Visconde
-
Implementação: Colab / Jupyter notebook / Apresentação
Autores: Leandro Carísio Fernandes e Gustavo Bartz Guedes
-
Exemplo de texto gerado sobre o assunto "Text representation for ranking" (macro-assunto "Neural Information Retrieval"). A escolha dos assuntos foi inspirada neste survey.
-
Notebooks (importados do Colab)
-
[1] Pesquisa artigos e divide o texto em seções
- Entrada: Query inicial, filtros e estrutura desejada (número de seções e subseções)
- Saída: Arquivo pickle(survey_xxxx.pkl) contendo um array de seções. Cada uma tem um nome e uma lista de metadados de artigos possivelmente relacionados
-
[2] Download e extração de artigos
- Entrada: Arquivo pickle gerado na etapa anterior
- Saída: Arquivo pickle (paper_contents_xxx.pkl) com um mapa cuja chave é o id do artigo e o valor são os metadados do artigo (abstract e title são obrigatórios) e uma propriedade text contendo o texto do artigo. Esse arquivo pode ser enriquecido com um texto de melhor qualidade extraído pelo Grobid. Nesse caso é necessário adicionar uma propriedade text_grobid.
-
[3] Geração de texto das seções
- Entrada: Arquivos pickle usados nas etapas anteriores e uma string com a query inicial usada na etapa 1.
- Saída: Arquivo pickle survey_xxx.pkl preenchido com o texto da seção gerado.
-
Exemplos gerados:
-
Geração semi-automática: Texto (docx) das seções gerado para o survey usado como referência
- ENTRADA 1: sections-survey-ref.pkl
- ENTRADA 2: papers_contents-survey-ref_grobid.pkl
- SAÍDA: sections-survey-ref_generated_text_splade_gpt-3.5-turbo-0613.pkl
- AVALIAÇÃO COM BERTScore (Precision: 78.2%, Recall: 81.4%, F1: 79.8%): caderno
-
Geração automática: Texto gerado para um pipeline completo - 5 seções e 3 subseções por seção
- ENTRADA 1: sections-text neural information retrieval-2020-2023-gpt-3.5-turbo-0613.pkl
- ENTRADA 2: papers_contents-text neural information retrieval-2020-2023-gpt-3.5-turbo-0613.pkl
- SAÍDA: sections-text neural information retrieval-2020-2023-gpt-3.5-turbo-0613_generated_text_specter_gpt-3.5-turbo-0613.pkl
-
-