Dieses Repository enthält den experimentellen Code, um die Ergebnisse in der Wissensfusion von Dataless-Wissen zu reproduzieren, indem Gewichte von Sprachmodellen zusammengeführt werden, die während der elften internationalen Konferenz über Lerndarstellungen (ICLR 2023) veröffentlicht werden sollen, die vom 1. bis 5. Mai 2023 in Kigali, Ruwa, stattfinden.
@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}
}
Wir haben Pytorch 1.13.1 verwendet. Siehe Anforderungen.txt für andere Anforderungen.
Wenn Sie sich nur für den Algorithmus für den Regressionsmittel (Regmean) interessieren, überprüfen Sie bitte Regmean_demo.ipynb.
Dies ist ein eigenständiges Jupyter-Notizbuch, das zwei mit dem Klebstoff fein abgestimmte Face-Face-Face-Transformatormodelle verschmelzen. Diese Datei importiert keine Dateien unter src/ .
Bitte laden Sie den Unified Emotion -Datensatz in diesem Repo herunter. Die Dateien sollten in der folgenden Struktur unter PROJECT_ROOT/resources/emotion_splits platziert werden.
.
├── 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
...
Bitte bereiten Sie CONLL2003, Ontonotes und Twitter -NER -Datensätze vor und platzieren Sie sie unter 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
Hier enthalten Conll und Ontonotes -Datensätze Einträge im Conll -Format.
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 enthält 1 JSON -Dikte pro Zeile.
{"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"}
Klebendatensätze werden heruntergeladen und mit der datasets -Bibliothek von Sugging Face geladen.
Bitte laden Sie vorgefertigte Modelle (z. B. Roberta-Base) aus dem Umarmungs-Face-Models-Repository herunter und platzieren Sie sie unter PROJECT_ROOT/resources (z. B. PROJECT_ROOT/resources/roberta-base ).
--config_files : Siehe unter src/configs . Das Trainingsmodul ( src.run_experiments ) erfordert drei Konfigurationsdateien, die Standardargumente ( src/defaults.yaml ), Datenkonfiguration (unter src/configs/datasets ) und Exp -Konfiguration (unter src/configs/exps ) definieren.
--filter_model : Nützlich, wenn nur eine Teilmenge einzelner Modelle, die in der Datenkonfiguration spezifisch sind, z. B. --filter_model model0 model1 durchführt, führt die Paare-Verschmelzung von Modell0 und Modell1 durch (siehe Definition von alias wie Modell0, Modell1 in der Datenkonfiguration).
--templates : Konfigurationsdateien können Vorlagen wie {seed} enthalten. Die Werte von Vorlagen sollten in Befehlszeilen angegeben werden (z. B. --templates seed=1 ).
Einzelne Modelle (vor dem Zusammenführen) werden in der Konfiguration unter local_zoo_dir ausgebildet und gespeichert. Wenn keiner der einzelnen Modelle im Zoo mit dem angegebenen Modelltyp und zoo_filter -Argumenten in der Konfiguration übereinstimmen, trainiert das Programm automatisch neue Einzelmodelle und speichert sie unter local_zoo_dir . Wenn einzelne Modelle in local_zoo_dir gefunden werden, werden sie ohne Wiederverletzung geladen.
Beispiel: Regmean, Emotion, gleicher Kopf init, Merginging Model0 (DailyDialogue) und 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
Zusammenführen von zwei Emotionsklassifizierungsmodellen, die auf verschiedenen Datensätzen (Domänen) trainiert wurden.
scripts/roberta/pairwise_emotion.pyscripts/t5/pairwise_emotion.pyscripts/t5/pairwise_emotion.pyZusammenführen von zwei Modellen, die auf verschiedenen Kleberaufgaben trainiert wurden. Aufgabenspezifische Klassifizierungsköpfe werden nicht zusammengeführt.
scripts/distilbert/pairwise_glue_difftask.pyscripts/roberta/pairwise_glue_difftask.pyZusammenführen von zwei Modellen, die auf zwei Nicht-IID-Partitionen derselben Kleberaufgabe trainiert wurden
scripts/distilbert/pairwise_glue_subset.pyscripts/roberta/pairwise_glue_subset.py Gierig verschmolzen mehrere (zwei) Modelle in der Reihenfolge der OOD -Leistung einzelner Modelle.
scripts/roberta/incremental_emotion.pyscripts/t5/incremental_emotion.pyscripts/deberta/incrementale_emotion.pyscripts/roberta/incremental_ner.pyscripts/deberta/incremental_ner.pyBitte beachten Sie, dass diese Skripte sowohl in Domänen- als auch bei den Testsätzen außerhalb der Domänen inferenziert werden.
Jedes Skript oben wird einfach, Fisher und Regmean gemittelt. Sie führen auch das Multi-Task-Lernen (MTL), das Modellsemble und die Leistung einzelner Modelle (vor dem Zusammenführen) als Vergleicher aus. Sie können Zeilen in diesen Skripten kommentieren, um nur einen Teil der einzelnen auszuführen.
Dieses Projekt ist unter der Apache 2.0 -Lizenz lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.
Dieses Projekt hat einen Verhaltenskodex angenommen. Wenn Sie Bedenken hinsichtlich des Code oder des Verhaltens haben, das Sie im Projekt erlebt haben, kontaktieren Sie uns bitte unter [email protected].
Wenn Sie der Ansicht sind, dass Sie in diesem Projekt eine Sicherheitsanfälligkeit identifiziert haben, senden Sie bitte eine E -Mail an das Projektteam unter [email protected], wobei das mutmaßliche Problem und alle Methoden, die Sie zur Reproduktion gefunden haben, beschreiben.
Bitte eröffnen Sie kein Problem im Github -Repository, da wir lieber Schwachstellenberichte privat halten möchten, bis wir die Möglichkeit hatten, sie zu überprüfen und zu beheben.