GPT-3 und darüber hinaus - Teil 1: Das Grundrezept


Fabian Gringel


Is this how your basement looks like? If not, don't try to train GPT-3 on your own.

GPT-3 ist ein neuronales Netz, das in der Lage ist, eine breite Palette von Aufgaben zur Verarbeitung natürlicher Sprache (NLP) zu lösen. Es wurde im Sommer 2020 von OpenAI vorgestellt (als Weiterentwicklung der Vorgängermodelle GPT und GPT-2). Für verschiedene Aufgaben hat es neue Spitzenleistungen erbracht und wird von vielen als wesentlicher Schritt in Richtung künstliche allgemeine Intelligenz angesehen. "Allgemeine Intelligenz" bezieht sich auf die Fähigkeit, sich nicht nur in Bezug auf eine bestimmte Aufgabe intelligent zu verhalten, sondern sich auch an neue, unvorhergesehene Aufgaben anzupassen und diese zu bewältigen.

Dieser Blogartikel ist der erste einer Serie von zwei Artikeln über GPT-3. In diesem ersten Artikel werde ich erklären

  1. wie GPT-3 funktioniert,

  2. wozu es gut ist und warum manche Leute es für gefährlich halten,

  3. und wie Sie ein GPT-3-ähnliches Modell kostenlos ausprobieren können.

Der zweite Teil wird sich mit den Schwächen von GPT-3 befassen und damit, wo in Zukunft der nächste Durchbruch zu erwarten ist.


1. Wie GPT-3 funktioniert


Das Grundrezept

Das vielleicht Überraschendste an dem Ansatz, den OpenAI mit GPT, GPT-2 und jetzt GPT-3 verfolgt hat, ist, dass keine komplizierte Idee dahinter steckt. Das Rezept enthält nur drei Hauptzutaten:

  1. Man nehme ein modernes NLP-Netzwerk mit so vielen Parametern wie rechnerisch machbar (für alle GPT-Versionen wurde ein Transformer-basiertes Modell verwendet).

  2. Kuratieren Sie einen riesigen Textkorpus, z. B. bestehend aus Büchern, Wikipedia usw. (auch hier gilt: je größer, desto besser).

  3. Trainieren Sie das Modell anhand einer einfachen Sprachmodellierungsaufgabe: "Sag das nächste Wort voraus".

Ein typisches Beispiel für diese Aufgabe sieht wie folgt aus: Gegeben ist ein Text, z.B.

Die zentrale Figur ist der alternde Dubslav von Stechlin, der seit dreißig Jahren verwitwet ist und allein in seinem etwas verfallenen Herrenhaus am Ufer des Stechlinsees lebt.

wir nehmen die ersten n Wörter, z.B.

Die zentrale Figur ist der alternde Dubslav von Stechlin, seit dreißig

und trainieren das Modell, das nächste Wort ("Jahren") richtig zu erraten. (Was das Modell dabei tatsächlich lernt, ist eine bedingte Wahrscheinlichkeitsverteilung für alle möglichen nächsten Wörter, d. h. das Vokabular. Ein Modell mit dieser Fähigkeit wird Sprachmodell genannt.)

Wenn wir nun eine große Version eines sehr leistungsfähigen NLP-Modells mit einer Fülle von Trainingsdaten trainieren, können wir ziemlich sicher sein, dass das Modell die Aufgabe der Sprachmodellierung gut bewältigen wird.

Der "traditionelle" Ansatz zur Nutzung des Sprachverständnisses, das das Modell erworben hat, bestünde darin, die Modellarchitektur an die gewünschte Aufgabe anzupassen (z. B. Beantwortung von Fragen, Übersetzung, Stimmungsanalyse usw.) und eine Feinabstimmung vorzunehmen. In diesem Fall spielt die Sprachmodellierung die Rolle einer Pre-Training-Aufgabe, und da sie darin besteht, das nächste Wort zu generieren, hat OpenAI ihren Ansatz "Generative Pre-Training" genannt. Ab GPT-2 wurde jedoch ein anderer Ansatz gewählt, den ich im Folgenden beschreiben werde.

