Wie man ein BERT-Modell von Grund auf trainiert
Treffen Sie den italienischen Cousin von BERT, FiliBERTo.
By James Briggs, Datenwissenschaftler
BERT, aber in Italien – Bild vom Autor
Viele meiner Artikel haben sich auf BERT konzentriert – das Modell, das die Welt der Verarbeitung natürlicher Sprache (NLP) dominierte und ein neues Zeitalter für Sprachmodelle markierte.
Für diejenigen unter Ihnen, die möglicherweise noch nie Transformatormodelle (z. B. BERT) verwendet haben, sieht der Prozess in etwa so aus:
pip install transformers
- Initialisieren Sie ein vorab trainiertes Transformatormodell –
from_pretrained
. - Testen Sie es anhand einiger Daten.
- Vielleicht Feinabstimmung des Modells (trainieren Sie es noch mehr).
Nun, das ist ein toller Ansatz, aber wenn wir nur das tun, fehlt uns das Verständnis für die Erstellung unserer eigenen Transformatormodelle.
Und wenn wir keine eigenen Transformatormodelle erstellen können, müssen wir uns darauf verlassen, dass es ein vorab trainiertes Modell gibt, das zu unserem Problem passt. Dies ist jedoch nicht immer der Fall:
Ein paar Kommentare zu nicht-englischen BERT-Modellen
In diesem Artikel werden wir die Schritte untersuchen, die wir unternehmen müssen, um unser eigenes Transformatormodell zu erstellen – insbesondere eine weiterentwickelte Version von BERT namens RoBERTa.
Ein Überblick
Der Prozess besteht aus mehreren Schritten. Bevor wir uns also darauf einlassen, wollen wir zunächst zusammenfassen, was wir tun müssen. Insgesamt gibt es vier wesentliche Teile:
- Daten abrufen
- Einen Tokenizer bauen
- Erstellen einer Eingabepipeline
- Das Modell trainieren
Sobald wir jeden dieser Abschnitte durchgearbeitet haben, nehmen wir den Tokenizer und das Modell, die wir erstellt haben – und speichern sie beide, damit wir sie dann auf die gleiche Weise verwenden können, wie wir es normalerweise tun würden from_pretrained
.
Die Daten abrufen
Wie bei jedem maschinellen Lernprojekt benötigen wir Daten. Was die Daten zum Trainieren eines Transformatormodells angeht, haben wir wirklich die Qual der Wahl – wir können fast alle Textdaten verwenden.
Video-Anleitung zum Herunterladen des OSCAR-Datensatzes mithilfe der Datensatzbibliothek von HuggingFace
Und wenn es etwas gibt, von dem wir im Internet reichlich haben, dann sind es unstrukturierte Textdaten.
Einer der größten Datensätze im Bereich Text aus dem Internet ist der OSCAR-Datensatz.
Der OSCAR-Datensatz umfasst eine große Anzahl verschiedener Sprachen – und einer der klarsten Anwendungsfälle für ein Training von Grund auf besteht darin, dass wir BERT auf einige weniger häufig verwendete Sprachen wie Telugu oder Navajo anwenden können.
Leider ist die einzige Sprache, die ich einigermaßen gut sprechen kann, Englisch – aber meine Freundin ist Italienerin, und deshalb wird sie – Laura – die Ergebnisse unseres italienischsprachigen BERT-Modells – FiliBERTo – bewerten.
Um das italienische Segment des OSCAR-Datensatzes herunterzuladen, verwenden wir HuggingFace datasets
Bibliothek – mit der wir installieren können pip install datasets
. Dann laden wir OSCAR_IT herunter mit:
Werfen wir einen Blick auf die dataset
Objekt.
Großartig, jetzt speichern wir unsere Daten in einem Format, das wir beim Erstellen unseres Tokenizers verwenden können. Wir müssen eine Reihe von Klartextdateien erstellen, die genau das enthalten text
Feature aus unserem Datensatz, und wir werden jedes aufteilen Sample mit einer neuen Zeile n
.
Drüben in unserem data/text/oscar_it
Verzeichnis finden wir:
Das Verzeichnis, das unsere Klartext-OSCAR-Dateien enthält
Aufbau eines Tokenizers
Als nächstes kommt der Tokenizer! Bei der Verwendung von Transformatoren laden wir normalerweise einen Tokenizer zusammen mit dem entsprechenden Transformatormodell – der Tokenizer ist eine Schlüsselkomponente im Prozess.
Video-Anleitung zum Erstellen unseres benutzerdefinierten Tokenizers
Beim Erstellen unseres Tokenizers geben wir alle unsere OSCAR-Daten ein, geben unsere Vokabulargröße (Anzahl der Token im Tokenizer) und alle speziellen Token an.
Nun sehen die speziellen RoBERTa-Token so aus:
Deshalb stellen wir sicher, dass wir sie in die Liste aufnehmen special_tokens
Parameter unseres Tokenizers train
Methodenaufruf.
Unser Tokenizer ist jetzt fertig und wir können die Datei zur späteren Verwendung speichern:
Jetzt haben wir zwei Dateien, die unser neues definieren FiliBERTo Tokenizer:
- merges.txt – führt die anfängliche Zuordnung von Text zu Token durch
- vocab.json – ordnet die Token Token-IDs zu
Und damit können wir mit der Initialisierung unseres Tokenizers fortfahren, sodass wir ihn wie jeden anderen verwenden können from_pretrained
Tokenisierer.
Initialisieren des Tokenizers
Wir initialisieren den Tokenizer zunächst mit den beiden zuvor erstellten Dateien – mit einem einfachen from_pretrained
:
Jetzt ist unser Tokenizer fertig, wir können versuchen, etwas Text damit zu kodieren. Beim Codieren verwenden wir dieselben zwei Methoden, die wir normalerweise verwenden würden: encode
und encode_batch
.
Aus dem Encodings-Objekt tokens
Wir werden das extrahieren input_ids
und attention_mask
Tensoren zur Verwendung mit FiliBERTo.
Erstellen der Eingabepipeline
Die Eingabepipeline unseres Trainingsprozesses ist der komplexere Teil des gesamten Prozesses. Es besteht darin, dass wir unsere rohen OSCAR-Trainingsdaten nehmen, sie umwandeln und in ein laden DataLoader
bereit zum Training.
Video-Komplettlösung der MLM-Eingabepipeline
Vorbereiten der Daten
Wir beginnen mit einer einzelnen Probe und arbeiten die Vorbereitungslogik durch.
Zuerst müssen wir unsere Datei öffnen – dieselben Dateien, unter denen wir gespeichert haben .txt Dateien früher. Wir teilen sie jeweils nach Zeilenumbruchzeichen auf n
da dies die einzelnen Proben angibt.
Dann verschlüsseln wir unsere Daten mit dem tokenizer
– Stellen Sie sicher, dass Sie wichtige Parameter einbeziehen, z max_length
, padding
und truncation
.
Und jetzt können wir mit der Erstellung unserer Tensoren fortfahren – wir werden unser Modell durch Masked-Language-Modeling (MLM) trainieren. Wir brauchen also drei Tensoren:
- input_ids - unser token_ids wobei ca. 15 % der Token mit dem Masken-Token maskiert werden
<mask>
. - Aufmerksamkeit_Maske – ein Tensor von 1s und 0s, markiert die Position von „echten“ Token/Padding-Tokens – wird bei Aufmerksamkeitsberechnungen verwendet.
- Etiketten - unser token_ids mit nicht maskieren.
Wenn Sie mit MLM nicht vertraut sind, habe ich es erklärt hier.
Unser attention_mask
und labels
Tensoren werden einfach aus unserem extrahiert batch
dem „Vermischten Geschmack“. Seine input_ids
Tensoren erfordern jedoch mehr Aufmerksamkeit. Für diesen Tensor maskieren wir etwa 15 % der Token und weisen ihnen die Token-ID zu 3
.
In der endgültigen Ausgabe können wir einen Teil einer codierten Datei sehen input_ids
Tensor. Die allererste Token-ID ist 1
- Die [CLS]
Zeichen. Rund um den Tensor herum haben wir mehrere 3
Token-IDs – das sind unsere neu hinzugefügten [MASK]
Token.
Erstellen des DataLoader
Als nächstes definieren wir unsere Dataset
Klasse – mit der wir unsere drei codierten Tensoren als PyTorch initialisieren torch.utils.data.Dataset
Objekte.
Schließlich unser dataset
wird in einen PyTorch geladen DataLoader
Objekt – das wir verwenden, um unsere Daten während des Trainings in unser Modell zu laden.
Das Modell trainieren
Wir brauchen zwei Dinge zum Training, unsere DataLoader
und ein Modell. Der DataLoader
wir haben – aber kein Modell.
Initialisieren des Modells
Für das Training benötigen wir ein rohes (nicht vorab trainiertes) BERTLMHeadModel
. Um dies zu erstellen, müssen wir zunächst ein RoBERTa-Konfigurationsobjekt erstellen, um die Parameter zu beschreiben, mit denen wir FiliBERTo initialisieren möchten.
Anschließend importieren und initialisieren wir unser RoBERTa-Modell mit einem Sprachmodellierungskopf (LM).
Trainingsvorbereitung
Bevor wir mit unserer Trainingsschleife fortfahren, müssen wir ein paar Dinge einrichten. Zuerst richten wir die GPU/CPU-Nutzung ein. Dann aktivieren wir den Trainingsmodus unseres Modells – und initialisieren schließlich unseren Optimierer.
Ausbildung
Endlich – Trainingszeit! Wir trainieren genauso, wie wir es normalerweise beim Training über PyTorch tun würden.
Wenn wir zu Tensorboard gehen, werden wir mit der Zeit unseren Verlust feststellen – es sieht vielversprechend aus.
Verlust/Zeit – in dieser Tabelle wurden mehrere Trainingseinheiten zusammengefasst
Der wahre Test
Jetzt ist es Zeit für den echten Test. Wir richten eine MLM-Pipeline ein – und bitten Laura, die Ergebnisse zu bewerten. Den Videorückblick um 22:44 können Sie sich hier ansehen:
Wir initialisieren zunächst a pipeline
Objekt, mit dem 'fill-mask'
Streit. Dann beginnen Sie mit dem Testen unseres Modells wie folgt:
„ciao wie die va?“ ist die richtige Antwort! Das ist so fortgeschritten, wie mein Italienisch nur sein kann – also übergeben wir es an Laura.
Wir fangen mit an „Buongiorno, komm schon?“ - oder "Guten Tag, wie geht es ihnen?":
Die erste Antwort: „buongiorno, chi va?“ bedeutet „Guten Tag, wer ist da?“ – zB unsinnig. Aber unsere zweite Antwort ist richtig!
Als nächstes ein etwas schwierigerer Satz: „ciao, dove ci incontriamo oggi pomeriggio?“ - oder „Hallo, wo treffen wir uns heute Nachmittag?“:
Und wir kehren zu weiteren positiven Ergebnissen zurück:
✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"
Zum Schluss noch ein härterer Satz: „Cosa sarebbe successo se avessimo scelto un altro giorno?“ – oder „Was wäre passiert, wenn wir einen anderen Tag gewählt hätten?“:
Auch hier gibt es noch ein paar gute Antworten:
✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"
Insgesamt sieht es so aus, als hätte unser Modell Lauras Tests bestanden – und wir haben jetzt ein kompetentes italienisches Sprachmodell namens FiliBERTo!
Das ist alles für diese exemplarische Vorgehensweise zum Trainieren eines BERT-Modells von Grund auf!
Wir haben viele Bereiche abgedeckt, von der Beschaffung und Formatierung unserer Daten bis hin zur Verwendung der Sprachmodellierung zum Trainieren unseres rohen BERT-Modells.
Ich hoffe, Ihnen hat dieser Artikel gefallen! Wenn Sie Fragen haben, lassen Sie es mich wissen über Twitter oder in den Kommentaren unten. Wenn Sie mehr Inhalte wie diesen wünschen, poste ich auf YouTube Auch.
Danke fürs Lesen!
70% Rabatt! Verarbeitung natürlicher Sprache: NLP mit Transformern in Python
Transformer-Modelle sind der De-facto-Standard im modernen NLP. Sie haben sich als die ausdrucksstärksten… erwiesen.
*Alle Bilder stammen vom Autor, sofern nicht anders angegeben
Bio: James Briggs ist ein Datenwissenschaftler, der sich auf die Verarbeitung natürlicher Sprache spezialisiert hat und im Finanzsektor mit Sitz in London, Großbritannien, arbeitet. Er ist außerdem freiberuflicher Mentor, Autor und Ersteller von Inhalten. Sie können den Autor per E-Mail erreichen (jamescalam94@gmail.com).
Original. Mit Genehmigung erneut veröffentlicht.
Related:
Top Stories der letzten 30 Tage | |||
---|---|---|---|
|
Quelle: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html
- "
- &
- Alle
- Analytik
- um
- Artikel
- Artikel
- Auto
- bauen
- Building
- rufen Sie uns an!
- Bemerkungen
- Komponente
- Inhalt
- Erstellen
- Schöpfer
- technische Daten
- Datenwissenschaft
- Datenwissenschaftler
- Tag
- tiefe Lernen
- Direktor
- Ingenieur
- Ingenieure
- Englisch
- Merkmal
- Endlich
- Finanzen
- Vorname
- Format
- frei
- voller
- gut
- GPUs
- groß
- ganzer
- hier
- Ultraschall
- Hilfe
- HTTPS
- riesig
- Image
- Internet
- IT
- Italien
- Wesentliche
- Sprache
- Sprachen
- LERNEN
- lernen
- Bibliothek
- Belastung
- London
- Maschinelles Lernen
- Making
- Landkarten
- Maske"
- ML
- Modell
- Modellieren
- schlauer bewegen
- Natürliche Sprache
- Verarbeitung natürlicher Sprache
- Nlp
- Online
- XNUMXh geöffnet
- Open-Source-
- Andere
- Klartext
- Spieler
- Reichlich
- Projekt
- Pytorch
- Roh
- Die Ergebnisse
- Überprüfen
- Wissenschaft
- Wissenschaftler
- kompensieren
- Größe
- So
- gespalten
- Anfang
- speichern
- Geschichten
- Test
- Testen
- Tests
- Zeit
- Zeichen
- Tokens
- Top
- Ausbildung
- Transformieren
- Uk
- UN
- us
- Anwendungsfälle
- Video
- Ansehen
- WHO
- Fenster
- .
- Arbeiten
- weltweit wie ausgehandelt und gekauft ausgeführt wird.
- Schriftsteller
- X
- Youtube