BERT ist ein hochmodernes Sprachmodell für 104 Sprachen. Tutorial zum lokalen Starten von BERT und in Google Colab

Bild


BERT ist ein neuronales Netzwerk von Google, das bei einer Reihe von Aufgaben mit großem Abstand die neuesten Ergebnisse zeigte. Mit BERT können Sie KI-Programme zur Verarbeitung einer natürlichen Sprache erstellen: Beantworten Sie Fragen in beliebiger Form, erstellen Sie Chat-Bots, automatische Übersetzer, analysieren Sie Text usw.


Google hat vorab geschulte BERT-Modelle veröffentlicht, aber wie es normalerweise beim maschinellen Lernen der Fall ist, leiden sie unter einem Mangel an Dokumentation. In diesem Tutorial erfahren Sie daher, wie Sie das neuronale BERT-Netzwerk auf dem lokalen Computer sowie auf der GPU des kostenlosen Servers in Google Colab ausführen.


Warum ist es überhaupt notwendig?


Um Text an die Eingabe eines neuronalen Netzwerks zu senden, müssen Sie ihn irgendwie in Form von Zahlen darstellen. Es ist am einfachsten, dies Buchstabe für Buchstabe zu tun und einen Buchstaben auf jeden Eingang des neuronalen Netzwerks anzuwenden. Dann wird jeder Buchstabe mit einer Zahl von 0 bis 32 (plus einer Art Rand für Satzzeichen) codiert. Dies ist die sogenannte Zeichenebene.


Viel bessere Ergebnisse werden jedoch erzielt, wenn wir Vorschläge nicht mit einem Buchstaben präsentieren, sondern indem wir jedem Eingang des neuronalen Netzes sofort ein ganzes Wort (oder zumindest Silben) übermitteln. Es wird bereits eine Wortebene sein. Am einfachsten ist es, ein Wörterbuch mit allen vorhandenen Wörtern zu kompilieren und dem Netzwerk die Anzahl der Wörter in diesem Wörterbuch mitzuteilen. Befindet sich beispielsweise das Wort "Hund" 1678 in diesem Wörterbuch, geben wir die Nummer 1678 für die Eingabe des neuronalen Netzwerks für dieses Wort ein.


Aber nur in einer natürlichen Sprache mit dem Wort „Hund“ tauchen in einer Person viele Assoziationen gleichzeitig auf: „flauschig“, „böse“, „Freund einer Person“. Ist es möglich, dieses Merkmal unseres Denkens in der Präsentation für das neuronale Netzwerk irgendwie zu kodieren? Es stellt sich heraus, dass Sie können. Dazu reicht es aus, die Wortnummern neu anzuordnen, damit die bedeutungsnahen Wörter nebeneinander stehen. Sei es zum Beispiel für "Hund" die Nummer 1678 und für das Wort "flauschig" die Nummer 1680. Und für das Wort "Teekanne" ist die Nummer 9000. Wie Sie sehen können, sind die Nummern 1678 und 1680 viel näher beieinander als die Nummer 9000.


In der Praxis wird jedem Wort nicht eine, sondern mehrere Zahlen zugewiesen - beispielsweise ein Vektor mit 32 Zahlen. Die Abstände werden als Abstände zwischen den Punkten gemessen, auf die diese Vektoren im Raum der entsprechenden Dimension zeigen (für einen 32-stelligen Vektor ist dies ein Raum mit 32 Dimensionen oder mit 32 Achsen). Auf diese Weise können Sie ein Wort gleichzeitig mit mehreren Wörtern vergleichen, deren Bedeutung nahe beieinander liegt (abhängig davon, welche Achse gezählt werden soll). Darüber hinaus können arithmetische Operationen mit Vektoren durchgeführt werden. Ein klassisches Beispiel: Wenn Sie den Vektor „Mann“ von dem Vektor subtrahieren, der das Wort „König“ bezeichnet, und den Vektor für das Wort „Frau“ hinzufügen, erhalten Sie einen bestimmten Ergebnisvektor. Und er wird auf wundersame Weise dem Wort "Königin" entsprechen. Und in der Tat: "König ist Mann + Frau = Königin." Die Magie! Und dies ist kein abstraktes Beispiel, aber es passiert wirklich . In Anbetracht der Tatsache, dass neuronale Netze für mathematische Transformationen über ihre Eingaben gut geeignet sind, bietet dies anscheinend eine so hohe Effizienz dieser Methode.


