Das Tutorial wurde am 2. Juni in NAACL 2019 in Minneapolis, MN, USA von Sebastian Ruder, Matthew Peters, Swabha Swayamdipta und Thomas Wolf erteilt.
Hier finden Sie die Webseite der NAACL -Tutorials für weitere Informationen.
Die Folien für das Tutorial finden Sie hier: https://tinyurl.com/naacltransfer.
Ein Google Colab -Notizbuch mit dem gesamten Code für das Tutorial finden Sie hier: https://tinyurl.com/naacltransfercolab.
Das vorliegende Repository kann auch mit der folgenden kurzen URL zugegriffen werden: https://tinyurl.com/naacltransfercode
Das klassische Paradigma für das maschinelle Lernen basiert auf isoliertem Lernen, ein einzelnes Vorhersagemodell für eine Aufgabe unter Verwendung eines einzelnen Datensatzes. Dieser Ansatz erfordert eine große Anzahl von Trainingsbeispielen und bietet am besten für gut definierte und enge Aufgaben. Transfer Learning bezieht sich auf eine Reihe von Methoden, die diesen Ansatz erweitern, indem Daten aus zusätzlichen Domänen oder Aufgaben genutzt werden, um ein Modell mit besseren Generalisierungseigenschaften zu schulen.
In den letzten zwei Jahren hat das Gebiet der natürlichen Sprachverarbeitung (NLP) die Entstehung mehrerer Transferlernmethoden und -architekturen erlebt, die sich auf dem neuesten Stand der Technik auf einer Vielzahl von NLP-Aufgaben erheblich verbesserten.
Diese Verbesserungen zusammen mit der breiten Verfügbarkeit und einfachen Integration dieser Methoden erinnern an die Faktoren, die zum Erfolg von vorbereiteten Wortbettendings und Bildnutzung im Computervision geführt haben, und deuten darauf hin, dass diese Methoden in der NLP -Landschaft wahrscheinlich zu einem gemeinsamen Werkzeug sowie eine wichtige Forschungsrichtung werden.
Wir werden einen Überblick über moderne Transferlernmethoden in NLP geben, wie Modelle vorgeschrieben sind, welche Informationen die Darstellungen erfassen, und Beispiele und Fallstudien darüber, wie diese Modelle in nachgelagerten NLP-Aufgaben integriert und angepasst werden können.
Diese Codebasis versucht auf einfachste und kompakteste Weise einige der wichtigsten Transferlernen -Techniken zu präsentieren, die in den letzten Jahren entstanden sind. Der Code in diesem Repository versucht nicht, auf dem neuesten Stand zu sein. Es wurden jedoch Anstrengungen unternommen, um eine angemessene Leistung und einige Änderungen zu erzielen, um mit dem aktuellen Stand der Technik wettbewerbsfähig zu sein.
Es wurden besondere Anstrengungen unternommen
Derzeit umfasst die Codebasis:
pretraining_model.py : Ein Transformatormodell mit einer GPT-2-ähnlichen Architektur als grundlegende vorbereitete Modell;pretraining_train.py : Ein Vorab-Skript zum Training dieses Modells mit einem Sprachmodellungsziel für eine Auswahl großer Datensätze (Wikitext-103, SimpleBooks-92) unter Verwendung eines verteilten Trainings, falls verfügbar;finetuning_model.py : Mehrere Architekturen basierend auf dem Transformatormodell für die Feinabstimmung (mit einem Klassifizierungskopf oben mit Adaptern);finetuning_train.py : Ein Feinabstimmungsskript, um diese Architekturen einer Klassifizierungsaufgabe (IMDB) zu optimieren. Um diese Codebasis zu verwenden, klonen Sie einfach das Github -Repository und installieren Sie die Anforderungen wie folgt:
git clone https://github.com/huggingface/naacl_transfer_learning_tutorial
cd naacl_transfer_learning_tutorial
pip install -r requirements.txt Führen Sie das Skript wie folgt aus, um den Transformator vorzubinden, das Skript pretraining_train.py .
python ./pretraining_train.pyoder verwenden Sie ein verteiltes Training wie dieses (für einen 8 GPU -Server):
python -m torch.distributed.launch --nproc_per_node 8 ./pretraining_train.pyDas Skript vor dem Training wird:
wikitext-103 für die Vorausbildung (Standard),./runs ,,Die Vorbereitung auf eine Validierung von ~ 29 auf Wikitext-103 dauert etwa 15 Stunden auf 8 V100 GPUs (kann früher gestoppt werden). Wenn Sie an SOTA interessiert sind, gibt es einige Gründe, warum die Validierung Verwirrung etwas höher ist als die äquivalente Transformator-XL-Verwirrung (ca. 24). Der Hauptgrund ist die Verwendung eines offenen Vokabulars (Unterwürde für Bert-Tokenizer) anstelle eines geschlossenen Wortschatzes (siehe diesen Blog-Beitrag von Sebastian Mielke, um eine Erklärung zu erhalten).
Verschiedene Optionen für Voraussetzungen sind verfügbar. Sie können diese auflisten::
python ./pretraining_train.py --help Um den vorgeborenen Transformator zu optimieren, führen Sie das Skript finetuning_train.py wie folgt aus:
python ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER kann zum Beispiel sein ./runs/May17_17-47-12_my_big_server
oder verwenden Sie ein verteiltes Training wie dieses (für einen 8 GPU -Server):
python -m torch.distributed.launch --nproc_per_node 8 ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDERVerschiedene Feinabstimmungsoptionen sind verfügbar. Sie können sie auflisten::
python ./finetuning_train.py --help