Es ist üblich geworden, BERT bei der Verarbeitung natürlicher Sprache zu optimieren und zu verwenden. Es wird davon ausgegangen, dass es immer mehr Szenen geben wird, in denen wir die Genauigkeit bei Wettbewerben wie Kaggle oder Projekten mit strengen Genauigkeitsanforderungen so weit wie möglich verbessern möchten. Daher werden wir die Methoden zur Verbesserung der Genauigkeit zusammenfassen. Eine Klassifizierungsaufgabe wird als Aufgabe angenommen.
Sie können bis zu 512 Wörter in das gelernte BERT eingeben. Daher sind besondere Maßnahmen erforderlich, wenn Text mit 512 Wörtern oder mehr verwendet wird. Probieren Sie es aus, da Änderungen in der Verarbeitungsmethode hier häufig zur Verbesserung der Genauigkeit beitragen.
Betrachten Sie als Beispiel 6 Wörter aus dem folgenden Text (mit 1 Wort als Satzzeichen). `Ich / ist / Katze / und / ist /. / Es gibt noch keinen Namen /. ``
I / is / cat
/ und / is /. / Name / ist / `noch nicht / nicht /. ``Von [So optimieren Sie BERT für die Textklassifizierung] how_to_bert. Holen Sie sich Wörter von Anfang bis Ende. Die obige Abbildung zeigt, wie die ersten 3 Wörter und die letzten 3 Wörter verwendet werden. Es ist eine Methode, die einfach zu implementieren ist, eine hohe Leistung aufweist und häufig in Kaggle verwendet wird. Wie viele Wörter vorher und nachher genommen werden sollten, ist von Fall zu Fall.
Katze / und / ist /. / Name / ist
/ noch nicht /.
Ich / ist / Katze / und / ist /. / Name / ist / noch nicht / nicht
/.Holen Sie sich Wörter nacheinander von überall. Wenn Sie den Erfassungsort für jede Epoche ändern, können Sie einen Effekt wie Augmentation erwarten. Es scheint jedoch nicht so genau zu sein wie die Head-Tail-Methode. Wie wäre es mit einer Kombination mit TTA (Test Time Augmentation)?
Ich / ist / Katze / und / ist /.
/ Name / ist / noch nicht / nicht /.
Ich / ist / Katze / de / ist /. / Name / ist / noch nicht
/ nicht /.
Ich / ist / Katze / und / ist /. `/ name / ist / noch nicht / nicht /. ``Dies ist eine Technik, die häufig in Googles Datensatz für natürliche Fragen verwendet wird, z. B. Eine BERT-Basis für die natürlichen Fragen. Die obige Abbildung zeigt den Fall, in dem die Wörter um 3 Wörter verschoben sind. Seine Stärke ist, dass es die Daten vollständig abdecken kann. Der Nachteil ist, dass die Trainingsdaten zu groß sind, wenn die Daten eine große Anzahl von Wörtern enthalten. Es wird verwendet, wenn es wichtig ist, alle Wörter in QS-Aufgaben usw. zu verwenden, kann aber auch zur Verbesserung der Genauigkeit von Klassifizierungsaufgaben beitragen.
Geben Sie eine Frage, eine Antwort und einen Titel ein, z.
Titel: Über Präsident Trump Frage: Woher kommt Präsident Trump? Antwort: New York.
[CLS] Über Präsident Trump [NEW_SEP] Woher kommt Präsident Trump? [SEP] New York. [SEP]
Aus Google QUEST Q & A Labeling 19. Lösung. Wenn BERT zwei Sätze enthält, ist es in Ordnung, sie mit dem Tag [SEP] zu trennen, es werden jedoch keine weiteren Sätze unterstützt. Indem Sie ein Token mit einem geeigneten Namen definieren und als Trennzeichen verwenden, z. B. "[NEW_SEP]", können Sie Satzumbrüche ausdrücken. Solche Token können mit "tokenizer.add_special_tokens" hinzugefügt werden. Im Fall der englischen Version von BERT gibt es auch nicht verwendete Token von "[unused0] bis [unused993]", sodass Sie diese auch verwenden können.
[CLS] [CATEGORY_0] Wo ist Präsident Trumps Geburtsort? [SEP] New York. [SEP]
Jigsaw Unintended Bias in der Toxizitätsklassifizierung 1. PLATZLÖSUNG usw. Angenommen, Sie lösen die Aufgabe, festzustellen, ob der obige Satz ein geeignetes Frage-Antwort-Paar ist. Frage- und Antwortprotokolle werden häufig kategorisiert, sodass Sie sie möglicherweise zur Funktionsmenge hinzufügen möchten. In diesem Fall können Sie die Genauigkeit verbessern, indem Sie neue Token "[CATEGORY_0] bis [CATEGORY_n]" definieren (n ist die Anzahl der Kategorien) und diese wie oben beschrieben in den Text integrieren.
Es ist auch effektiv, eine Kategorisierung als Unteraufgabe unter Verwendung des Vektors "[CATEGORY_0]" als Merkmalsgröße durchzuführen.
Von [So optimieren Sie BERT für die Textklassifizierung] how_to_bert. Wir wollen die Genauigkeit der Feinabstimmungsaufgabe verbessern, indem wir die vier "[CLS]" - Vektoren vom Boden der 12 Schichten kombinieren. Der Vektor wird schließlich unter Verwendung von durchschnittlichem Pooling, maximalem Pooling, Concat usw. in einen 768-dimensionalen Vektor (Tensor erster Ordnung) umgewandelt.
Identifizierung russischer Trolle auf Reddit mit Deep Learning und BERT Word Embeddings. Die Eingabe des Vektors aller Wörter in das CNN, nicht nur des Vektors von "[CLS]", ist eine der leistungsstarken Methoden. Berechnen Sie die eindimensionale Faltung für bis zu 512 Sequenzlängen wie gezeigt. Nach der Berechnung der Faltung können durch maximales Pooling oder durchschnittliches Pooling die Features mit der Anzahl der Dimensionen und der Anzahl der Filter extrahiert werden. Geben Sie sie daher in Dense ein. Im Vergleich zu Attention kann CNN die Eigenschaften der umgebenden Wörter aggregieren, sodass Sie die Genauigkeit verbessern können, indem Sie sie kombinieren. Es ist auch effektiv, mit LSTM sowie CNN zu kombinieren.
model_params = list(model.named_parameters())
#Fix BERT Gewicht
params = [p for n, p in model_params if not "bert" in n]
optimizer = AdamW(params , lr=2e-5)
#Lösen Sie die Gewichtsfixierung von BERT
params = [p for n, p in model_params if "bert" in n]
optimizer.add_param_group({'params': params })
Aus Google QUEST Q & A Labeling 19. Lösung. Ähnlich wie bei bildbasierten trainierten Modellen kann BERT die Genauigkeit verbessern, indem Gewichte festgelegt und nur aufgabenabhängige Ebenen trainiert werden. In der 19. Lösung ist nur die erste Epoche festgelegt und alle Schichten werden später gelernt. Oben haben wir den Code beschrieben, der das BERT-Gewicht festlegt und mit dem Lernen beginnt, sowie den Code, mit dem die Korrektur von der Mitte gelöst und das Lernen neu gestartet werden kann.
model_params = list(model.named_parameters())
bert_params = [p for n, p in model_params if "bert" in n]
other_params = [p for n, p in model_params if not "bert" in n]
params = [
{'params': bert_params, 'lr': params.lr},
{'params': other_params, 'lr': params.lr * 500}
]
Aus Google QUEST Q & A Labeling 1. Platz Lösung. Die Übernahme unterschiedlicher Lernraten ist genauso effektiv wie das trainierte Modell des Bildsystems. Bei der Lösung für den ersten Platz werden aufgabenspezifische Ebenen mit einer Lernrate gelernt, die 500-mal höher ist als üblich. Der Code zu diesem Zeitpunkt ist oben gezeigt.
Wir haben Techniken eingeführt, die die Genauigkeit bei BERT-Klassifizierungsaufgaben verbessern können. Ich konnte jedoch nicht zeigen, um wie viel sich die Genauigkeit verbessern würde, daher möchte ich sie mit einem geeigneten Datensatz vergleichen. Zusätzlich zu den oben aufgeführten Methoden gibt es noch weitere Methoden zur Verbesserung der Genauigkeit, daher werden wir weiter untersuchen.
Recommended Posts