Ha surgido una gran grieta entre las LLM generales y las tiendas vectoriales que les proporcionan información contextual. La unificación de estos sistemas es un paso importante en la base de sistemas de IA en dominios eficientes y objetivos, donde se utilizan no solo para su generalidad, sino por su especificidad y singularidad. Con este fin, estamos entusiasmados de abierta el código de herramientas del Modelo de lenguaje Adaptado del Dominio ARCEE (DALM) para que los desarrolladores se construyan en la parte superior de nuestros LLM del dominio de código abierto ARCEE (DPT). Creemos que nuestros esfuerzos ayudarán a medida que comencemos la próxima fase del modelado de idiomas, donde las organizaciones adaptan profundamente la IA para operar de acuerdo con su propiedad intelectual única y su cosmovisión.
Ejemplo de consulta Dalms creados por el equipo Arcee.
| Patente | Cubo de dálmido | Dálmido-sec | Dálmido |
|---|---|---|---|
Este repositorio contiene principalmente código para ajustar una arquitectura de generación aumentada de recuperación totalmente diferencial (RAG-end2END).
Por primera vez en la literatura, modificamos el modelo inicial RAG-end2END (TACL Paper, Huggingface Implementation) para trabajar con modelos de idiomas solo de decodificadores como Llama, Falcon o GPT. También incorporamos el concepto negativo en el lote junto con la marginación del trapo para que todo el proceso sea eficiente .
Dentro de la carpeta de entrenamiento, encontrará dos códigos para entrenar el rag-end2end y el retriever con el aprendizaje contrastante.
Todas las evaluaciones relacionadas con el Retriever y el generador se encuentran en la carpeta EVAL.
Además, tenemos códigos de procesamiento de datos y código de generación de datos sintético dentro de la carpeta de conjuntos de datos.
Para realizar capacitación y evaluación tanto para el modelo Retriever como para el nuevo modelo RAG-E2E, adhiera a los siguientes pasos.
Las reqs del sistema dependen del modelo Retriever, el modelo de generador y el tamaño de lotes. Pero para referencia (RAG E2E), utilizamos lo siguiente para nuestros experimentos (resultados de evaluación a continuación):
BAAI/bge-large-enmeta-llama/Llama-2-7b-hfEsto tomó 7 horas en una sola GPU A100 (80 GB).
Puede instalar este repositorio directamente a través de pip install indomain
Alternativamente, para el desarrollo o la investigación, puede clonar e instalar el repositorio localmente:
git clone https://github.com/arcee-ai/DALM.git && cd DALM
pip install --upgrade -e .Esto instalará el repositorio DALM y todas las dependencias necesarias.
Asegúrese de que las cosas se instalen correctamente ejecutando dalm version . En una Mac no inteligente, es posible que deba rebajar la biblioteca transformers : pip install transformers==4.30 .
Puede ejecutar dalm qa-gen <path-to-dataset> para preprocesar su conjunto de datos para su entrenamiento. Ver dalm qa-gen --help para obtener más opciones
Si no tiene un conjunto de datos, puede comenzar con el nuestro
# Note - our dataset already has queries and answers, so you don't actually need to run this.
# replace `toy_dataset_train.csv` with your dataset of titles and passages
dalm qa-gen dalm/datasets/toy_data_train.csvPassage , Query (y Answer si se ejecuta E2E). Puede utilizar el script Question_answer_generation.py para generar este CSV.BAAI/bge-large-en como el Retriever predeterminado y empleamos meta-llama/Llama-2-7b-hf como el generador predeterminado. El código está diseñado para ser compatible con cualquier modelo de incrustación o modelo autorregresivo disponible en el repositorio del modelo de cara de abrazo en https://huggingface.co/models. Puede aprovechar nuestros scripts directamente si lo desea, o puede usar la CLI dalm . Los argumentos para ambos son idénticos
Train BAAI/bge-large-en Retriever con aprendizaje contrastante.
python dalm/training/retriever_only/train_retriever_only.py
--dataset_path " ./dalm/datasets/toy_data_train.csv "
--retriever_name_or_path " BAAI/bge-large-en "
--output_dir " retriever_only_checkpoints "
--use_peft
--with_tracking
--report_to all
--per_device_train_batch_size 150o
dalm train-retriever-only " BAAI/bge-large-en " " ./dalm/datasets/toy_data_train.csv "
--output-dir " retriever_only_checkpoints "
--use-peft
--with-tracking
--report-to all
--per-device-train-batch-size 150 Para todos los argumentos y opciones disponibles, consulte dalm train-retriever-only --help
Train Llama-2-7b Generator conjuntamente con el modelo Retriever BAAI/bge-large-en .
python dalm/training/rag_e2e/train_rage2e.py
--dataset_path " ./dalm/datasets/toy_data_train.csv "
--retriever_name_or_path " BAAI/bge-large-en "
--generator_name_or_path " meta-llama/Llama-2-7b-hf "
--output_dir " rag_e2e_checkpoints "
--with_tracking
--report_to all
--per_device_train_batch_size 20o
dalm train-rag-e2e
" ./dalm/datasets/toy_data_train.csv "
" BAAI/bge-large-en "
" meta-llama/Llama-2-7b-hf "
--output-dir " rag_e2e_checkpoints "
--with-tracking
--report-to all
--per-device-train-batch-size 20 Para todos los argumentos y opciones disponibles, consulte dalm train-rag-e2e --help
El Retriever en general está capacitado para ser bueno para encontrar los pasajes más relevantes en un corpus dada una consulta.
Dado un conjunto de datos de prueba de verdad en tierra que es un CSV de 200,000 líneas que contiene resúmenes de patentes y, lo que es más importante, este conjunto de datos de evaluación no estaba presente en el conjunto de datos de capacitación, se siguieron los pasos enumerados a continuación:
recall y hit rate . | Tipo de retriever | Recordar | Tasa de éxito |
|---|---|---|
| Sencillo | 0.45984 | 0.45984 |
| Retriever con aprendizaje contrastante | 0.46037 | 0.46038 |
| Retriever End2end | 0.73634 | 0.73634 |
Para ejecutar solo la evaluación (asegúrese de tener los puntos de control en la raíz del proyecto)
python dalm/eval/eval_retriever_only.py
--dataset_path qa_pairs_test.csv
--retriever_name_or_path " BAAI/bge-large-en "
--passage_column_name Abstract
--query_column_name Question
--retriever_peft_model_path retriever_only_checkpointso
dalm eval-retriever qa_pairs_test.csv
--retriever-name-or-path " BAAI/bge-large-en "
--passage-column-name Abstract
--query-column-name Question
--retriever-peft-model-path retriever_only_checkpoints Ver dalm eval-retriever --help para todos los argumentos disponibles
Para el E2E Eval
python dalm/eval/eval_rag.py
--dataset_path qa_pairs_test_2.csv
--retriever_name_or_path " BAAI/bge-large-en "
--generator_name_or_path " meta-llama/Llama-2-7b-hf "
--passage_column_name Abstract
--query_column_name Question
--answer_column_name Answer
--evaluate_generator
--query_batch_size 5
--retriever_peft_model_path rag_e2e_checkpoints/retriever
--generator_peft_model_path rag_e2e_checkpoints/generatoro
dalm eval-rag qa_pairs_test.csv
--retriever-name-or-path " BAAI/bge-large-en "
--generator-name-or-path " meta-llama/Llama-2-7b-hf "
--retriever-peft-model-path rag_e2e_checkpoints/retriever
--generator-peft-model-path rag_e2e_checkpoints/generator
--passage-column-name Abstract
--query-column-name Question
--answer-column-name Answer
--query-batch-size 5 Ver dalm eval-rag --help para todos los argumentos disponibles
Ver contribuyente