RAGLAB : un cadre unifié modulaire et axé sur la recherche pour la génération augmentée par récupération
RAGLAB est un framework open source modulaire orienté recherche pour les algorithmes de génération augmentée de récupération (RAG). Il propose des reproductions de 6 algorithmes RAG existants et un système d'évaluation complet avec 10 ensembles de données de référence, permettant des comparaisons équitables entre les algorithmes RAG et une expansion facile pour le développement efficace de nouveaux algorithmes, ensembles de données et mesures d'évaluation.
2024.10.6 : Notre article a été accepté par la démonstration du système EMNLP 2024. ? Vous pouvez trouver notre article dans RAGLAB.
2024.9.9 : RAGLAB a ouvert tous les fichiers journaux et fichiers d'évaluation dans les résultats d'évaluation ?
2024.8.20 : RAGLAB a 4 modèles open source ? : llama3-8B-baseline selfrag-llama3-8b llama3-70B-adaptor selfrag-llama3-70B-adaptor
2024.8.6 : RAGLAB est sorti ?.
Écosystème RAG complet : prend en charge l'ensemble du pipeline RAG, de la collecte de données et de la formation à l'auto-évaluation.
Implémentations d'algorithmes avancés : reproduit 6 algorithmes RAG de pointe, avec un cadre facile à étendre pour développer de nouveaux algorithmes.
Mode interaction et mode d'évaluation : le mode interaction est spécialement conçu pour comprendre rapidement les algorithmes. Le mode d'évaluation est spécialement conçu pour reproduire des résultats papier et des recherches scientifiques.
Plateforme de comparaison équitable : fournit des résultats de référence pour 6 algorithmes sur 5 types de tâches et 10 ensembles de données.
Client Retriever efficace : offre une API locale pour l'accès et la mise en cache parallèles, avec une latence moyenne inférieure à 1 seconde.
Prise en charge polyvalente du générateur : compatible avec les modèles 70B+, VLLM et les techniques de quantification.
Laboratoire d'instructions flexible : modèles d'instructions personnalisables pour divers scénarios RAG.
Applications RAG intéressantes
Enquête automatique
environnement de développement:pytorch:2.0.1-py3.10-cuda11.8.0-devel-ubuntu22.04
installer la miniconda
git cloneRAGLAB
https://github.com/fate-ubw/RAGLAB.git
créer un environnement à partir du fichier yml
CD RAGLAB conda env créer -f environnement.yml
installer flash-attn, en_core_web_sm, punkt manuellement
pip install flash-attn==2.2 python -m spacy télécharger en_core_web_sm python -m nltk.downloader point
CD RAGLAB modèle mkdirmodèle cd mkdir output_models# modèle de récupérationmkdir colbertv2.0 huggingface-cli télécharger colbert-ir/colbertv2.0 --local-dir colbertv2.0/ --local-dir-use-symlinks False mkdir contriever-msmarco huggingface-cli télécharger facebook/contriever-msmarco --local-dir contriever-msmarco/ --local-dir-use-symlinks False# générateur affiné# 8B modelmkdir Llama3-8B-baseline huggingface-cli télécharger RAGLAB/Llama3-8B-baseline --local-dir Llama3-8B-baseline/ --local-dir-use-symlinks False mkdir selfrag_llama3_8b-epoch_0_1 huggingface-cli télécharger 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 télécharger RAGLAB/Llama3-70B-baseline-adapter --local-dir Llama3-70B-baseline-adapter/ --local-dir-use-symlinks False mkdir selfrag_llama3_70B-adaptateur huggingface-cli télécharger RAGLAB/selfrag_llama3-70B-adapter --local-dir selfrag_llama3_70B-adapter/ --local-dir-use-symlinks False mkdir Méta-Llama-3-70B huggingface-cli télécharger meta-llama/Meta-Llama-3-70B --local-dir Meta-Llama-3-70B/ --local-dir-use-symlinks False# modèle de base pour le réglage fin et LoRAmkdir Meta-Llama-3 -8B huggingface-cli télécharger meta-llama/Meta-Llama-3-8B --local-dir Meta-Llama-3-8B/ --local-dir-use-symlinks False# ALCE Metric Modelsmkdir gpt2-large huggingface-cli télécharger openai-community/gpt2-large --local-dir gpt2-large/ --local-dir-use-symlinks False mkdir roberta-large-squad huggingface-cli télécharger gaotianyu1350/roberta-large-squad --local-dir roberta-large-squad/ --local-dir-use-symlinks False mkdir t5_xxl_true_nli_mixture huggingface-cli télécharger google/t5_xxl_true_nli_mixture --local-dir t5_xxl_true_nli_mixture/ --local-dir-use-symlinks False# modèle Factscore que nous utilisons gpt3.5 pour l'évaluation, donc pas besoin de télécharger des modèles locaux# modèles à partir du repomkdir officiel de selfrag selfrag_llama2_7b huggingface-cli télécharger selfrag/selfrag_llama2_7b --local-dir selfrag_llama2_7b/ --local-dir-use-symlinks False# vous pouvez télécharger un autre modèle en tant que générateur depuis huggingface
Si vous avez seulement besoin de comprendre le fonctionnement de différents algorithmes, le mode interaction développé par RAGLAB peut répondre à vos besoins.
Si vous souhaitez reproduire les résultats des articles, vous devez télécharger toutes les données requises depuis Hugging Face, y compris les données de formation, les données de connaissances et les données d'évaluation. Nous avons regroupé toutes les données pour vous, il vous suffit donc de les télécharger et elles sont prêtes à être utilisées.
CD RAGLAB huggingface-cli télécharger RAGLAB/data --local-dir data --repo-type ensemble de données
Le mode Interact est spécialement conçu pour comprendre rapidement les algorithmes. En mode interaction, vous pouvez exécuter différents algorithmes très rapidement, comprendre le processus de raisonnement de différents algorithmes, sans avoir besoin de télécharger de données supplémentaires.
Tous les algorithmes intégrés dans raglab incluent deux modes : interact
et evaluation
. L'étape de test démontre en mode interact
, juste à des fins de démonstration et d'éducation ?.
Note
En raison de l'exigence de Colbert concernant les chemins absolus, vous devez modifier index_dbPath et text_dbPath dans le fichier de configuration pour utiliser des chemins absolus.
Modifiez index_dbPath
et text_dbPath
dans le fichier de configuration : colbert_server-10samples.yaml
index_dbPath : /votre_chemin_racine/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
exécuter le serveur Colbert
CD RAGLAB sh run/colbert_server/colbert_server-10samples.sh
Note
À ce stade, l'intégration de Colbert indiquera qu'en raison d'erreurs de chemin, l'intégration de Colbert doit être retraitée. Veuillez entrer yes
, puis raglab vous aidera automatiquement à traiter l'intégration et à démarrer le serveur Colbert.
Maintenant, veuillez ouvrir un autre terminal et essayer de demander au serveur Colbert
CD RAGLAB sh run/colbert_server/ask_api.sh
Si un résultat est renvoyé, cela signifie que le serveur Colbert a démarré avec succès ! ?
exécuter selfrag (forme courte et récupération adaptative) tester le mode interaction intégration de 10 échantillons
CD RAGLAB sh run/rag_inference/3-selfrag_reproduction-interact-short_form-adaptive_retrieval.sh
Félicitations !!!Maintenant, vous savez déjà comment exécuter raglab ?
En raglab, chaque algorithme dispose de 10 requêtes intégrées en mode interaction qui sont échantillonnées à partir de différents benchmarks
Note
n'oubliez pas de télécharger la base de données et le modèle de connaissances wiki2018 avant d'exécuter les résultats papier
En raison de l'exigence de Colbert pour les chemins absolus, vous devez modifier index_dbPath
et text_dbPath
dans le fichier de configuration et traiter la base de données d'intégration wiki2018.
cd RAGLAB/config/colbert_server vim colbert_server.yaml index_dbPath : {votre_chemin_racine}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018 text_dbPath : {votre_chemin_racine}/RAGLAB/data/retrieval/colbertv2.0_passages/wiki2018/wiki2018.tsv
vim /data/retrieval/colbertv2.0_embedding/wiki2018/indexes/wiki2018/metadata.json# change le chemin racine, les autres paramètres n'ont pas besoin d'être modifiés"collection": "/{votre_chemin_racine}/RAGLAB/data/retrieval/colbertv2. 0_passages/wiki2018/wiki2018.tsv","expérience": "/{votre_chemin_racine}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018",
Modifier les chemins absolus liés dans le fichier source d'intégration wiki2018
Modifier les chemins dans le fichier de configuration
Attention : colbert_server a besoin d'au moins 60 Go de RAM
CD RAGLAB sh run/colbert_server/colbert_server.sh
ouvrez un autre terminal testez votre serveur ColBERT
CD RAGLAB sh run/colbert_server/ask_api.sh
Le serveur ColBERT a démarré avec succès !!! ?
les expériences d'inférence nécessitent l'exécution de centaines de scripts en parallèle, le planificateur automatique de GPU doit être utilisé pour allouer automatiquement des GPU à différents scripts bash en parallèle.
installer simple_gpu_scheduler
pip installer simple_gpu_scheduler
exécuter des centaines d'expériences sur une seule ligne ?
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# D'autres scripts peuvent être exécutés en utilisant la même méthode
comment écrire votre_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
voici un exemple
RAGLAB comprend 3 méthodes d'évaluation classiques : précision, F1 et EM (Exact Match). Ces 3 méthodes sont simples à calculer, elles peuvent donc être calculées dynamiquement pendant le processus d'inférence. Cependant, ALCE et Factscore, deux mesures avancées, nécessitent l'achèvement du processus d'inférence avant l'évaluation.
ALCE : RAGLAB a intégré le référentiel ALCE dans RAGLAB. Il vous suffit de définir le chemin des résultats d'inférence dans le fichier de configuration.
cd RAGLABcd run/ALCE/# Modifiez le chemin dans chaque fichier sh pour les fichiers générés par inférence# Par exemple :# 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
Les résultats de l'évaluation seront dans le même répertoire que le fichier d'entrée, avec le suffixe de nom de fichier .score
Factscore : L'environnement Factscore nécessite l'installation de torch 1.13.1
, qui entre en conflit avec la version flash-attn nécessaire dans les modules de formation et d'inférence de RAGLAB. Par conséquent, RAGLAB ne peut actuellement pas intégrer l'environnement Factscore, les utilisateurs doivent donc installer l'environnement Factscore séparément pour l'évaluation.
Après avoir installé l'environnement Factscore, veuillez modifier le chemin des résultats d'inférence dans le fichier bash
cd RAGLAB/run/Factscore/# modifiez le chemin dans chaque fichier sh pour les fichiers générés par inférence# Par exemple :# python ./FActScore/factscore/factscorer.py # --input_path './data/eval_results/Factscore/{your_input_file_path }.jsonl' # --model_name "récupération+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
Les résultats de l'évaluation seront dans le même répertoire que le fichier d'entrée, avec le suffixe de nom de fichier _factscore_output.json
Note
Au cours du processus d'évaluation Factscore, nous avons utilisé GPT-3.5 comme modèle d'évaluation, il n'est donc pas nécessaire de télécharger un modèle local. Si vous devez utiliser un modèle local pour évaluer Factscore, veuillez vous référer à Factscore.
Si vous souhaitez traiter vous-même la base de connaissances, veuillez vous référer aux étapes suivantes. RAGLAB a déjà téléchargé la base de données de connaissances traitées sur Hugging Face
document : process_wiki.md
Cette section couvre le processus de formation des modèles dans RAGLAB. Vous pouvez soit télécharger tous les modèles pré-entraînés depuis HuggingFace ?, soit utiliser le didacticiel ci-dessous pour vous entraîner à partir de zéro.
Toutes les données fournissent toutes les données nécessaires au réglage fin.
document : train_docs.md
Si vous trouvez ce référentiel utile, veuillez citer notre travail.
@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 est sous licence MIT.