Dieser Ansatz wird als Einbettung bezeichnet. Alle maschinellen Lernpakete (TensorFlow, PyTorch) ermöglichen es der ersten Schicht des neuronalen Netzwerks, eine spezielle Schicht der Einbettungsschicht zu erstellen, die dies automatisch ausführt. Das heißt, am Eingang des neuronalen Netzwerks geben wir die übliche Wortnummer im Wörterbuch ein, und die selbstlernende Einbettungsschicht übersetzt jedes Wort in einen Vektor der angegebenen Länge, beispielsweise 32 Zahlen.


Sie erkannten jedoch schnell, dass es viel rentabler ist, eine solche Vektordarstellung von Wörtern auf einem riesigen Textkorpus, beispielsweise in der gesamten Wikipedia, vorab zu trainieren und vorgefertigte Wortvektoren in bestimmten neuronalen Netzen zu verwenden, anstatt sie jedes Mal neu zu trainieren.


Es gibt verschiedene Möglichkeiten, Wörter als Vektoren darzustellen, die sich allmählich weiterentwickelten: word2vec, GloVe, Elmo.


Im Sommer 2018 stellte OpenAI fest, dass ein neuronales Netzwerk, das die Transformer- Architektur mit großen Textmengen vorab trainiert, unerwartet und mit großem Abstand hervorragende Ergebnisse bei vielen verschiedenen Arten von Aufgaben zur Verarbeitung natürlicher Sprache zeigt. Tatsächlich erzeugt ein solches neuronales Netzwerk an seiner Ausgabe Vektordarstellungen für Wörter und sogar ganze Phrasen. Und indem Sie einen kleinen Block aus zwei zusätzlichen Schichten von Neuronen auf ein solches Sprachmodell hängen, können Sie dieses neuronale Netzwerk für alle Aufgaben trainieren.


BERT von Google ist ein erweitertes GPA-Netzwerk von OpenAI (bidirektional statt unidirektional usw.), das ebenfalls auf der Transformer-Architektur basiert. Derzeit ist BERT bei fast allen gängigen NLP-Benchmarks auf dem neuesten Stand der Technik.


Wie haben sie das gemacht?


Die Idee hinter BERT ist sehr einfach: Lassen Sie uns das neuronale Netzwerk mit Phrasen versorgen, in denen wir 15% der Wörter durch [MASK] ersetzen und das neuronale Netzwerk trainieren, um diese maskierten Wörter vorherzusagen.


Wenn wir beispielsweise den Satz "Ich bin zu [MASK] gekommen und habe [MASK] gekauft" an den Eingang des neuronalen Netzwerks senden, sollten am Ausgang die Wörter "speichern" und "Milch" angezeigt werden. Dies ist ein vereinfachtes Beispiel von der offiziellen BERT-Seite: Bei längeren Sätzen wird der Bereich möglicher Optionen kleiner und die Reaktion des neuronalen Netzwerks ist eindeutig.


Und damit das neuronale Netzwerk lernen kann, die Beziehung zwischen verschiedenen Sätzen zu verstehen, werden wir es zusätzlich trainieren, um vorherzusagen, ob die zweite Phrase eine logische Fortsetzung der ersten ist. Oder ist es eine zufällige Phrase, die nichts mit der ersten zu tun hat?


Also für zwei Sätze: "Ich ging in den Laden." und "Und dort Milch gekauft.", sollte das neuronale Netzwerk antworten, dass dies logisch ist. Und wenn der zweite Satz "Crucian Sky Pluto" ist, dann muss ich antworten, dass dieser Vorschlag nichts mit dem ersten zu tun hat. Wir werden unten mit diesen beiden BERT-Modi herumspielen.


Nachdem wir das neuronale Netzwerk 4 Tage lang mit 16 TPU auf dem Korpus von Texten aus Wikipedia und der Büchersammlung BookCorpus trainiert hatten, erhielten wir BERT.


Installation und Einrichtung


Hinweis : In diesem Abschnitt werden wir BERT auf dem lokalen Computer starten und damit spielen. Um dieses neuronale Netzwerk auf einer lokalen GPU auszuführen, benötigen Sie eine NVidia GTX 970 mit 4 GB Videospeicher oder höher. Wenn Sie BERT nur in einem Browser ausführen möchten (dafür benötigen Sie nicht einmal eine GPU auf Ihrem Computer), gehen Sie zum Abschnitt "Google Colab".


