Ce référentiel contient le code expérimental pour reproduire les résultats dans la fusion de connaissances de données en fusionnant des poids de modèles linguistiques, un article à publier lors de la onzième conférence internationale sur les représentations d'apprentissage (ICLR 2023), qui se tiendra du 1er au 5 mai 2023 à Kigali, Rwanda.
@inproceedings{
jin2023dataless,
title={Dataless Knowledge Fusion by Merging Weights of Language Models},
author={Xisen Jin and Xiang Ren and Daniel Preotiuc-Pietro and Pengxiang Cheng},
booktitle={The Eleventh International Conference on Learning Representations},
year={2023},
url={https://openreview.net/forum?id=FCnohuR6AnM}
}
Nous avons utilisé Pytorch 1.13.1. Voir les exigences.txt pour les autres exigences.
Si vous êtes juste intéressé par l'algorithme de régression (Regmean), veuillez consulter regmean_demo.ipynb.
Il s'agit d'un cahier Jupyter autonome qui fusionne deux modèles de transformateurs de visage étreintes affinés sur la colle. Ce fichier n'importe pas de fichiers sous src/ .
Veuillez télécharger l'ensemble de données Unified Emotion dans ce dépôt. Les fichiers doivent être placés sous PROJECT_ROOT/resources/emotion_splits dans la structure suivante.
.
├── crowdflower
│ ├── dev.jsonl
│ ├── full.jsonl
│ ├── test.jsonl
│ └── train.jsonl
├── dailydialog
│ ├── dev.jsonl
│ ├── full.jsonl
│ ├── test.jsonl
│ └── train.jsonl
├── electoraltweets
│ ├── dev.jsonl
│ ├── full.jsonl
│ ├── test.jsonl
│ └── train.jsonl
├── emobank
│ ├── dev.jsonl
│ ├── full.jsonl
│ ├── test.jsonl
│ └── train.jsonl
...
Veuillez préparer les ensembles de données CONLL2003, Ontonotes et Twitter NER et les placer sous PROJECT_ROOT/resources/ner .
.
├── conll2003
│ ├── dev.conll
│ ├── test.conll
│ └── train.conll
├── ontonotes
│ ├── onto.development.bc.ner
│ ├── onto.development.bn.ner
│ ├── onto.development.mz.ner
│ ├── onto.development.nw.ner
│ ├── onto.development.tc.ner
│ ├── onto.development.wb.ner
│ ├── onto.test.bc.ner
│ ├── onto.test.bn.ner
│ ├── onto.test.mz.ner
│ ├── onto.test.nw.ner
│ ├── onto.test.tc.ner
│ ├── onto.test.wb.ner
│ ├── onto.train.bc.ner
│ ├── onto.train.bn.ner
│ ├── onto.train.mz.ner
│ ├── onto.train.nw.ner
│ ├── onto.train.tc.ner
│ └── onto.train.wb.ner
└── twitter
├── annotated.twitter-ner-20-21-tweet-dev-withcleaned.json
├── annotated.twitter-ner-20-21-tweet-test-withcleaned.json
└── annotated.twitter-ner-20-21-tweet-train-withcleaned.json
Ici, les ensembles de données Conll et Ontonotes contiennent des entrées au format Conll.
CRICKET O Conll
- O Conll
LEICESTERSHIRE B-ORG Conll
TAKE O Conll
OVER O Conll
AT O Conll
TOP O Conll
AFTER O Conll
INNINGS O Conll
VICTORY O Conll
. O Conll
LONDON B-LOC Conll
1996-08-30 O Conll
...
Twitter Ner contient 1 dict JSON par ligne.
{"text": "Spectacular skies over #Clonmel tonight http://t.co/OxclQkuyTp /via @niallodonovan #lastdayofautumn", "id": "539106999980797952", "entities": [{"startCharOffset": 24, "endOffset": 31, "endCharOffset": 31, "surface": "Clonmel", "startOffset": 24, "type": "LOC"}, {"startCharOffset": 69, "endOffset": 82, "endCharOffset": 82, "surface": "niallodonovan", "startOffset": 69, "type": "PER"}], "labels": ["O", "O", "O", "O", "B-LOC", "O", "O", "O", "O", "B-PER", "O", "O"], "tokens": ["Spectacular", "skies", "over", "#", "Clonmel", "tonight", "http://t.co/OxclQkuyTp", "/", "via", "@niallodonovan", "#", "lastdayofautumn"], "domain": "TWT"}
Les ensembles de données de colle seront téléchargés et chargés de bibliothèque datasets de Face étreintes.
Veuillez télécharger des modèles pré-entraînés (par exemple, Roberta-base) dans le référentiel de modèles Face Hugging et les placer sous PROJECT_ROOT/resources (par exemple, PROJECT_ROOT/resources/roberta-base ).
--config_files : Voir sous src/configs . Le module de formation ( src.run_experiments ) nécessite trois fichiers de configuration définissant les arguments par défaut ( src/defaults.yaml ), les données de configuration (sous src/configs/datasets ) et Exp Config (sous src/configs/exps ).
--filter_model : utile lors de la fusion uniquement d'un sous-ensemble de modèles individuels spécifiques dans la configuration de données, par exemple, --filter_model model0 model1 effectuera la fusion de paires de modèles 0 et modèle1 (voir la définition d'alias comme Model0, Model1 dans la configuration de données).
--templates : les fichiers de configuration peuvent contenir des modèles comme {seed} . Les valeurs des modèles doivent être spécifiées dans les lignes de commande (par exemple, --templates seed=1 ).
Les modèles individuels (avant la fusion) seront formés et stockés sous local_zoo_dir spécifié dans la configuration. Si aucun des modèles individuels du zoo ne correspond au type de modèle donné et aux arguments zoo_filter dans la configuration, le programme formera automatiquement de nouveaux modèles individuels et les stockera sous local_zoo_dir . Si des modèles individuels sont trouvés dans local_zoo_dir , ils seront chargés sans reconstitution.
Exemple: regmean, émotion, même chef init, fusion Model0 (DailyDialogue) et Model1 (Crowdflower)
HF_DATASETS_OFFLINE=1 CUDA_VISIBLE_DEVICES=0 python -m src.run_experiments --config src/configs/defaults.yaml src/configs/datasets/emotion.yaml src/configs/exps/roberta-base/roberta-base-emotion.yaml --templates seed=1 --filter_model model0 model1
Fusion de deux modèles de classification des émotions formés sur différents ensembles de données (domaines).
scripts/roberta/pairwise_emotion.pyscripts/t5/pairwise_emotion.pyscripts/t5/pairwise_emotion.pyFusion de deux modèles formés sur différentes tâches de colle. Les têtes de classification spécifiques à la tâche ne sont pas fusionnées.
scripts/distilbert/pairwise_glue_difftask.pyscripts/roberta/pairwise_glue_difftask.pyFusion de deux modèles formés sur deux partitions non IID de la même tâche de colle
scripts/distilbert/pairwise_glue_subset.pyscripts/roberta/pairwise_glue_subset.py Fusionnant avidement plusieurs modèles (deux à tous) dans l'ordre des performances OOD de modèles individuels.
scripts/roberta/incremental_emotion.pyscripts/t5/incremental_emotion.pyscripts/deberta/incrementale_emotion.pyscripts/roberta/incremental_ner.pyscripts/deberta/incremental_ner.pyVeuillez noter que ces scripts exécutent l'inférence sur les ensembles de tests dans le domaine et hors domaine.
Chaque script ci-dessus fonctionnera simple, Fisher et Regmean en moyenne. Ils exécutent également l'apprentissage multi-tâches (MTL), l'ensemble de modèles et les performances de modèles individuels (avant la fusion) en tant que comparateurs. Vous pouvez commenter les lignes à l'intérieur de ces scripts pour simplement exécuter une partie de chacun.
Ce projet est concédé sous licence Apache 2.0. Voir le fichier de licence pour plus de détails.
Ce projet a adopté un code de conduite. Si vous avez des préoccupations concernant le code ou le comportement que vous avez connu dans le projet, veuillez nous contacter à [email protected].
Si vous pensez que vous avez identifié une vulnérabilité de sécurité dans ce projet, veuillez envoyer un e-mail à l'équipe de projet à [email protected] détaillant le problème suspecté et toutes les méthodes que vous avez trouvées pour la reproduire.
Veuillez ne pas ouvrir de problème dans le référentiel GitHub, car nous préférons garder les rapports de vulnérabilité privés jusqu'à ce que nous ayons eu l'occasion de les réexaminer et de les résoudre.