一般的なLLMSとコンテキスト情報を提供しているベクターストアとの間に大きな裂け目が現れました。これらのシステムの統一は、AIシステムを効率的で事実上のドメインに接地する上で重要なステップであり、一般性だけでなく、特異性と独自性のために利用されています。この目的のために、開発者がArceeオープンソースドメイン(DPT)LLMSの上に構築できるArceeドメイン適応言語モデル(DALM)ツールキットをオープンソースにオープンソースにしています。私たちの努力は、言語モデリングの次の段階を開始する際に役立つと考えています。この段階では、組織が独自の知的財産と世界観に従って運営するようにAIを深く調整します。
Arceeチームによって作成されたDALMSのクエリの例。
| ダルム父 | ダルムパブメッド | ダルムセック | ダルム・イアー |
|---|---|---|---|
このリポジトリには、主に、完全な差動検索拡張生成(RAG-END2END)アーキテクチャを微調整するためのコードが含まれています。
文献で初めて、最初のRag-end2Endモデル(TACL Paper、Huggingfaceの実装)を変更して、Llama、Falcon、GPTなどのデコーダーのみの言語モデルを使用しました。また、プロセス全体を効率的にするために、RAGの疎外と並んでバッチ内のネガティブコンセプトを組み込みました。
トレーニングフォルダー内には、対照的な学習でrag-end2endとレトリーバーをトレーニングする2つのコードがあります。
レトリバーとジェネレーターに関連するすべての評価は、評価フォルダーにあります。
さらに、データセットフォルダー内にデータ処理コードと合成データ生成コードがあります。
レトリーバーモデルと新しいRAG-E2Eモデルの両方のトレーニングと評価を実行するには、次の手順を遵守してください。
システムReqsは、レトリバーモデル、ジェネレーターモデル、およびバッチサイズに依存します。ただし、参照(E2E RAG)のために、実験に次のものを使用しました(以下の評価結果)。
BAAI/bge-large-enmeta-llama/Llama-2-7b-hfこれには、単一のA100 GPU(80GB)で7時間かかりました。
pip install indomainを介してこのリポジトリを直接インストールできます
または、開発や調査のために、リポジトリをローカルにクローンしてインストールできます。
git clone https://github.com/arcee-ai/DALM.git && cd DALM
pip install --upgrade -e .これにより、DALMリポジトリと必要なすべての依存関係がインストールされます。
dalm versionを実行して、物事が正しくインストールされていることを確認してください。非インテルMACでは、 transformers pip install transformers==4.30をダウングレードする必要がある場合があります。
dalm qa-gen <path-to-dataset>を実行して、トレーニングのためにデータセットを前処理できます。 dalm qa-gen --helpについては、その他のオプションを参照してください
データセットがない場合は、私たちのものから始めることができます
# 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 (およびE2Eを実行している場合はAnswer )の2つ/3つの列を含むCSVファイルを所有していれば、簡単に実行できます。スクリプトquestion_answer_generation.pyを使用して、このCSVを生成できます。BAAI/bge-large-enデフォルトのレトリバーとして利用し、 meta-llama/Llama-2-7b-hfデフォルトのジェネレーターとして採用しています。このコードは、https://huggingface.co/modelsのハグFACEモデルリポジトリで利用可能な埋め込みモデルまたは自己回帰モデルと互換性があるように設計されています。 必要に応じて、スクリプトを直接活用するか、 dalm CLIを使用できます。両方の引数は同一です
対照的な学習を備えたBAAI/bge-large-enレトリバーを訓練します。
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 150または
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利用可能なすべての議論とオプションについては、 dalm train-retriever-only --help
レトリバーモデルBAAI/bge-large-enと共同でLlama-2-7bジェネレーターを訓練します。
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 20または
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利用可能なすべての議論とオプションについては、 dalm train-rag-e2e --help
一般にレトリバーは、クエリを与えられたコーパスで最も関連性の高いパッセージを見つけるのに優れているように訓練されています。
特許抄録を含む200,000ラインのCSVであるグラウンドトゥルーステストデータセット、さらに重要なことに、この評価データセットはトレーニングデータセットに存在しなかったため、以下のリストされた手順に従いました。
recallとhit rate計算します。 | レトリバーのタイプ | 想起 | ヒット率 |
|---|---|---|
| プレーンレトリバー | 0.45984 | 0.45984 |
| 対照学習を備えたレトリバー | 0.46037 | 0.46038 |
| Retriver End2End | 0.73634 | 0.73634 |
Retriverのみを実行するには(プロジェクトルートにチェックポイントがあることを確認してください)
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_checkpointsまたは
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 dalm eval-retriever --helpを参照してください
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/generatorまたは
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 dalm eval-rag --help参照してください
貢献を参照してください