Installieren Sie zuerst TensorFlow, falls Sie es noch nicht haben. Befolgen Sie dazu die Anweisungen unter https://www.tensorflow.org/install . Um die GPU zu unterstützen, müssen Sie zuerst das CUDA Toolkit 9.0, dann das cuDNN SDK 7.2 und erst dann TensorFlow mit GPU-Unterstützung installieren:


pip install tensorflow-gpu 

Grundsätzlich reicht dies aus, um BERT auszuführen. Es gibt jedoch keine Anweisung als solche. Sie können sie selbst erstellen, indem Sie die Quellen in der Datei run_classifier.py sortieren (die übliche Situation beim maschinellen Lernen besteht darin, dass Sie anstelle der Dokumentation in die Quellen gehen müssen). Wir werden es jedoch einfacher machen und die Keras BERT- Shell verwenden (sie kann auch zur späteren Feinabstimmung des Netzwerks nützlich sein, da sie eine praktische Keras-Schnittstelle bietet).


Installieren Sie dazu Keras selbst:


 pip install keras 

Und nach Keras BERT:


 pip install keras-bert 

Wir benötigen auch die Datei tokenization.py aus dem ursprünglichen Github BERT. Klicken Sie entweder auf die Schaltfläche Raw und speichern Sie sie im Ordner mit dem zukünftigen Skript, oder laden Sie das gesamte Repository herunter und nehmen Sie die Datei von dort, oder nehmen Sie eine Kopie aus dem Repository mit diesem Code https://github.com/blade1780/bert .


Jetzt ist es Zeit, das vorab trainierte neuronale Netzwerk herunterzuladen. Es gibt verschiedene Optionen für BERT, die alle auf der offiziellen Seite github.com/google-research/bert aufgeführt sind. Wir werden die universelle mehrsprachige "BERT-Base, Multilingual Cased" für 104 Sprachen verwenden. Laden Sie die Datei multi_cased_L-12_H-768_A-12.zip (632 MB) herunter und entpacken Sie sie mit dem zukünftigen Skript in den Ordner.


Alles ist fertig, erstellen Sie die BERT.py-Datei, dann wird es ein bisschen Code geben.


Importieren Sie die erforderlichen Bibliotheken und legen Sie die Pfade fest


 # coding: utf-8 import sys import codecs import numpy as np from keras_bert import load_trained_model_from_checkpoint import tokenization # ,     BERT folder = 'multi_cased_L-12_H-768_A-12' config_path = folder+'/bert_config.json' checkpoint_path = folder+'/bert_model.ckpt' vocab_path = folder+'/vocab.txt' 

Da wir gewöhnliche Textzeilen in ein spezielles Format von Token übersetzen müssen, werden wir dafür ein spezielles Objekt erstellen. Achten Sie auf do_lower_case = False, da wir das Cased BERT-Modell verwenden, bei dem zwischen Groß- und Kleinschreibung unterschieden wird.


 tokenizer = tokenization.FullTokenizer(vocab_file=vocab_path, do_lower_case=False) 

Modell laden


 model = load_trained_model_from_checkpoint(config_path, checkpoint_path, training=True) model.summary() 

BERT kann in zwei Modi arbeiten: Erraten der in der Phrase fehlenden Wörter oder Erraten, ob die zweite Phrase nach der ersten logisch ist. Wir werden beide Optionen ausführen.


Für den ersten Modus müssen Sie eine Phrase im folgenden Format einreichen:


 [CLS]    [MASK]   [MASK]. [SEP] 

Das neuronale Netzwerk sollte einen vollständigen Satz mit den Worten anstelle der Masken zurückgeben: "Ich bin in den Laden gekommen und habe Milch gekauft."


Für den zweiten Modus müssen beide durch ein Trennzeichen getrennten Phrasen dem Eingang des neuronalen Netzwerks zugeführt werden:


 [CLS]    . [SEP]   . [SEP] 

Das neuronale Netzwerk muss antworten, ob die zweite Phrase eine logische Fortsetzung der ersten ist. Oder ist es eine zufällige Phrase, die nichts mit der ersten zu tun hat?


Damit BERT funktioniert, müssen Sie drei Vektoren mit einer Länge von jeweils 512 Zahlen vorbereiten: token_input, seg_input und mask_input.


Token_input speichert unseren Quellcode, der mit dem Tokenizer in Token übersetzt wurde. Die Phrase in Form von Indizes im Wörterbuch befindet sich am Anfang dieses Vektors, und der Rest wird mit Nullen gefüllt.


