RAGLAB: un marco unificado modular y orientado a la investigación para la generación de recuperación aumentada
RAGLAB es un marco modular de código abierto orientado a la investigación para algoritmos de recuperación-generación aumentada (RAG). Ofrece reproducciones de 6 algoritmos RAG existentes y un sistema de evaluación integral con 10 conjuntos de datos de referencia, lo que permite comparaciones justas entre los algoritmos RAG y una fácil expansión para el desarrollo eficiente de nuevos algoritmos, conjuntos de datos y métricas de evaluación.
2024.10.6: Nuestro artículo ha sido aceptado por la demostración del sistema EMNLP 2024. Puedes encontrar nuestro artículo en RAGLAB.
2024.9.9: ¿RAGLAB ha abierto todos los archivos de registro y archivos de evaluación en los resultados de la evaluación?
2024.8.20: ¿RAGLAB tiene 4 modelos de código abierto?: llama3-8B-baseline selfrag-llama3-8b llama3-70B-adaptor selfrag-llama3-70B-adaptor
2024.8.6: ¿Se lanza RAGLAB?.
Ecosistema RAG integral: respalda todo el proceso de RAG, desde la recopilación de datos y la capacitación hasta la autoevaluación.
Implementaciones de algoritmos avanzados: reproduce 6 algoritmos RAG de última generación, con un marco fácil de ampliar para desarrollar nuevos algoritmos.
Modo Interact y modo de evaluación: el modo Interact está diseñado específicamente para comprender rápidamente los algoritmos. El modo de evaluación está diseñado específicamente para reproducir resultados en papel e investigaciones científicas.
Plataforma de comparación justa: proporciona resultados comparativos para 6 algoritmos en 5 tipos de tareas y 10 conjuntos de datos.
Cliente Retriever eficiente: ofrece API local para acceso paralelo y almacenamiento en caché, con una latencia promedio inferior a 1 segundo.
Soporte de generador versátil: Compatible con modelos 70B+, VLLM y técnicas de cuantificación.
Laboratorio de instrucción flexible: plantillas de instrucción personalizables para varios escenarios RAG.
Aplicaciones RAG interesantes
Autoencuesta
entorno de desarrollo:pytorch:2.0.1-py3.10-cuda11.8.0-devel-ubuntu22.04
instalar miniconda
git clon RAGLAB
https://github.com/fate-ubw/RAGLAB.git
crear entorno a partir del archivo yml
cd RAGLAB conda env crear -f entorno.yml
instale flash-attn, en_core_web_sm, punkt manualmente
instalación de pip flash-attn==2.2 python -m descarga espacial en_core_web_sm python -m nltk.punto de descarga
cd RAGLAB modelo mkdir modelo cd mkdir salida_modelos # modelo de recuperación mkdir colbertv2.0 huggingface-cli descargar colbert-ir/colbertv2.0 --local-dir colbertv2.0/ --local-dir-use-symlinks Falso mkdir contriever-msmarco huggingface-cli descargar facebook/contriever-msmarco --local-dir contriever-msmarco/ --local-dir-use-symlinks Falso# generador optimizado# 8B modelmkdir Llama3-8B-baseline huggingface-cli descargar RAGLAB/Llama3-8B-baseline --local-dir Llama3-8B-baseline/ --local-dir-use-symlinks Falso mkdir selfrag_llama3_8b-epoch_0_1 huggingface-cli descargar 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 descargar RAGLAB/Llama3-70B-baseline-adapter --local-dir Llama3-70B-baseline-adapter/ --local-dir-use-symlinks Falso mkdir selfrag_llama3_70B-adaptador huggingface-cli descargar RAGLAB/selfrag_llama3-70B-adapter --local-dir selfrag_llama3_70B-adapter/ --local-dir-use-symlinks Falso mkdir Meta-Llama-3-70B huggingface-cli descargar meta-llama/Meta-Llama-3-70B --local-dir Meta-Llama-3-70B/ --local-dir-use-symlinks False# modelo base para ajuste fino y LoRAmkdir Meta-Llama-3 -8B huggingface-cli descargar meta-llama/Meta-Llama-3-8B --local-dir Meta-Llama-3-8B/ --local-dir-use-symlinks False# ALCE Metric Modelsmkdir gpt2-large huggingface-cli descargar openai-community/gpt2-large --local-dir gpt2-large/ --local-dir-use-symlinks Falso mkdir roberta-escuadrón-grande huggingface-cli descargar gaotianyu1350/roberta-large-squad --local-dir roberta-large-squad/ --local-dir-use-symlinks Falso mkdir t5_xxl_true_nli_mixture huggingface-cli descargar google/t5_xxl_true_nli_mixture --local-dir t5_xxl_true_nli_mixture/ --local-dir-use-symlinks False# modelo de puntuación de hechos utilizamos gpt3.5 para la evaluación, por lo que no es necesario descargar modelos locales# modelos del repomkdir oficial de selfrag selfrag_llama2_7b huggingface-cli descarga selfrag/selfrag_llama2_7b --local-dir selfrag_llama2_7b/ --local-dir-use-symlinks False# puedes descargar otro modelo como generador desde huggingface
Si sólo necesita comprender cómo funcionan los diferentes algoritmos, el modo de interacción desarrollado por RAGLAB puede satisfacer sus necesidades.
Si desea reproducir los resultados de los artículos, debe descargar todos los datos requeridos de Hugging Face, incluidos los datos de capacitación, los datos de conocimiento y los datos de evaluación. Hemos empaquetado todos los datos para usted, por lo que solo necesita descargarlos y estará listo para usar.
cd RAGLAB huggingface-cli descargar RAGLAB/data --local-dir data --repo-type dataset
El modo Interact está diseñado específicamente para comprender rápidamente los algoritmos. En el modo de interacción, puede ejecutar varios algoritmos muy rápidamente y comprender el proceso de razonamiento de diferentes algoritmos sin necesidad de descargar ningún dato adicional.
Todos los algoritmos integrados en raglab incluyen dos modos: interact
y evaluation
. La etapa de prueba se demuestra en modo interact
, ¿solo para demostración y educación?
Nota
Debido al requisito de Colbert de rutas absolutas, debe modificar index_dbPath y text_dbPath en el archivo de configuración para usar rutas absolutas.
Modifique index_dbPath
y text_dbPath
en el archivo de configuración: 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
ejecutar el servidor colbert
cd RAGLAB sh ejecutar/colbert_server/colbert_server-10samples.sh
Nota
En este punto, la incrustación de Colbert le indicará que, debido a errores de ruta, es necesario reprocesar la incrustación de Colbert. Ingrese yes
y luego raglab lo ayudará automáticamente a procesar la incrustación e iniciar el servidor Colbert.
Ahora abra otra terminal e intente solicitar el servidor Colbert.
cd RAGLAB sh ejecutar/colbert_server/ask_api.sh
Si se devuelve un resultado, significa que el servidor Colbert se ha iniciado correctamente. ?
ejecutar selfrag (forma corta y recuperación adaptativa) prueba de modo de interacción incrustación de 10 muestras
cd RAGLAB sh run/rag_inference/3-selfrag_reproduction-interact-short_form-adaptive_retrieval.sh
¡Felicitaciones! ¿Ahora ya sabes cómo ejecutar raglab?
En raglab, cada algoritmo tiene 10 consultas integradas en modo de interacción que se toman como muestra de diferentes puntos de referencia.
Nota
Recuerde descargar la base de datos y el modelo de conocimiento wiki2018 antes de ejecutar los resultados en papel.
Debido al requisito de Colbert de rutas absolutas, debe modificar index_dbPath
y text_dbPath
en el archivo de configuración y procesar la base de datos integrada de wiki2018.
CD RAGLAB/config/colbert_server vim colbert_server.yaml index_dbPath: {your_root_path}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018 text_dbPath: {your_root_path}/RAGLAB/data/retrieval/colbertv2.0_passages/wiki2018/wiki2018.tsv
vim /data/retrieval/colbertv2.0_embedding/wiki2018/indexes/wiki2018/metadata.json# cambia la ruta raíz, no es necesario modificar otros parámetros"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 las rutas absolutas vinculadas en el archivo fuente de incrustación de wiki2018
Modificar las rutas en el archivo de configuración.
Atención: colbert_server necesita al menos 60 GB de RAM
cd RAGLAB sh ejecutar/colbert_server/colbert_server.sh
abra otra terminal y pruebe su servidor ColBERT
cd RAGLAB sh ejecutar/colbert_server/ask_api.sh
¡El servidor ColBERT se inició correctamente! ?
Los experimentos de inferencia requieren ejecutar cientos de scripts en paralelo, el programador automático de gpu debe usarse para asignar automáticamente GPU para diferentes scripts bash en paralelo.
instalar simple_gpu_scheduler
instalación de pip simple_gpu_scheduler
¿Realizar cientos de experimentos en una línea?
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# Se pueden ejecutar otros scripts usando el mismo método
¿Cómo escribir your_script.txt?
# auto_inference_selfreg-7b.txtsh run/rag_inference/selfrag_reproduction/selfrag_reproduction-evaluación-short_form-PubHealth-adaptive_retrieval-pregiven_passages.sh sh run/rag_inference/selfrag_reproduction/selfrag_reproduction-evaluación-short_form-PubHealth-always_retrieval-pregiven_passages.sh
aquí hay un ejemplo
RAGLAB incluye 3 métodos de evaluación clásicos: precisión, F1 y EM (Exact Match). Estos 3 métodos son sencillos de calcular, por lo que se pueden calcular dinámicamente durante el proceso de inferencia. Sin embargo, ALCE y Factscore, dos métricas avanzadas, requieren la finalización del proceso de inferencia antes de la evaluación.
ALCE : RAGLAB ha integrado el repositorio ALCE en RAGLAB. Solo necesita establecer la ruta para los resultados de la inferencia en el archivo de configuración.
cd RAGLABcd run/ALCE/# Cambie la ruta en cada archivo sh para los archivos generados por inferencia# Por ejemplo:# 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
Los resultados de la evaluación estarán en el mismo directorio que el archivo de entrada, con el sufijo de nombre de archivo .score
Factscore : el entorno Factscore requiere la instalación de torch 1.13.1
, lo que entra en conflicto con la versión flash-attn necesaria en los módulos de inferencia y capacitación de RAGLAB. Por lo tanto, RAGLAB actualmente no puede integrar el entorno Factscore, por lo que los usuarios deben instalar el entorno Factscore por separado para la evaluación.
Después de instalar el entorno Factscore, modifique la ruta de los resultados de la inferencia en el archivo bash.
cd RAGLAB/run/Factscore/# cambiar la ruta en cada archivo sh para los archivos generados por inferencia# Por ejemplo:# 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
Los resultados de la evaluación estarán en el mismo directorio que el archivo de entrada, con el sufijo de nombre de archivo _factscore_output.json
Nota
Durante el proceso de evaluación de Factscore, utilizamos GPT-3.5 como modelo de evaluación, por lo que no es necesario descargar un modelo local. Si necesita utilizar un modelo local para evaluar Factscore, consulte Factscore
Si desea procesar la base de datos de conocimientos usted mismo, consulte los siguientes pasos. RAGLAB ya ha subido la base de datos de conocimientos procesados a Hugging Face
documento: proceso_wiki.md
Esta sección cubre el proceso de entrenamiento de modelos en RAGLAB. ¿Puedes descargar todos los modelos previamente entrenados desde HuggingFace? o usar el tutorial a continuación para entrenar desde cero.
Todos los datos proporcionan todos los datos necesarios para el ajuste.
documento: train_docs.md
Si encuentra útil este repositorio, cite nuestro trabajo.
@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 tiene la licencia MIT.