
Erstellen Sie destillierte Modelle aus jedem maskierten Sprachmodell auf dem Huggingface -Hub mit nur einem Bash -Befehl.
Merkmale:
Klonen Sie zunächst das Projekt und installieren Sie die Abhängigkeiten.
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtIn diesem Tutorial zeigen wir Ihnen, wie Sie eine Destillationsaufgabe aus der Befehlszeile einrichten. Sie brauchen zwei Dinge:
bert-base-uncased .Wir werden den englischen Abschnitt des Europarl Corpus verwenden. Dies ist ein sehr hochwertiger paralleler Korpus des europäischen Parlaments, der von professionellen Dolmetschern und Übersetzern erstellt wurde. Heutzutage ist es auch ziemlich klein für ein Sprachkorpus, nur 114 MB, aber für unser Destillation -Tutorial ist das in Ordnung.
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz Die Daten werden nun nicht gepackt und in der Datei en.txt gespeichert.
Jetzt haben wir die Daten, wir können mit dem Training beginnen. Das Herunterladen des Lehrermodells erfolgt automatisch, damit dies nicht manuell erledigt wird. Wenn Sie das Gefühl haben, dass dies zu lange dauert und Sie nur das Training ausprobieren möchten, um beispielsweise ein Gefühl von Timings zu erhalten, können Sie --limit_train_batches N hinzufügen. Dies begrenzt jede Epoche auf N -Chargen während des Trainings.
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txt Es gibt ein paar Dinge, die im Hintergrund passieren, sobald Sie diesen Befehl ausgeführt haben. Erstens schafft diese Bibliothek einen Schüler und ein Lehrermodell. Der Lehrer ist bert-base-uncased und der Schüler wird standardmäßig die gleiche Architektur wie der Lehrer verwenden, nur die Anzahl der Köpfe ist kleiner: 6 anstelle von 12. Da wir in einem bestimmten Bereich (Europarl) trainieren, sollte dies ausreichen. Natürlich können Sie verschiedene und größere Lehrer mit kleineren Schülern mischen und anpassen, aber die Aufführung wird sehr unterschiedlich sein.
Zweitens lädt die SuggingFace -Bibliothek das Lehrermodell und den Tokenizer herunter. Drittens wird der Datensatz von der Festplatte geladen und mit dem Tokenizer initialisiert. Beachten Sie, dass die Tokenisierung selbst später standardmäßig stattfindet. Schließlich beginnt die Destillationsschleife.
Schließlich können Sie das Modell mit der Suggingface -Bibliothek verwenden! Alle Dateien des Schülers (Pytorch -Modell und Tokenizer) werden in dem zuvor definierten Ordner gespeichert: my_distilled_model/ . Sie können das Modell direkt aus diesem Ordner importieren und die maskierte Sprachmodellierungsaufgabe mit nur 3 Zeilen testen:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )Obwohl dies ein Straitforward-Beispiel war, reicht dies oft aus, um Ihr eigenes Domänenmodell zu erstellen. In diesem Fall ist es
Sie können auch eine intrinsische Bewertung unter Verwendung der Pseudo-Perplexität durchführen. Sie müssen den Lehrer und das destillierte Modell angeben. Wenn Sie jedoch nur die Bewertung ausführen, können Sie das Zielmodell für beide Argumente angeben.
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffled Diese Code-Basis wird auch für unser ECML-PKDD 2022-Artikel verwendet, in dem wir die Wissensdestillation von Sprachmodellen mit Fairness-Einschränkungen kombinieren. Die Einschränkungen, die wir in der Arbeit getestet haben, sind Straitforward-Substitution von Geschlechterpronomen, aber der Code unterstützt jede einzelne Substitution. Diese können zum Destillationsprozess hinzugefügt werden, indem definiert wird, welche Token Sie ausgleichen möchten. Zum Beispiel haben he und she Token IDS 2016 und 2002, damit wir ein Substitutionspaar mit beiden Token definieren können. Die Wahrscheinlichkeiten über beide Token werden ausgeglichen.
Sie können Token hinzufügen, indem BaseTransformer universal-distillation/distillation.py ändern.
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))