In mask_input müssen wir 1 für alle Positionen setzen, an denen sich die [MASK] -Maske befindet, und den Rest mit Nullen füllen.


In seg_input müssen wir die erste Phrase (einschließlich des Start-CLS- und SEP-Trennzeichens) als 0, die zweite Phrase (einschließlich der End-SEP) als 1 bezeichnen und den Rest bis zum Ende des Vektors mit Nullen füllen.


BERT verwendet kein Wörterbuch ganzer Wörter, sondern der häufigsten Silben. Obwohl es auch ganze Wörter hat. Sie können die Datei vocab.txt im heruntergeladenen neuronalen Netzwerk öffnen und sehen, welche Wörter das neuronale Netzwerk an seiner Eingabe verwendet. Es gibt ganze Wörter wie Frankreich. Aber die meisten russischen Wörter müssen in Silben zerlegt werden. Das Wort "kam" sollte also in "mit" und "## ging" unterteilt werden. Um die Konvertierung regulärer Textzeilen in das von BERT geforderte Format zu erleichtern, verwenden wir das Modul tokenization.py.


Modus 1: Vorhersage von Wörtern, die durch Token [MASK] in einer Phrase geschlossen wurden


Die Eingabephrase, die dem Eingang des neuronalen Netzwerks zugeführt wird


 sentence = '   [MASK]   [MASK].' print(sentence) 

Konvertiere es in Token. Das Problem ist, dass der Tokenizer keine Dienstmarken wie [CLS] und [MASK] verarbeiten kann, obwohl vocab.txt sie im Wörterbuch enthält. Daher müssen wir unsere Linie manuell mit [MASK] -Markierungen unterbrechen und Klartextstücke auswählen, um sie mithilfe des Tokenizers in BERT-Token zu konvertieren. Fügen Sie außerdem [CLS] am Anfang und [SEP] am Ende der Phrase hinzu.


 sentence = sentence.replace(' [MASK] ','[MASK]'); sentence = sentence.replace('[MASK] ','[MASK]'); sentence = sentence.replace(' [MASK]','[MASK]') #    sentence = sentence.split('[MASK]') #     tokens = ['[CLS]'] #      [CLS] #        tokenizer.tokenize(),    [MASK] for i in range(len(sentence)): if i == 0: tokens = tokens + tokenizer.tokenize(sentence[i]) else: tokens = tokens + ['[MASK]'] + tokenizer.tokenize(sentence[i]) tokens = tokens + ['[SEP]'] #      [SEP] 

Token verfügen jetzt über Token, die garantiert in Indizes im Wörterbuch konvertiert werden. Lass es uns tun:


 token_input = tokenizer.convert_tokens_to_ids(tokens) 

Jetzt gibt es in token_input eine Reihe von Zahlen (Wortnummern im Vokabular "vocab.txt"), die dem Eingang des neuronalen Netzwerks zugeführt werden müssen. Es bleibt nur, diesen Vektor auf eine Länge von 512 Elementen zu erweitern. Das Python-Konstrukt [0] * length erstellt ein Array mit Längenlängen, das mit Nullen gefüllt ist. Fügen Sie es einfach unseren Token hinzu, die in Python zwei Arrays zu einem kombinieren.


 token_input = token_input + [0] * (512 - len(token_input)) 

Erstellen Sie nun eine Maskenmaske mit einer Länge von 512, setzen Sie überall 1, wobei die Zahl 103 in Token erscheint (was der Markierung [MASK] im Vokabular "vocab.txt" entspricht), und füllen Sie den Rest mit 0:


 mask_input = [0]*512 for i in range(len(mask_input)): if token_input[i] == 103: mask_input[i] = 1 

Für den ersten BERT-Betriebsmodus muss seg_input vollständig mit Nullen gefüllt sein:


 seg_input = [0]*512 

Im letzten Schritt müssen Sie Python-Arrays in Numpy-Arrays mit der Form (1.512) konvertieren, für die wir sie in ein Subarray [] einfügen:


 token_input = np.asarray([token_input]) mask_input = np.asarray([mask_input]) seg_input = np.asarray([seg_input]) 

OK, fertig. Führen Sie nun die Vorhersage des neuronalen Netzwerks aus!


 predicts = model.predict([token_input, seg_input, mask_input])[0] predicts = np.argmax(predicts, axis=-1) predicts = predicts[0][:len(tokens)] #   ,    ,        

