Un grand rift est apparu entre les LLM généraux et les magasins vectoriels qui leur fournissent des informations contextuelles. L'unification de ces systèmes est une étape importante dans la mise à la terre des systèmes d'IA dans des domaines efficaces et factuels, où ils sont utilisés non seulement pour leur généralité, mais pour leur spécificité et leur unicité. À cette fin, nous sommes ravis d'ouvrir la boîte à outils de modèle de langage adapté du domaine ARCEE (DALM) pour les développeurs à construire au-dessus de notre domaine open source ARCEE (DPT) LLMS. Nous pensons que nos efforts vous aideront à commencer la prochaine phase de modélisation du langage, où les organisations adapteront profondément l'IA à opérer en fonction de leur propriété intellectuelle unique et de leur vision du monde.
Exemple de requête Dalms créé par l'équipe Arcee.
| Dalm-patient | Dalm-pubmed | Dalm-Sec | Dalm-yours |
|---|---|---|---|
Ce référentiel contient principalement du code pour affiner une architecture de génération augmentée de récupération entièrement différentielle (Rag-End2end).
Pour la première fois dans la littérature, nous avons modifié le modèle initial Rag-End2end (papier TACL, implémentation de HuggingFace) pour travailler avec des modèles de langage uniquement en décodeur comme Llama, Falcon ou GPT. Nous avons également incorporé le concept négatif dans le lot parallèlement à la marginalisation du chiffon pour rendre l'ensemble du processus efficace .
À l'intérieur du dossier de formation, vous trouverez deux codes pour former le Rag-End2end et Retriever avec un apprentissage contrastif.
Toutes les évaluations liées au Retriever et au générateur sont situées dans le dossier EVAL.
De plus, nous avons des codes de traitement des données et un code de génération de données synthétiques dans le dossier des ensembles de données.
Pour effectuer une formation et une évaluation pour le modèle Retriever et le nouveau modèle RAG-E2E, veuillez adhérer aux étapes suivantes.
Les exigences du système dépendent du modèle Retriever, du modèle de générateur et de la taille du lot. Mais pour référence (E2E RAG), nous avons utilisé ce qui suit pour nos expériences (Résultats de l'évaluation ci-dessous):
BAAI/bge-large-enmeta-llama/Llama-2-7b-hfCela a pris 7 heures sur un seul GPU A100 (80 Go).
Vous pouvez installer ce référentiel directement via pip install indomain
Alternativement, pour le développement ou la recherche, vous pouvez cloner et installer le repo localement:
git clone https://github.com/arcee-ai/DALM.git && cd DALM
pip install --upgrade -e .Cela installera le repo Dalm et toutes les dépendances nécessaires.
Assurez-vous que les choses sont installées correctement en exécutant dalm version . Sur un Mac non INTEL, vous devrez peut-être rétrograder la bibliothèque transformers : pip install transformers==4.30 .
Vous pouvez exécuter dalm qa-gen <path-to-dataset> pour prétraiter votre ensemble de données pour la formation. Voir dalm qa-gen --help pour plus d'options
Si vous n'avez pas d'ensemble de données, vous pouvez commencer par le nôtre
# 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 (et Answer si l'exécution de E2E). Vous pouvez utiliser le script question_answer_generation.py pour générer ce CSV.BAAI/bge-large-en comme Retriever par défaut et utilisons meta-llama/Llama-2-7b-hf comme générateur par défaut. Le code est conçu pour être compatible avec tout modèle d'incorporation ou modèle autorégressif disponible dans le référentiel du modèle de visage étreint à https://huggingface.co/models. Vous pouvez tirer parti de nos scripts directement si vous le souhaitez, ou vous pouvez utiliser le dalm CLI. Les arguments pour les deux sont identiques
Train BAAI/bge-large-en Retriever avec apprentissage contrastif.
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 150ou
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 Pour tous les arguments et options disponibles, voir dalm train-retriever-only --help
Train Llama-2-7b Générateur conjointement avec le modèle 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 20ou
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 Pour tous les arguments et options disponibles, voir dalm train-rag-e2e --help
Le Retriever en général est formé pour être bon pour trouver les passages les plus pertinents dans un corpus étant donné une requête.
Compte tenu d'un ensemble de données de test de truth au sol qui est un CSV de 200 000 lignes contenant des résumés de brevets et, plus important encore, cet ensemble de données d'évaluation n'était pas présent dans l'ensemble de données de formation, les étapes répertoriées ci-dessous ont été suivies:
hit rate recall et de coup. | Type de retriever | Rappel | Taux de succès |
|---|---|---|
| Rattrapage ordinaire | 0.45984 | 0.45984 |
| Retriever avec apprentissage contrastif | 0,46037 | 0,46038 |
| Retriever end2end | 0,73634 | 0,73634 |
Pour exécuter Retriever uniquement EVAL (assurez-vous d'avoir les points de contrôle dans la racine du projet)
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_checkpointsou
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 Voir dalm eval-retriever --help pour tous les arguments disponibles
Pour l'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/generatorou
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 Voir dalm eval-rag --help pour tous les arguments disponibles
Voir contribution