Sprachmodellierung als Multi-Task-Lernen

Gemäß der Hypothese “Language Models are Unsupervised Multitask Learners” kann man das trainierte Sprachmodell als einen gebrauchsfertigen Multitask-Löser betrachten. Die Idee dahinter ist, dass das Modell ein breites Spektrum an NLP-bezogenen Fähigkeiten erwerben muss, um gut in der Sprachmodellierungsaufgabe zu werden.

Wenn der Textkorpus beispielsweise viele Beispiele für Übersetzungen vom Deutschen ins Englische enthält, wie

"Scholz packt das an" is the slogan, “Scholz will sort it”.

dann muss das Modell, um bei der nächsten Wortvorhersageaufgabe in diesen Beispielen gut abzuschneiden, effektiv lernen, vom Deutschen ins Englische zu übersetzen.

Oder betrachten Sie die Beantwortung von Fragen. In vielen Fällen ist das korrekte Erraten des nächsten Wortes nur möglich, wenn man bestimmte Dinge über die fraglichen Objekte weiß. Um das nächste Wort in der Folge zu erraten

Die aktuelle Hauptstadt Brasiliens ist seit ihrer Errichtung im Jahr 1960 [Brasilia]

muss man wissen, dass Brasilia die Hauptstadt Brasiliens ist. Das Sprachmodell ist also gezwungen, Wissen über die Welt zu lernen und in seinen Parametern zu speichern.

Es muss auch lernen, logische Schlussfolgerungen zu ziehen und den gesunden Menschenverstand anzuwenden:

Sie wollte nach China oder Japan gehen. Für China konnte sie kein Visum bekommen, also ging sie nach [Japan].

Er musste in 90 Minuten am Flughafen sein. Da sein Auto noch in der Werkstatt stand und es keine Busse zum Flughafen gab, rief er ein [Taxi].

Prompt Engineering

Die Frage ist, wie man diese theoretischen Fähigkeiten für praktische Zwecke nutzen kann. Erinnern wir uns daran, dass das einzige, was GPT-3 kann, die Vorhersage des nächsten Wortes für eine gegebene Folge von Wörtern ist. Wir müssen also jede Aufgabe, die wir damit lösen wollen, in die Form der Sprachmodellierung umwandeln. Die Eingabesequenz, mit der wir das Modell auffordern, fortzufahren, wird Prompt genannt. Die Herausforderung besteht also darin, Prompts zu entwerfen, die das Modell dazu bringen, sich so zu verhalten, wie wir es wollen.

Wie wir oben gesehen haben, besteht eine gute Chance, dass es die Aufforderung "Wie heißt die Hauptstadt von Brasilien? - Es ist ..." mit "Brasilia" beantworten - denn es sollte ein semantisches Verständnis dafür entwickelt haben, wie das nächste Wort mit Brasilien zusammenhängen muss, und es kennt ein Wort mit genau dieser Beziehung.

Ähnlich einfach ist es, einen Prompt für die Übersetzungsaufgabe zu entwerfen: Bei einem deutschen Satz $$G$$, den man ins Englische übersetzen will, kann man die Aufforderung "Der deutsche Satz $$G$$ lässt sich ins Englische übersetzen als ..." verwenden.

Es hat sich gezeigt, dass GPT-3 am besten funktioniert, wenn Sie die Aufgabe beschreiben, die es erledigen soll, und einige Beispiele für die Erfüllung der Aufgabe geben. Nehmen wir also an, wir haben bereits drei deutsche Phrasen $$G_i$$ mit ihren englischen Übersetzungen $$E_i$$. Dann kann die Eingabeaufforderung wie folgt aussehen:

“Translate German to English: $$G_1$$-> $$E_1$$, $$G_2$$ -> $$E_2$$, $$G_3$$ -> $$E_3$$, $$G$$->”.

Translate German to English:

Seeotter -> sea otter

Pfefferminze -> peppermint