Formatieren Sie nun das Ergebnis von Token zurück in eine durch Leerzeichen getrennte Zeichenfolge


 out = [] #   out     [MASK],    1  mask_input for i in range(len(mask_input[0])): if mask_input[0][i] == 1: # [0][i], ..   batch   (1,512),       out.append(predicts[i]) out = tokenizer.convert_ids_to_tokens(out) #     out = ' '.join(out) #       out = tokenization.printable_text(out) #    out = out.replace(' ##','') #   : " ##" -> "" 

Und geben Sie das Ergebnis aus:


 print('Result:', out) 

In unserem Beispiel für den Satz "Ich bin zu [MASK] gekommen und habe [MASK] gekauft." Das neuronale Netz erzeugte das Ergebnis "Haus" und "es": "Ich kam zum Haus und kaufte es." Zum ersten Mal nicht so schlimm. Ein Haus zu kaufen ist definitiv besser als Milch.


Andere Beispiele (ich gebe keine erfolglosen an, es gibt viel mehr als erfolgreiche. In den meisten Fällen gibt das Netzwerk eine leere Antwort):

Die Erde ist die dritte [MASKE] von der Sonne
Ergebnis: Stern


bestes Sandwich [MASKE] mit Butter
Ergebnis: Erfüllt


Nach [MASKE] soll das Mittagessen schlafen
Ergebnis: davon


Geh weg von [MASKE]
Ergebnis: ## oh - ist das eine Art Fluch? )


[MASKE] von der Tür
Ergebnis: Ansicht


Mit [MASKE] können Hammer und Nägel Schrank machen
Ergebnis: Hilfe


Und wenn morgen nicht ist? Heute ist es zum Beispiel nicht [MASKE]!
Ergebnis: wird sein


Wie können Sie es leid werden, [MASKE] zu ignorieren?
Ergebnis: sie


Es gibt alltägliche Logik, es gibt weibliche Logik, aber über die männliche [MASKE] ist nichts bekannt.
Ergebnis: Philosophie


Bei Frauen wird im Alter von 30 Jahren ein Bild des Prinzen gebildet, das zu jeder [MASKE] passt.
Ergebnis: Mann


Mit einer Mehrheit stimmten Schneewittchen und die sieben Zwerge mit einer Gegenstimme für [MASKE].
Ergebnis: Dorf - der erste Buchstabe ist korrekt


Bewerten Sie Ihre Langeweile auf einer 10-Punkte-Skala: [MASKE] Punkte
Ergebnis: 10


Deine [MASKE], [MASKE] und [MASKE]!
Ergebnis: Lieb mich, ich - nein, BERT, ich habe es überhaupt nicht so gemeint


Sie können englische Phrasen eingeben (und jede in 104 Sprachen, von denen eine Liste hier ist )


[MASKE] muss weitergehen!
Ergebnis: I.


Modus 2: Überprüfen der Konsistenz von zwei Phrasen


Wir setzen zwei aufeinanderfolgende Phrasen, die dem Eingang des neuronalen Netzwerks zugeführt werden


 sentence_1 = '   .' sentence_2 = '  .' print(sentence_1, '->', sentence_2) 

Wir werden Token im Format [CLS] Phrase_1 [SEP] Phrase_2 [SEP] erstellen und mit dem Tokenizer einfachen Text in Token konvertieren:


 tokens_sen_1 = tokenizer.tokenize(sentence_1) tokens_sen_2 = tokenizer.tokenize(sentence_2) tokens = ['[CLS]'] + tokens_sen_1 + ['[SEP]'] + tokens_sen_2 + ['[SEP]'] 

Wir konvertieren String-Token in numerische Indizes (Wortnummern im Vokabular "vocab.txt") und erweitern den Vektor auf 512:


 token_input = tokenizer.convert_tokens_to_ids(tokens) token_input = token_input + [0] * (512 - len(token_input)) 

Die Wortmaske ist in diesem Fall vollständig mit Nullen gefüllt


 mask_input = [0] * 512 

Die Vorschlagsmaske sollte jedoch unter der zweiten Phrase (einschließlich der endgültigen SEP) mit Einheiten und alles andere mit Nullen ausgefüllt werden:


 seg_input = [0]*512 len_1 = len(tokens_sen_1) + 2 #   , +2 -   CLS   SEP for i in range(len(tokens_sen_2)+1): # +1, ..   SEP seg_input[len_1 + i] = 1 #   ,   SEP,  #   numpy   (1,) -> (1,512) token_input = np.asarray([token_input]) mask_input = np.asarray([mask_input]) seg_input = np.asarray([seg_input]) 

