RAGLAB: Uma Estrutura Unificada Modular e Orientada para Pesquisa para Geração Aumentada de Recuperação
RAGLAB é uma estrutura modular de código aberto orientada para pesquisa para algoritmos de geração aumentada de recuperação (RAG). Oferece reproduções de 6 algoritmos RAG existentes e um sistema de avaliação abrangente com 10 conjuntos de dados de referência, permitindo comparações justas entre algoritmos RAG e fácil expansão para o desenvolvimento eficiente de novos algoritmos, conjuntos de dados e métricas de avaliação.
2024.10.6: Nosso artigo foi aceito pela EMNLP 2024 System Demonstration.? Você pode encontrar nosso artigo no RAGLAB.
9.9.2024: RAGLAB abriu o código-fonte de todos os arquivos de log e arquivos de avaliação nos resultados da avaliação?
2024.8.20: RAGLAB tem 4 modelos de código aberto?: llama3-8B-baseline selfrag-llama3-8b llama3-70B-adaptor selfrag-llama3-70B-adaptor
2024.8.6: RAGLAB é lançado?.
Ecossistema RAG abrangente: oferece suporte a todo o pipeline RAG, desde a coleta de dados e treinamento até a avaliação automática.
Implementações Avançadas de Algoritmos: Reproduz 6 algoritmos RAG de última geração, com uma estrutura fácil de estender para o desenvolvimento de novos algoritmos.
Modo de interação e modo de avaliação: o modo de interação foi projetado especificamente para compreender algoritmos rapidamente. O Modo de Avaliação foi projetado especificamente para reproduzir resultados de artigos e pesquisas científicas.
Plataforma de comparação justa: fornece resultados de benchmark para 6 algoritmos em 5 tipos de tarefas e 10 conjuntos de dados.
Cliente Efficient Retriever: Oferece API local para acesso paralelo e cache, com latência média inferior a 1 segundo.
Suporte versátil ao gerador: compatível com modelos 70B+, VLLM e técnicas de quantização.
Laboratório de instruções flexível: modelos de instruções personalizáveis para vários cenários RAG.
Aplicações RAG interessantes
Pesquisa automática
ambiente de desenvolvimento: pytorch:2.0.1-py3.10-cuda11.8.0-devel-ubuntu22.04
instalar miniconda
git clone RAGLAB
https://github.com/fate-ubw/RAGLAB.git
criar ambiente a partir do arquivo yml
CD RAGLAB conda env create -f ambiente.yml
instale flash-attn, en_core_web_sm, punkt manualmente
pip instalar flash-attn==2.2 python -m download espacial en_core_web_sm ponto python -m nltk.downloader
CD RAGLAB modelo mkdir modelo cd mkdir output_models# modelo recuperadormkdir colbertv2.0 huggingface-cli baixar colbert-ir/colbertv2.0 --local-dir colbertv2.0/ --local-dir-use-symlinks Falso mkdir contriever-msmarco huggingface-cli baixar facebook/contriever-msmarco --local-dir contriever-msmarco/ --local-dir-use-symlinks False# gerador ajustado# 8B modelomkdir Llama3-8B-baseline huggingface-cli baixar RAGLAB/Llama3-8B-baseline --local-dir Llama3-8B-baseline/ --local-dir-use-symlinks Falso mkdir selfrag_llama3_8b-epoch_0_1 huggingface-cli baixar RAGLAB/selfrag_llama3-8B --local-dir selfrag_llama3_8b-epoch_0_1/ --local-dir-use-symlinks False# 70B modelmkdir Llama3-70B-baseline-adapter huggingface-cli baixar RAGLAB/Llama3-70B-baseline-adapter --local-dir Llama3-70B-baseline-adapter/ --local-dir-use-symlinks Falso mkdir selfrag_llama3_70B-adaptador huggingface-cli baixar RAGLAB/selfrag_llama3-70B-adapter --local-dir selfrag_llama3_70B-adapter/ --local-dir-use-symlinks Falso mkdir Meta-Llama-3-70B huggingface-cli baixar meta-llama/Meta-Llama-3-70B --local-dir Meta-Llama-3-70B/ --local-dir-use-symlinks False# modelo base para ajuste fino e LoRAmkdir Meta-Llama-3 -8B huggingface-cli baixar meta-llama/Meta-Llama-3-8B --local-dir Meta-Llama-3-8B/ --local-dir-use-symlinks False# ALCE Metric Modelsmkdir gpt2-large huggingface-cli baixar openai-community/gpt2-large --local-dir gpt2-large/ --local-dir-use-symlinks Falso mkdir roberta-esquadrão grande huggingface-cli baixar gaotianyu1350/roberta-large-squad --local-dir roberta-large-squad/ --local-dir-use-symlinks Falso mkdir t5_xxl_true_nli_mixture huggingface-cli download google/t5_xxl_true_nli_mixture --local-dir t5_xxl_true_nli_mixture/ --local-dir-use-symlinks False# modelo de factscore usamos gpt3.5 para avaliação, então não há necessidade de baixar modelos locais# modelos do selfrag repomkdir oficial selfrag_llama2_7b huggingface-cli download selfrag/selfrag_llama2_7b --local-dir selfrag_llama2_7b/ --local-dir-use-symlinks False# você pode baixar outro modelo como gerador de huggingface
Se você só precisa entender como funcionam os diferentes algoritmos, o modo de interação desenvolvido pela RAGLAB pode atender às suas necessidades.
Se quiser reproduzir os resultados dos artigos, você precisa baixar todos os dados necessários do Hugging Face, incluindo dados de treinamento, dados de conhecimento e dados de avaliação. Empacotamos todos os dados para você, então você só precisa baixá-los e eles estarão prontos para uso.
CD RAGLAB huggingface-cli baixar RAGLAB/data --local-dir data --repo-type conjunto de dados
O Modo Interação foi projetado especificamente para compreensão rápida de algoritmos. No modo de interação, você pode executar vários algoritmos muito rapidamente, entender o processo de raciocínio de diferentes algoritmos, sem precisar baixar nenhum dado adicional.
Todos os algoritmos integrados no raglab incluem dois modos: interact
e evaluation
. A fase de teste é demonstrada em modo interact
, apenas para demonstração e educação?.
Observação
Devido ao requisito de colbert para caminhos absolutos, você precisa modificar index_dbPath e text_dbPath no arquivo de configuração para usar caminhos absolutos.
Modifique index_dbPath
e text_dbPath
no arquivo de configuração: colbert_server-10samples.yaml
index_dbPath: /your_root_path/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2023-10samples text_dbPath: /your_root_path/RAGLAB/data/retrieval/colbertv2.0_passages/wiki2023-10samples/enwiki-20230401-10samples.tsv
execute o servidor colbert
CD RAGLAB sh execute/colbert_server/colbert_server-10samples.sh
Observação
Neste ponto, a incorporação de colbert solicitará que, devido a erros de caminho, a incorporação de colbert precise ser reprocessada. Digite yes
e o raglab irá ajudá-lo automaticamente a processar a incorporação e iniciar o servidor colbert.
Agora abra outro terminal e tente solicitar o servidor colbert
CD RAGLAB sh execute/colbert_server/ask_api.sh
Se um resultado for retornado, significa que o servidor Colbert foi iniciado com sucesso! ?
execute selfrag (formato curto e recuperação adaptativa) teste de modo de interação incorporação de 10 amostras
CD RAGLAB sh run/rag_inference/3-selfrag_reproduction-interact-short_form-adaptive_retrieval.sh
Parabéns!!! Agora você já sabe como rodar o raglab?
No raglab, cada algoritmo possui 10 consultas integradas no modo de interação que são amostradas de diferentes benchmarks
Observação
lembre-se de baixar o banco de dados e modelo de conhecimento do wiki2018 antes de executar os resultados do artigo
Devido ao requisito de Colbert para caminhos absolutos, você precisa modificar index_dbPath
e text_dbPath
no arquivo de configuração e processar o banco de dados de incorporação wiki2018
cd RAGLAB/config/colbert_server vim colbert_server.yaml index_dbPath: {seu_caminho_raiz}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018 text_dbPath: {seu_caminho_raiz}/RAGLAB/data/retrieval/colbertv2.0_passages/wiki2018/wiki2018.tsv
vim /data/retrieval/colbertv2.0_embedding/wiki2018/indexes/wiki2018/metadata.json# altera o caminho da raiz, outros parâmetros não precisam ser modificados"collection": "/{your_root_path}/RAGLAB/data/retrieval/colbertv2. 0_passages/wiki2018/wiki2018.tsv","experiment": "/{your_root_path}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018",
Modifique os caminhos absolutos vinculados ao arquivo de origem de incorporação do wiki2018
Modifique os caminhos no arquivo de configuração
Atenção: colbert_server precisa de pelo menos 60 GB de RAM
CD RAGLAB sh execute/colbert_server/colbert_server.sh
abra outro terminal e teste seu servidor ColBERT
CD RAGLAB sh execute/colbert_server/ask_api.sh
Servidor ColBERT iniciado com sucesso!!! ?
experimentos de inferência exigem a execução de centenas de scripts em paralelo, o agendador gpu automático precisa ser usado para alocar GPUs automaticamente para diferentes scripts bash em paralelo.
instalar simple_gpu_scheduler
pip instalar simple_gpu_scheduler
executar centenas de experimentos em uma linha?
CD RAGLAB simple_gpu_scheduler --gpus 0,1,2,3,4,5,6,7 < auto_gpu_scheduling_scripts/auto_run-llama3_8b-baseline-scripts.txt# Outros scripts podem ser executados usando o mesmo método
como escrever your_script.txt?
# auto_inference_selfreg-7b.txtsh run/rag_inference/selfrag_reproduction/selfrag_reproduction-evaluation-short_form-PubHealth-adaptive_retrieval-pregiven_passages.sh sh run/rag_inference/selfrag_reproduction/selfrag_reproduction-evaluation-short_form-PubHealth-always_retrieval-pregiven_passages.sh
aqui está um exemplo
RAGLAB inclui 3 métodos clássicos de avaliação: precisão, F1 e EM (Correspondência Exata). Esses 3 métodos são simples de calcular, portanto podem ser calculados dinamicamente durante o processo de inferência. No entanto, ALCE e Factscore, duas métricas avançadas, exigem a conclusão do processo de inferência antes da avaliação.
ALCE : RAGLAB integrou o repositório ALCE no RAGLAB. Você só precisa definir o caminho para os resultados da inferência no arquivo de configuração.
cd RAGLABcd run/ALCE/# Altere o caminho em cada arquivo sh para os arquivos gerados por inferência# Por exemplo:# python ./ALCE/eval.py --f './data/eval_results/ASQA/{your_input_file_path}.jsonl' # --mauve # --qasimple_gpu_scheduler --gpus 0,1,2,3,4,5,6,7 < auto_gpu_scheduling_scripts/auto_eval_ALCE.txt
Os resultados da avaliação estarão no mesmo diretório do arquivo de entrada, com o sufixo do nome do arquivo .score
Factscore : O ambiente Factscore requer a instalação do torch 1.13.1
, que entra em conflito com a versão flash-attn necessária nos módulos de treinamento e inferência do RAGLAB. Portanto, o RAGLAB atualmente não pode integrar o ambiente Factscore, então os usuários precisam instalar o ambiente Factscore separadamente para avaliação.
Depois de instalar o ambiente Factscore, modifique o caminho dos resultados da inferência no arquivo bash
cd RAGLAB/run/Factscore/# altere o caminho em cada arquivo sh para os arquivos gerados por inferência# Por exemplo:# python ./FActScore/factscore/factscorer.py # --input_path './data/eval_results/Factscore/{your_input_file_path }.jsonl' # --model_name "retrieval+ChatGPT"# --openai_key ./api_keys.txt # --data_dir ./data/retrieval/colbertv2.0_passages/wiki2023 # --verbosesimple_gpu_scheduler --gpus 0,1,2, 3,4,5,6,7 < auto_gpu_scheduling_scripts/auto_eval_Factscore.txt
Os resultados da avaliação estarão no mesmo diretório do arquivo de entrada, com o sufixo de nome de arquivo _factscore_output.json
Observação
Durante o processo de avaliação do Factscore, usamos GPT-3.5 como modelo de avaliação, portanto não há necessidade de baixar um modelo local. Se você precisar usar um modelo local para avaliar o Factscore, consulte Factscore
Se você deseja processar o banco de dados de conhecimento por conta própria, consulte as etapas a seguir. RAGLAB já carregou o banco de dados de conhecimento processado para Hugging Face
documento: process_wiki.md
Esta seção cobre o processo de treinamento de modelos no RAGLAB. Você pode baixar todos os modelos pré-treinados do HuggingFace? ou usar o tutorial abaixo para treinar do zero.
Todos os dados fornecem todos os dados necessários para o ajuste fino.
documento: train_docs.md
Se você achar este repositório útil, cite nosso trabalho.
@inproceedings{zhang-etal-2024-raglab, title = "{RAGLAB}: A Modular and Research-Oriented Unified Framework for Retrieval-Augmented Generation", author = "Zhang, Xuanwang and Song, Yunze and Wang, Yidong and Tang, Shuyun and others", booktitle = "Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing: System Demonstrations", month = dec, year = "2024", publisher = "Association for Computational Linguistics", }
RAGLAB é licenciado sob a licença MIT.