
Kaum war das Rauschen ĂŒber das neuronale BERT-Netzwerk von Google zu hören, das bei einer Reihe von Konversationsaufgaben (NLP) beim maschinellen Lernen auf dem neuesten Stand der Technik war, als OpenAI eine neue Entwicklung einfĂŒhrte: GPT-2. Dieses neuronale Netzwerk mit einer Rekordzahl von Parametern im Moment (1,5 Milliarden gegenĂŒber den in solchen FĂ€llen ĂŒblicherweise verwendeten 100 bis 300 Millionen) konnte ganze Seiten mit verbundenem Text erzeugen.
Es ist so gut zu generieren, dass OpenAI sich weigerte, die Vollversion zu veröffentlichen, aus Angst, dass sie dieses neuronale Netzwerk verwenden wĂŒrden, um gefĂ€lschte Nachrichten, Kommentare und Bewertungen zu erstellen, die nicht von den echten zu unterscheiden sind.
In OpenAI wurde jedoch eine reduzierte Version des neuronalen GPT-2-Netzwerks mit 117 Millionen Parametern gemeinsam genutzt. Wir werden es ĂŒber den Google Colab-Dienst starten und damit experimentieren.
Ein kleiner Hintergrund
FĂŒr diejenigen, die die Entwicklung des Fortschritts in der natĂŒrlichen Sprachverarbeitung (NLP) nicht verfolgt haben.
Im Sommer 2018 trainierte OpenAI auf einer groĂen Textmenge ein neuronales GPT- Netzwerk, das auf der Transformer-Architektur basiert. Es stellte sich heraus, dass, wenn Sie einige der letzten Ebenen ersetzen und fĂŒr eine bestimmte Aufgabe neu trainieren (dieser Ansatz wird als Feinabstimmung bezeichnet und wird hĂ€ufig beim maschinellen Lernen verwendet), frĂŒhere DatensĂ€tze bei einer Vielzahl von Konversationsaufgaben sofort gebrochen werden.
Basierend auf dieser Entwicklung hat Google Ende 2018 ein eigenes neuronales BERT- Netzwerk erstellt. Sie haben das Ergebnis erheblich verbessert, indem sie das neuronale Netzwerk im Gegensatz zum GPT bidirektional gemacht haben.
OpenAI wollte nicht aufgeben und erhöhte im Februar 2019 seine GPT sofort um das Zehnfache und trainierte sie fĂŒr eine noch gröĂere Textmenge - auf 8 Millionen Webseiten (insgesamt 40 GB Text). Das resultierende GPT-2- Netzwerk ist derzeit das gröĂte neuronale Netzwerk mit einer beispiellosen Anzahl von Parametern von 1,5 Milliarden (BERT hatte 340 Millionen im gröĂten Modell und 110 Millionen im Standard-BERT).
Infolgedessen konnte GPT-2 ganze Seiten mit zusammenhÀngendem Text erzeugen. Mit wiederholten Verweisen auf die Namen der Charaktere im Verlauf der ErzÀhlung, Zitaten, Verweisen auf verwandte Ereignisse und so weiter. Ich werde hier keine Beispiele nennen, sondern diejenigen verweisen, die auf den Originalartikel im OpenAI-Blog: Bessere Sprachmodelle und ihre Auswirkungen oder die Links am Ende des Artikels verweisen möchten.
Das Generieren eines zusammenhĂ€ngenden Textes dieser QualitĂ€t ist an sich schon beeindruckend, aber das Interessanteste ist anders. GPT-2 ohne zusĂ€tzliches Training zeigte sofort Ergebnisse auf dem neuesten Stand der Technik bei einer Reihe von Konversationsaufgaben. Ich wiederhole, wer die Wichtigkeit des Augenblicks verpasst hat - ohne zusĂ€tzliches Training fĂŒr eine bestimmte Aufgabe!
Wie haben sie das erreicht? Einfach den neuronalen Netzen die richtigen Fragen stellen.
GPT-2-Architektur
GPT-2 ist darauf trainiert, das nĂ€chste Wort in einem Satz vorherzusagen. Dies ist ein klassischer Ansatz zum Generieren von Text. ZunĂ€chst hatten Wiederholungsnetzwerke (RNN), insbesondere LSTM, in diesem Bereich Vorrang. Nach der Erfindung der Transformer- Architektur im Sommer 2017 setzte sie sich jedoch allmĂ€hlich in Konversationsaufgaben durch. Obwohl der ursprĂŒngliche Transformer Probleme beim Speichern langer Sequenzen hat (LSTMs erinnern sich an lĂ€ngere), haben die Trainingsgeschwindigkeit und die Tiefe des Netzwerks dies mehr als ausgeglichen. Ăbrigens sind bereits einige Modifikationen des Transformators erschienen - mit der EinfĂŒhrung der Wiederholung ( Universal Transformers ), einer Modifikation fĂŒr lĂ€ngere Sequenzen ( Transformer-XL ) und anderen, aber bisher wird in Google und OpenAI nur ein leicht abgestimmter Originaltransformator verwendet.
Ich erinnere mich, dass BERT von Google etwas anders gelernt hat: nicht das nĂ€chste Wort in einem Satz vorherzusagen, sondern fehlende (maskierte) Wörter in einem Satz. Und auch um festzustellen, ob zwei aufeinanderfolgende SĂ€tze eine logische Fortsetzung voneinander sind oder ob sie in keiner Weise durch Bedeutung verbunden sind. Dies ermöglichte es BERT, ein Sprachmodell zu sein, das die Bedeutung von Wörtern in AbhĂ€ngigkeit von ihrer Umgebung (Kontext) versteht. Was den Erfolg von BERT bei NPL-Aufgaben bestimmte. Aber erst nach einer Umschulung (Feinabstimmung) fĂŒr eine bestimmte Aufgabe. Nur Wörter im Basismodell vorherzusagen, funktioniert darin nicht sehr gut. Sie können mit BERT in Ihrem Browser (ĂŒber Google Colab) spielen: https://habr.com/en/post/436878 .
GPT-2 ist fĂŒr die Umschulung nicht erforderlich. Dies ist nicht nur ein Sprachmodell wie BERT, sondern ein Textgenerator. Geben Sie ihr einfach den Anfang des Satzes, und dann wird sie ihr Wort fĂŒr Wort ergĂ€nzen.
Ein interessantes Detail: OpenAI-Untersuchungen haben gezeigt, dass Arrays von Wikipedia-Texten und literarischen BĂŒchern (die insbesondere von BERT untersucht wurden) einen voreingenommenen Stil haben. Daher erzeugen nur auf sie trainierte neuronale Netze keinen sehr guten Text. Um die Eingabedaten und -stile zu diversifizieren, verwendete OpenAI GPT-2 fĂŒr Schulungen auf regulĂ€ren Webseiten, die von 8 Millionen Websites (insgesamt 40 GB Text) gesammelt wurden. Und um Werbe- und Spammer-Websites zu verwerfen, haben sie in die Beispiel-Websites aufgenommen, deren Links im reddit eine gute Bewertung haben. Das heiĂt, Websites, bei denen Live-Benutzer nĂŒtzliche Informationen gefunden haben.
Die richtige Frage enthÀlt die halbe Antwort.
So konnte GPT-2 dank seiner beispiellosen GröĂe Seiten mit zusammenhĂ€ngendem Text generieren. Aber das Erstaunlichste ist, dass sie durch das Stellen der richtigen Frage (d. H. Des richtigen Anfangs einer Phrase) verschiedene Fragen beantworten konnte! Nur weil die Fortsetzung eines solchen Anfangs am natĂŒrlichsten ist.
Um beispielsweise eine Antwort auf die Frage âWas ist die Erde?â Zu erhalten, können Sie auf die Eingabe dieses neuronalen Netzwerks den Anfang des Satzes anwenden: âErde ist ...â. Und sie wird diesen Satz bis zum Ende vervollstĂ€ndigen. Weil die Antwort eine natĂŒrliche Fortsetzung dieses Anfangs sein wird.
Wenn Sie den Satzanfang richtig bilden, können Sie auĂerdem ErklĂ€rungen fĂŒr verschiedene Zielgruppen erhalten, die deren Intelligenz, Alter und Bildung berĂŒcksichtigen. Stellen Sie sich fortgesetzte SĂ€tze vor: "Ich als Wissenschaftler glaube, dass die Erde ... ist." Oder: "Ich als LandpflĂŒger behaupte, die Erde sei ...". Oder: "Ich als Lehrerin in einem Kindergarten werde Ihnen jetzt erklĂ€ren, Kinder, dass die Erde ...".
Wie Sie sehen können, können Sie durch Bilden der richtigen Fragen (am richtigen Anfang des Satzes) Antworten auf völlig unterschiedlichen Ebenen und mit unterschiedlichen Details erhalten. In gewisser Weise passiert etwas Ăhnliches bei Menschen. Der Arzt muss dem Patienten den Krankheitsverlauf erklĂ€ren, damit er versteht. Auf Patientenebene. Wenn Sie ein fĂŒnfjĂ€hriges Kind fragen, warum es das getan hat, kann es nicht sofort antworten (was natĂŒrlich bedeutet, dass Kinder mit GefĂŒhlen und Emotionen leben). Aber um die Antwort zu geben, die von ihm erwartet wird, beginnt das Kind, sie zu erfinden - um Text zu generieren. Basierend auf der Tatsache, dass die Antwort zum Elternteil passt und zumindest irgendwie dem entspricht, was passiert ist. Wie viele Eltern wissen, werden dies zunĂ€chst lĂ€cherliche Antworten sein. Aber durch Ermutigung und Bestrafung ("ErzĂ€hl mir mehr", "finde keine Ausreden") lernt das Kind, detaillierte und vollstĂ€ndige Antworten zu geben.
Diese Entwicklung von OpenAI und die FĂ€higkeit des GPT-2-Netzwerks, Antworten auf Konversationsaufgaben ohne spezielle zusĂ€tzliche Schulung fĂŒr eine bestimmte Aufgabe bereitzustellen, werfen zwei interessante Fragen auf:
1) Kann die Interpretierbarkeit neuronaler Netze durch einen solchen elementaren Textgenerator und den korrekten Beginn einer Phrase erreicht werden? Wo die Antwort eine natĂŒrliche Erweiterung sein wird. Angenommen, ein neuronales Netzwerk zeigt beispielsweise Siegel in einem Foto nicht durch die x-y-Koordinatennummern an, sondern erklĂ€rt seine Position im Klartext. Wenn Sie ihr dann im Verlauf der KlĂ€rung die richtige Frage stellen, zum Beispiel: "Ich bin zu diesem Schluss gekommen, weil ...", können Sie theoretisch erklĂ€ren, wie sie die Katze auf dem Foto gefunden hat. Und diese ErklĂ€rung kann im Extremfall nicht schlechter sein als menschlich. Dies löst das globale Problem der Interpretierbarkeit neuronaler Netze.
2) Kann ein vorab trainiertes neuronales Netzwerk fĂŒr groĂe Textmengen universell sein, einen gesunden Menschenverstand haben und keine zusĂ€tzliche Schulung fĂŒr bestimmte Aufgaben erfordern? Dies bedeutet, dass das neuronale Netzwerk beim Versuch, die menschliche Sprache nachzuahmen (menschliche Antworten auf Fragen), zwangslĂ€ufig den gesunden Menschenverstand lernen muss, um diese den menschlichen Antworten sehr Ă€hnlich zu geben. Einsilbige fiktive Antworten zu geben, ist im Allgemeinen nicht typisch fĂŒr Menschen. Zum gröĂten Teil geben die Menschen detaillierte und angemessene Antworten, was bedeutet, dass das Netzwerk lernen muss, dasselbe zu tun.
Beide Fragen bleiben offen, aber der erste Schritt in ihrer Zustimmung ist definitiv getan.
Und genauer?
Wenn Sie jetzt stehen, ist es besser, sich zu setzen. Denn so hat OpenAI, das das neuronale GPT-2-Netzwerk verwendet, seine Ergebnisse bei Konversationsaufgaben fĂŒr verschiedene DomĂ€nen erzielt:
Antworten auf Fragen zum Text
Das ist einfach. Oder fĂŒtterte das Netzwerk mit ein paar AbsĂ€tzen mit einer Beschreibung, die irgendwo in der Mitte stand, zum Beispiel "Der Apfel liegt auf dem Tisch", und am Ende wurde zugeschrieben: "Der Apfel ist auf ..." und das Netzwerk wurde der "Tabelle" hinzugefĂŒgt. Weil es sich an den Kontext mehrerer AbsĂ€tze erinnern kann.
Oder fĂŒtterte das Netzwerk als ersten Satz mit einigen Beispielen vom Typ âFrage: eine Frage, Antwort: eine Antwortâ und am Ende nach der eigentlichen Frage fĂŒgten sie hinzu: âAntwort:â. Und das neuronale Netzwerk hat die Antwort angehĂ€ngt! Da es die Struktur des Dokuments auf der vorherigen Frage-Antwort enthĂŒllte. Das ist erstaunlich.
Kurzfassung (Zusammenfassung) des Textes
Die Eingabe ist ein langer Text aus mehreren AbsĂ€tzen oder sogar Seiten, und das neuronale Netzwerk sollte einen kurzen Inhalt schreiben. Wie haben Sie dieses Verhalten von GPT-2 erhalten? Kurz nach dem Text fĂŒgten sie "TL; DR" hinzu. Und alle! Dies erwies sich als ausreichend fĂŒr das GPT-2, um nach diesen Zeichen eine Zusammenfassung des Artikels hinzuzufĂŒgen! Weil solche Symbole im Internet hĂ€ufig die Zusammenfassung des Beitrags bezeichnen.
TextĂŒbersetzung
Die GPT-2-Eingabe erhielt den Text in der Form: "Hallo = Hallo, Hund = Hund, Wind = Wind, Katze = ...". Und das neuronale Netz fĂŒgte die Ăbersetzung des letzten Wortes hinzu: "Katze" (im Original auf Französisch). Weil es die Struktur des Dokuments enthĂŒllte und es einfach mit der logischsten Fortsetzung ergĂ€nzte. Wenn dein Kiefer immer noch nicht von all dem abgefallen ist, dann habe ich zwei Neuigkeiten fĂŒr dich und beide sind schlecht =).
GPT-2-Start ĂŒber Google Colab
Leider wurde die Freigabe der Vollversion von GPT-2 in OpenAI verweigert. Dies wird durch die Tatsache motiviert, dass es mit diesem neuronalen Netzwerk zu einfach ist, gefĂ€lschte Nachrichten und Bewertungen in GeschĂ€ften zu generieren. Nach ihrer Aussage wird die Diskussion ĂŒber die Angemessenheit der Auslegung dieses Modells fĂŒr die nĂ€chsten 6 Monate fortgesetzt. Nach der OpenAI werden sie entscheiden, ob sie es hochladen oder nicht. FĂŒr eine groĂe Organisation ist es jedoch nicht schwierig, das Modell zu wiederholen (es scheint, dass sie es mehrere Tage lang fĂŒr 256 TPU trainiert haben und nach vorlĂ€ufigen SchĂ€tzungen etwa 45.000 US-Dollar gekostet haben).
Sie veröffentlichten jedoch eine reduzierte Version von GPT-2 mit 117 Millionen Parametern (anstatt 1,5 Milliarden, wie im Vollmodell): https://github.com/openai/gpt-2 . Lassen Sie uns versuchen, es auszufĂŒhren und mit diesem Modell zu spielen.
Update 9. November 2019: Endlich wurde die gesamte Modellreihe einschlieĂlich 1,5 Milliarden angelegt. Die Dateien und Anweisungen fĂŒr den Start wurden aktualisiert.
Der einfachste Weg, dies zu tun, ist ĂŒber Google Colab:
- Ăffnen Sie den Link
http://colab.research.google.com/github/blade1780/bert/blob/master/Gpt-2.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. Geben Sie nach dem Erscheinen von "Model prompt >>>" Text ein und drĂŒcken Sie die Eingabetaste.
Achten Sie ganz am Anfang auf die Zeile:
model_name = '117M'
Hier können Sie die GröĂe des zu verwendenden GPT-2-Modells angeben. Folgende Modelle sind verfĂŒgbar (vorbehaltlich Aktualisierungen):
117M
124M
355M
774M
1558M
Hier ist 117M das kleinste Modell, das zum Zeitpunkt dieses Schreibens das einzige verfĂŒgbare war. OpenAI legte spĂ€ter immer mehr Modelle vor, bis zum 5. November 2019 das Maximum von 1558 Millionen (mit 1,5 Milliarden Parametern).
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.
Oder erstellen Sie den gesamten Code manuell:
- Gehen Sie zu https://colab.research.google.com
- DrĂŒcken Sie die blaue Taste NEW PYTHON 3 NOTEBOOK
- WĂ€hlen Sie im MenĂŒ Laufzeit -> Laufzeittyp Ă€ndern die Option Python 3 und die GPU aus (letztere, um das neuronale Netzwerk auf der GPU auszufĂŒhren).
- Geben Sie in die erste Zelle Folgendes ein:
model_name = '117M' !git clone https://github.com/openai/gpt-2 %cd gpt-2 !pip3 install -r requirements.txt !python3 download_model.py $model_name
Anstelle von 117M (dem kleinsten) können Sie ein beliebiges Zwischen- oder gröĂtes Modell angeben: 1558M.
Klicken Sie auf das schwarze Wiedergabesymbol links neben der Zelle. Dadurch wird das ausgewÀhlte neuronale GPT-2-Netzwerk heruntergeladen und die erforderlichen AbhÀngigkeiten installiert.
In der zweiten Zelle (Sie können sie ĂŒber das MenĂŒ EinfĂŒgen -> Codezelle oder durch Bewegen der Maus unter der Mitte der aktuellen Zelle hinzufĂŒgen, werden die SchaltflĂ€chen zum HinzufĂŒgen angezeigt):
!python3 src/interactive_conditional_samples.py --model_name=$model_name
Dadurch wird der interaktive Modus gestartet. Warten Sie, bis das neuronale Netzwerk hochgefahren ist und ein Fenster zur Texteingabe mit der Aufschrift âModellmodell >>>â angezeigt wird. Geben Sie den Anfang der Phrase ein und drĂŒcken Sie die Eingabetaste. Nach einer Weile wird der generierte Text unter der Ăberschrift BEISPIEL angezeigt.
Sie können auch den Modus zum Generieren von vollstÀndig zufÀlligem Text starten. Der Text wird endlos in kleinen Teilen von BEISPIEL 1, BEISPIEL 2 usw. generiert, bis Sie auf die SchaltflÀche Stopp in der Zelle klicken. Erstellen Sie dazu eine neue Zelle mit dem Code:
!python3 src/generate_unconditional_samples.py --model_name=$model_name | tee samples.txt
Das Ergebnis wird in der Datei samples.txt gespeichert. Es kann mit den folgenden Befehlen heruntergeladen werden (erstellen Sie erneut eine neue Zelle und fĂŒhren Sie sie nach dem Generieren des Textes aus):
from google.colab import files files.download('samples.txt')
Sie können die Parameter zum Generieren von Text Àndern (Zufallskoeffizient usw., siehe Beschreibung in der Originalarbeit ):
!python3 src/generate_unconditional_samples.py --model_name=$model_name --top_k 40 --temperature 0.7 | tee samples.txt
Da es sich bei dem 117M um ein stark reduziertes Modell handelt, sollten Sie keine Wunder erwarten (Update: Zum Zeitpunkt dieses Schreibens war nur dieses verfĂŒgbar. Jetzt ist alles verfĂŒgbar, einschlieĂlich des ursprĂŒnglich gröĂten 1558M, siehe oben). Die meisten der generierten Samples sind Unsinn. Es gibt aber auch sinnvolle Abschnitte. Der Text sollte in Englisch sein, wĂ€hrend GPT-2 in anderen Sprachen noch nicht funktionieren kann.
Beispiele fĂŒr generierten Text
Beispiele fĂŒr den vom vollstĂ€ndigen Modell generierten Text: https://blog.openai.com/better-language-models/#sample1 (oben in der Leiste fĂŒr 8 Geschichten).
Es gibt auch eine riesige 2,4-MB-Textdatei mit zufÀllig generierten Beispielen: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-samples.txt
Und noch eine, 2,27 MB, mit anderen Zufallseinstellungen: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-topk40-samples.txt
Referenzen