Ich lese ** "Developmental Deep Learning mit PyTorch" **. Dieses Mal habe ich BERT in Kapitel 8 studiert, daher möchte ich meine eigene Zusammenfassung ausgeben.
Im Jahr 2018, dem Jahr nach der Ankündigung von Transformer, wurde ** BERT ** schließlich mit einer Genauigkeit angekündigt, die den Menschen selbst im Bereich der Verarbeitung natürlicher Sprache übertrifft. Es war.
BERT war in der Lage, alle Aufgaben der Verarbeitung natürlicher Sprache mit Feinabstimmung zu bewältigen, und erreichte in 11 Arten von Aufgaben eine überwältigende SoTA.
Dies ist das Modelldiagramm von BERT im Papier. Es sieht kompliziert aus, weil es in Längsrichtung des Wortes erweitert ist, aber in einfachen Worten ist es dasjenige, das nur den Encoder-Teil von ** Transformer ** extrahiert. Was ist der Unterschied zwischen BERT und Transformer? Es ist ** Vorlernen mit 2 Arten von Aufgaben ** und ** Feinabstimmung ** ** 2-Stufen-Lernen ** entsprechend der gewünschten Aufgabe.
** 1) Vorlernen mit 2 Arten von Aufgaben **
Die Aufgabe, 15% eines Wortes in einem Satz zu maskieren und dieses Wort zu erraten (** Masked Language Model ) und die Aufgabe, festzustellen, ob die Kontexte zweier Sätze miteinander verbunden sind ( Next Satz Vorhersage **) ** Gleichzeitig lernen **.
Setzen Sie ** [CLS] ** an den Anfang des eingegebenen Satzes und fügen Sie ** eingebettete Ausdrücke hinzu, um die erste oder zweite Aussage in den beiden Sätzen ** und ** [SEP] ** dazwischen darzustellen. Einstellen.
Durch das Erlernen dieser beiden Aufgaben ** die Fähigkeit, Wörter entsprechend dem Kontext in Merkmalsvektoren umzuwandeln ** und ** die Fähigkeit zu bestimmen, ob Sätze semantisch verbunden sind ** (ungefähr die Bedeutung von Sätzen) Erwerben Sie die Fähigkeit zu verstehen).
Das Vorlernen, das diesen Boden trainiert, kostet eine Menge Berechnungskosten, und es scheint, dass es ungefähr 4 Tage dauert, selbst wenn Sie 4 TPUs verwenden, aber wenn jemand es einmal tut, wird es sich in ein Netzwerk verwandeln, das verschiedene Aufgaben mit Feinabstimmung lösen kann. Du kannst es schaffen.
** 2) Feinabstimmung **
Mit dem ** Vorlerngewicht als Anfangswert ** wird eine Feinabstimmung mit beschrifteten Daten durchgeführt. Da der Hintergrund durch Vorlernen erheblich trainiert wurde, ist es möglich, aus einer kleinen Menge von Satzdaten ** ein Modell mit guter Leistung zu erstellen. Dem Papier zufolge betrug der Rechenaufwand für die Feinabstimmung für verschiedene Aufgaben mit einer einzelnen TPU weniger als eine Stunde.
Nachfolgend sind die 11 NLP-Aufgaben aufgeführt, die BERT SoTA aufgezeichnet hat.
Datensatz | Art | Überblick |
---|---|---|
MNLI | Inferenz | Implikationen von Prämisse und Hypothese/Widerspruch/Beurteilung entweder neutral |
QQP | Ähnlichkeitsurteil | Implikationen von Prämisse und Hypothese/Widerspruch/Beurteilung entweder neutral |
QNLI | Inferenz | Ein Satz-Frage-Paar wird übergeben, um festzustellen, ob der Satz eine Antwort enthält |
SST-2 | 1 Satzklassifikation | Satz positiv/Negative Emotionsanalyse |
CoLA | 1 Satzklassifikation | Stellen Sie fest, ob der Satz grammatikalisch korrekt ist |
STS-B | Ähnlichkeitsurteil | Punktzahl 1, wie ähnlich die beiden Sätze in Bezug auf die Bedeutung sind~Bestimmt durch 5 |
MRPC | Ähnlichkeitsurteil | Bestimmen Sie, ob die beiden Sätze semantisch gleich sind |
RTE | Inferenz | Bestimmen Sie, ob zwei Sätze implizieren |
SQuAD v1.1 | Inferenz | Sagen Sie voraus, wo sich die Antwort in einem Satz befindet, der eine Frage und eine Antwort enthält |
SQuAD v2.0 | Inferenz | v1.1 plus die Option, dass es keine Antwort gibt |
SWAG | Inferenz | Wählen Sie den Satz nach dem angegebenen Satz aus 4 Auswahlmöglichkeiten |
** 3) Sonstige Unterschiede ** -In Transformer wird die Positionsinformation eines Wortes als Wert bestehend aus sin und cos in Positive Encoder angegeben, aber in BERT wird sie gelernt.
Dieses Mal werden wir das ** vorab trainierte Modell ** von BERT verwenden, um eine Feinabstimmung ** der Aufgabe der Bestimmung des Negativs / Positivs von Sätzen durchzuführen. Es gibt zwei Arten von BERT-Modellen mit unterschiedlichen Modellgrößen. Dieses Mal verwenden wir das kleinere Modell namens Base.
Es gibt zwei BERT-Ausgänge, ** zur Identifizierung ** und ** zur Token-Ebene **, und dieses Mal werden wir die vollständig verbundenen Schichten zur Identifizierung verbinden und eine negative / positive Beurteilung vornehmen. Der verwendete Datensatz ist ** IMDb ** (Internet Movie Dataset), der zusammenfasst, ob der Inhalt der Filmkritik (auf Englisch) positiv oder negativ ist.
Wenn Sie eine Bewertung für einen Film eingeben, bestimmen Sie durch Training des Modells, ob die Bewertung positiv oder negativ ist, und lassen Sie die gegenseitige Aufmerksamkeit der Überprüfungswörter das Wort verdeutlichen, auf dem die Entscheidung basiert.
from bert import get_config, BertModel, set_learned_params
#Lesen Sie die JOSN-Datei mit den Modelleinstellungen als Objektvariable
config = get_config(file_path="./data/bert_config.json")
#Erstellen Sie ein BERT-Modell
net_bert = BertModel(config)
#Stellen Sie trainierte Parameter im BERT-Modell ein
net_bert = set_learned_params(
net_bert, weights_path="./data/pytorch_model.bin")
Erstellen Sie ein BERT-Modell und legen Sie vorab trainierte Gewichtsparameter fest.
class BertForIMDb(nn.Module):
'''Ein Modell, das den Teil, der das Positive und Negative von IMDb beurteilt, mit dem BERT-Modell verbindet'''
def __init__(self, net_bert):
super(BertForIMDb, self).__init__()
#BERT-Modul
self.bert = net_bert #BERT-Modell
#Positive / negative Vorhersage zum Kopf hinzugefügt
#Der Eingang ist die Dimension des Ausgangsmerkmals von BERT, und der Ausgang ist positiv und negativ.
self.cls = nn.Linear(in_features=768, out_features=2)
#Verarbeitung der Gewichtsinitialisierung
nn.init.normal_(self.cls.weight, std=0.02)
nn.init.normal_(self.cls.bias, 0)
def forward(self, input_ids, token_type_ids=None, attention_mask=None, output_all_encoded_layers=False, attention_show_flg=False):
'''
input_ids: [batch_size, sequence_length]Liste der Wort-IDs von Sätzen
token_type_ids: [batch_size, sequence_length]Die ID, die angibt, ob jedes Wort der erste oder der zweite Satz ist
attention_mask: Maskierung, die genauso funktioniert wie die Transformer-Maske.
output_all_encoded_Ebenen: Geben Sie an, ob alle 12 Transformatoren in einer Liste oder nur die letzten in der endgültigen Ausgabe zurückgegeben werden sollen
attention_show_flg:Self-Flag zur Rückgabe des Aufmerksamkeitsgewichts
'''
#Vorwärtsausbreitung des grundlegenden Modellteils von BERT
#Vorwärts verbreiten
if attention_show_flg == True:
'''attention_Zum Zeitpunkt der Show Aufmerksamkeit_Probs kehren auch zurück'''
encoded_layers, pooled_output, attention_probs = self.bert(
input_ids, token_type_ids, attention_mask, output_all_encoded_layers, attention_show_flg)
elif attention_show_flg == False:
encoded_layers, pooled_output = self.bert(
input_ids, token_type_ids, attention_mask, output_all_encoded_layers, attention_show_flg)
#Erstes Wort des Eingabesatzes[CLS]Klassifizieren Sie Positive und Negative anhand der Funktionen von
vec_0 = encoded_layers[:, 0, :]
vec_0 = vec_0.view(-1, 768) #Größe[batch_size, hidden_In Größe konvertieren
out = self.cls(vec_0)
# attention_Zum Zeitpunkt der Show Aufmerksamkeit_Probs (letzter) kehren ebenfalls zurück
if attention_show_flg == True:
return out, attention_probs
elif attention_show_flg == False:
return out
Es ist ein Modell, das das BERT-Modell mit dem linearen Modell verbindet, das das Negativ / Positiv von IMDb bestimmt. Da das Aktualisieren des Gewichtungsparameters auf allen Ebenen von BertLayer sehr umfangreich ist, wird es nur auf der letzten Ebene (12. Ebene) von BertLayer und der hinzugefügten linearen Ebene durchgeführt.
Der gesamte Code wurde in Google Colab erstellt und auf Github veröffentlicht. Wenn Sie ihn also selbst ausprobieren möchten, klicken Sie auf diesen ** "Link" **. Sie können es verschieben, indem Sie auf BERT_IMDb_run.ipynb) und oben auf dem angezeigten Blatt auf die Schaltfläche "Colab on Web" klicken.
Als ich den Code ausführte, lernte ich nur 2 Epochen, aber die Genauigkeitsrate der Testdaten betrug ungefähr 90%. Letztes Mal habe ich die gleiche Aufgabe mit Transfomer erledigt, aber die korrekte Antwortrate lag zu diesem Zeitpunkt bei etwa 85%, also ** + 5 Punkte Verbesserung ** Es ist geworden.
Übrigens, was die Klarstellung der Urteilsgrundlage betrifft, Klären Sie mit dieser Art von Gefühl, welches Wort als Grundlage für die Beurteilung verwendet wurde.
(Referenz) ・ Lernen während des Machens! Deep Learning von PyTorch ・ Gründliche Erklärung des Papiers von "BERT", dem König der Verarbeitung natürlicher Sprache
Recommended Posts