Wir leiten die Phrasen durch das neuronale Netzwerk (diesmal ist das Ergebnis in [1] und nicht in [0], wie oben).


 predicts = model.predict([token_input, seg_input, mask_input])[1] 

Und wir leiten die Wahrscheinlichkeit ab, dass die zweite Phrase eine normale und keine zufällige Menge von Wörtern ist


 print('Sentence is okey:', int(round(predicts[0][0]*100)), '%') 

In zwei Sätze:


Ich kam in den Laden. -> Und kaufte Milch.


Antwort des neuronalen Netzwerks:


Satz ist ok: 99%


Und wenn der zweite Satz "Crucian Sky Pluto" lautet, lautet die Antwort:


Satz ist ok: 4%


Google Colab


Google bietet eine kostenlose Tesla K80-Server-GPU mit 12 GB Videospeicher an (TPUs sind jetzt verfügbar, ihre Konfiguration ist jedoch etwas komplizierter). Der gesamte Code für Colab sollte als Jupyter-Notizbuch konzipiert sein. Um BERT in einem Browser zu starten, öffnen Sie einfach den Link


http://colab.research.google.com/github/blade1780/bert/blob/master/BERT.ipynb


Wählen Sie im Menü Laufzeit die Option Alle ausführen aus , damit zum ersten Mal alle Zellen gestartet werden, die Modelldownloads und die erforderlichen Bibliotheken verbunden werden. Stimmen Sie zu, bei Bedarf alle Runtime zurückzusetzen.


Wenn etwas schief gelaufen ist ...

Stellen Sie sicher, dass GPU und Python 3 im Menü Laufzeit -> Laufzeittyp ändern ausgewählt sind


Wenn die Schaltfläche Verbinden nicht aktiv ist, klicken Sie darauf, um eine Verbindung herzustellen.


Ändern Sie nun die Eingabezeilen Satz , Satz_1 und Satz_2 und klicken Sie links auf das Wiedergabesymbol, um nur die aktuelle Zelle zu starten. Das Ausführen des gesamten Notebooks ist nicht mehr erforderlich.


Sie können BERT in Google Colab auch von einem Smartphone aus ausführen. Wenn es jedoch nicht geöffnet wird, müssen Sie möglicherweise das Kontrollkästchen Vollversion in Ihren Browsereinstellungen aktivieren.


Was weiter?


Um BERT für eine bestimmte Aufgabe zu trainieren, müssen Sie eine oder zwei Schichten eines einfachen Feed-Forward-Netzwerks hinzufügen und nur trainieren, ohne das Haupt-BERT-Netzwerk zu berühren. Dies kann entweder auf nacktem TensorFlow oder über die Keras BERT-Shell erfolgen. Ein solches zusätzliches Training für eine bestimmte Domäne erfolgt sehr schnell und ist der Feinabstimmung in Faltungsnetzwerken völlig ähnlich. Für die SQuAD-Aufgabe können Sie also in nur 30 Minuten ein neuronales Netzwerk auf einer TPU trainieren (verglichen mit 4 Tagen auf 16 TPU für das Training von BERT selbst).


Dazu müssen Sie untersuchen, wie die letzten Ebenen in BERT dargestellt werden, und über einen geeigneten Datensatz verfügen. Auf der offiziellen BERT-Seite https://github.com/google-research/bert finden Sie mehrere Beispiele für verschiedene Aufgaben sowie Anweisungen zum Starten der Umschulung für Cloud-TPUs. Und alles andere muss in der Quelle in den Dateien run_classifier.py und extract_features.py nachsehen .


PS


Der hier vorgestellte Code und das Jupyter-Notizbuch für Google Colab werden im Repository gehostet .


Wunder sind nicht zu erwarten. Erwarten Sie nicht, dass BERT wie eine Person spricht. Der Status des Standes der Technik bedeutet keineswegs, dass die Fortschritte in der NLP ein akzeptables Niveau erreicht haben. Es bedeutet nur, dass BERT besser ist als frühere Modelle, die noch schlechter waren. Starke Konversations-KI ist noch sehr weit weg. Darüber hinaus ist BERT in erster Linie ein Sprachmodell und kein vorgefertigter Chat-Bot. Daher werden gute Ergebnisse erst nach einer Umschulung für eine bestimmte Aufgabe angezeigt.

Source: https://habr.com/ru/post/de436878/


All Articles