Hängebrücke -> suspension bridge

Käse ->

 GPT-3 produces deceptively real newspaper articles.

Eine weitere und die wahrscheinlich am meisten diskutierte Fähigkeit von GPT-3 betrifft die Textgenerierung. Mit Hilfe eines Prompts als Eingabe, den wir als Anfang eines Textes interpretieren, können wir GPT-3 dazu bringen, den Text zu beenden, indem es den Rest des Textes Wort für Wort vorhersagt. Wenn wir angeben wollen, wie ein Text geschrieben werden soll, können wir dies durch Hinzufügen einer natürlichsprachlichen Anweisung tun, oder, was offensichtlich bessere Ergebnisse liefert, indem wir Beispiele für die Art des gewünschten generierten Textes angeben. OpenAI beschreibt in seinem GPT-3-Artikel einen interessanten Fall, in dem GPT-3 Texte im Stil von Nachrichtenartikeln erzeugen soll:

Der Datensatz, der zum Trainieren von GPT-3 verwendet wurde, ist viel weniger auf Nachrichtenartikel [als auf Tweets von Twitter] ausgerichtet, so dass [...] GPT-3 oft den vorgeschlagenen ersten Satz eines "Nachrichtenartikels" als Tweet interpretiert und dann synthetische Antworten oder Folge-Tweets postet. Um dieses Problem zu lösen, nutzten wir die "few-shot"-Lernfähigkeiten von GPT-3, indem wir drei vorherige Nachrichtenartikel im Kontext des Modells zur Verfügung stellten, um es zu konditionieren. Mit dem Titel und dem Untertitel eines vorgeschlagenen nächsten Artikels ist das Modell in der Lage, zuverlässig kurze Artikel im Genre "Nachrichten" zu generieren.


2. Zu gefährlich für die Öffentlichkeit?


Wie wir gerade gesehen haben, muss man, um GPT-3 für andere NLP-Zwecke als die Sprachmodellierung zu verwenden, eine Eingabeaufforderung entwickeln, die dem Modell sagt, was es tun soll. Dies ist in der Tat keine triviale Aufgabe. Manche behaupten, dass das Entwerfen von Prompts eine neue Form des Programmierens ist oder nennen es "Software 3.0". Auch wenn das übertrieben sein mag, scheint es, dass die Vielseitigkeit von GPT-3 auf Kosten der Tatsache geht, dass man seine "Sprache" lernen muss, damit es gut funktioniert.

Eines der wenigen Dinge, die bei der Gestaltung von Prompts klar sind, ist, dass GPT-3 davon profitiert, viele Beispiele für die jeweilige Aufgabe innerhalb des Prompts zu erhalten (wie wir oben in Bezug auf die Übersetzungs- und die Nachrichtengenerierungsaufgaben gesehen haben). Man könnte sich fragen, ob dies nicht auf eine Art Finetuning hinausläuft. Aber bedenken Sie das:

  • Man braucht viel weniger Beispiele als für das eigentliche Finetuning, oft genügen einige wenige (auch wenn mehr in der Regel die Leistung erhöhen).

  • Beim Finetuning werden Modellparameter angepasst., die Bereitstellung von Beispielen in der Eingabeaufforderung tut dies nicht. Dadurch sind die Anforderungen an die Hardware viel geringer.

Die Zero- und Few-Shot-Fähigkeiten von GPT-3 (wobei sich "Zero" und "Few" auf die Anzahl der in der Eingabeaufforderung bereitgestellten Beispiele beziehen) sind beeindruckend, aber nicht für alle NLP-Aufgaben auf dem neuesten Stand der Technik: In einigen Fällen sind spezialisierte (z.B. finegetunte) Modelle immer noch deutlich besser.

Ein Bereich, in dem GPT-3 die Messlatte eindeutig deutlich höher gelegt hat, ist die Erzeugung natürlicher Sprache. Es ist in der Lage, "Zeitungsartikel" zu erstellen, die den Lesern vorgaukeln, sie seien von echten Journalisten geschrieben. Im Folgenden sehen Sie einen von GPT-3 geschriebenen Artikel, der von OpenAI-Testlesern nicht als maschinell geschrieben identifiziert werden konnte:

Auf den Prompt

Title: United Methodists Agree to Historic Split

Subtitle: Those who oppose gay marriage will form their own denomination

Article:

antwortete GPT-3 mit dem folgenden Output:

After two days of intense debate, the United Methodist Church has agreed to a historic split - one that is expected to end in the creation of a new denomination, one that will be "theologically and socially conservative," according to The Washington Post. The majority of delegates attending the church's annual General Conference in May voted to strengthen a ban on the ordination of LGBTQ clergy and to write new rules that will "discipline" clergy who officiate at same-sex weddings. But those who opposed these measures have a new plan: They say they will form a separate denomination by 2020, calling their church the Christian Methodist denomination. The Post notes that the denomination, which claims 12.5 million members, was in the early 20th century the "largest Protestant denomination in the U.S.," but that it has been shrinking in recent decades. The new split will be the second in the church's history. The first occurred in 1968, when roughly 10 percent of the denomination left to form the Evangelical United Brethren Church. The Post notes that the proposed split "comes at a critical time for the church, which has been losing members for years," which has been"pushed toward the brink of a schism over the role of LGBTQ people in the church." Gay marriage is not the only issue that has divided the church. In 2016, the denomination was split over ordination of transgender clergy, with the North Pacific regional conference voting to ban them from serving as clergy, and the South Pacific regional conference voting to allow them.

Die Schöpfer von GPT-3 bei OpenAI befürchten, dass diese Fähigkeit missbraucht werden könnte: Potenziell könnten Personen oder Organisationen mit schlechten Absichten das Internet (z. B. in sozialen Netzwerken oder über speziell eingerichtete "Nachrichten"-Websites) mit gefälschten Nachrichtenartikeln überschwemmen, die die Suche nach echten Informationen mit der Suche nach der Nadel im Heuhaufen vergleichen.

Diese Bedenken sind auch (teilweise) der offizielle Grund, warum OpenAI die trainierten Modelldateien von GPT-3 nicht veröffentlicht hat. Stattdessen kann man nur über eine kommerzielle API darauf zugreifen (für die es eine - wahrscheinlich sehr lange - Warteliste gibt).


3. GPT-3 ausprobieren


Wie bereits erwähnt, ist GPT-3 nicht frei zugänglich. Eine Alternative ist EleutherAIs GPT-Neo 2.7B, eine verkleinerte Nachbildung von GPT-3. Dank der HuggingFace Transformer-Bibliothek ist es sehr einfach, GPT-Neo in Python zu verwenden:

from transformers import pipeline
generator = pipeline('text-generation', model='EleutherAI/gpt-neo-2.7B')
prompt = "[YOUR PROMPT]"
generator(prompt, do_sample=True, min_length=50)

Das Herunterladen des Modells kann allerdings eine Weile dauern, da es 10 GB groß ist. Wenn Sie es nicht herunterladen möchten, Ihre Hardware es nicht zulässt, es lokal zu verwenden, oder die Inferenz zu lange dauert, können Sie auch die Web-API verwenden.

EleutherAI hat ein noch größeres Modell, GPT-J 6B, trainiert, das in Bezug auf die Leistung dem ursprünglichen GPT-3 sehr ähnlich ist. Es wird ebenfalls von HuggingFace gehostet und verfügt über eine Web-API zum Testen des Modells. Aufgrund seiner Größe (22,5 GB) sollten Sie es auf einem (GPU-)Server mit ausreichend RAM verwenden, wenn Sie es ernsthaft nutzen wollen.

Das war's für den Moment. Im Folgeartikel werde ich aufzeigen, bei welchen Aufgaben und auf welche Weise GPT-3 noch Verbesserungspotenzial hat und welche Techniken zukünftige Modelle nutzen könnten, um GPT-3 zu übertreffen. Bleiben Sie dran!