Surgiu uma grande brecha entre a General LLMS e as lojas vetoriais que lhes fornecem informações contextuais. A unificação desses sistemas é um passo importante no fundamento dos sistemas de IA em domínios eficientes e factuais, onde são utilizados não apenas por sua generalidade, mas por sua especificidade e singularidade. Para esse fim, estamos entusiasmados em abrir o código de ferramentas do Modelo de Linguagem Adaptado do Domínio Arcee (Dalm) para que os desenvolvedores se desenvolvam no topo de nossos LLMs de Domínio de código aberto Arcee (DPT). Acreditamos que nossos esforços ajudarão quando iniciarmos a próxima fase da modelagem de idiomas, onde as organizações adaptam profundamente a IA para operar de acordo com sua propriedade intelectual única e visão de mundo.
Exemplo de consulta Dalms criados pela equipe Arcee.
| Dalm-patente | Dalm-Pubmed | Dalm-seg | Dalm-yours |
|---|---|---|---|
Este repositório contém principalmente código para ajustar uma arquitetura de geração aumentada de recuperação totalmente diferencial (rag-end2end).
Pela primeira vez na literatura, modificamos o modelo inicial de rag-end2end (papel tacl, implementação do Huggingface) para trabalhar com modelos de idiomas somente para decodificadores como llama, falcon ou GPT. Também incorporamos o conceito negativo em lotes, juntamente com a marginalização do RAG para tornar todo o processo eficiente .
Dentro da pasta de treinamento, você encontrará dois códigos para treinar o rag-end2end e o Retriever com aprendizado contrastante.
Todas as avaliações relacionadas ao Retriever e ao gerador estão localizadas na pasta Eval.
Além disso, temos códigos de processamento de dados e código de geração de dados sintéticos dentro da pasta DataSets.
Para realizar treinamento e avaliação para o modelo Retriever e o novo modelo RAG-E2E, siga as etapas a seguir.
O sistema REQS depende do modelo Retriever, modelo gerador e tamanho do lote. Mas para referência (E2E RAG), usamos o seguinte para nossos experimentos (avaliação de avaliação abaixo):
BAAI/bge-large-enmeta-llama/Llama-2-7b-hfIsso levou 7 horas em uma única GPU A100 (80 GB).
Você pode instalar este repo diretamente via pip install indomain
Como alternativa, para desenvolvimento ou pesquisa, você pode clonar e instalar o repositório localmente:
git clone https://github.com/arcee-ai/DALM.git && cd DALM
pip install --upgrade -e .Isso instalará o repo Dalm e todas as dependências necessárias.
Verifique se as coisas estão instaladas corretamente executando dalm version . Em um MAC não interior, pode ser necessário fazer o downgrade da biblioteca de transformers : pip install transformers==4.30 .
Você pode executar dalm qa-gen <path-to-dataset> para pré-processar seu conjunto de dados para treinamento. Veja dalm qa-gen --help para mais opções
Se você não possui um conjunto de dados, pode começar com o nosso
# 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 (e Answer se estiver executando o E2E). Você pode utilizar o script question_answer_generation.py para gerar este CSV.BAAI/bge-large-en como o Retriever padrão e empregamos meta-llama/Llama-2-7b-hf como gerador padrão. O código foi projetado para ser compatível com qualquer modelo de incorporação ou modelo autoregressivo disponível no repositório de modelos de face abraçados em https://huggingface.co/models. Você pode aproveitar nossos scripts diretamente, se quiser, ou pode usar a cli dalm . Os argumentos para ambos são idênticos
Treine BAAI/bge-large-en Retriever com aprendizado 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 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 Para todos os argumentos e opções disponíveis, consulte dalm train-retriever-only --help
Trem o gerador Llama-2-7b em conjunto com o 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 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 Para todos os argumentos e opções disponíveis, consulte dalm train-rag-e2e --help
O retriever em geral é treinado para ser bom em encontrar as passagens mais relevantes em um corpus, dada uma consulta.
Dado um conjunto de dados de teste de verdadeira-verdade que é um CSV de 200.000 linhas que contém resumos de patentes e, mais importante, esse conjunto de dados de avaliação não estava presente no conjunto de dados de treinamento, as etapas listadas abaixo foram seguidas:
recall e hit rate . | Tipo de retriever | Lembrar | Taxa de acertar |
|---|---|---|
| Plain Retriever | 0,45984 | 0,45984 |
| Retriever com aprendizado contrastante | 0.46037 | 0,46038 |
| Retriever end2end | 0,73634 | 0,73634 |
Para executar o Retriever Somente Eval (verifique se você tem os pontos de verificação na raiz do projeto)
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 Consulte dalm eval-retriever --help para todos os argumentos disponíveis
Para o E2E avaliação
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 Veja dalm eval-rag --help para todos os argumentos disponíveis
Veja contribuindo