Kategorisieren mit Few Shot Learning: Die Macht der Wenigen
Sprachmodelle wie GPT-4 zeigen, wie effizient Few Shot Learning für Aufgaben mit wenigen Daten funktioniert​.
- Manuel Hartenfels
Ein häufiger Anwendungsfall für Machine Learning ist das Kategorisieren von Kundenanfragen. Der Artikel zu Topic Modeling hat gezeigt, wie sich durch die Analyse von Daten ein optimiertes Kategorienschema ergibt. Danach geht es jedoch an die eigentliche Aufgabe, Kundenanfragen automatisiert in die unterschiedlichen Kategorien einzuordnen.
Dafür hat sich in den letzten Jahren die Kombination aus vortrainierten Modellen mit einem anschließenden Feintuning bewährt. Als Grundlage bietet sich BERT oder ein ähnliches Modell an, das mit vielen ungelabelten Daten trainiert wurde und schon ein gewisses Grundverständnis der Sprache besitzt. Ist dieses Vorwissen vorhanden, kann man das Modell anschließend wesentlich einfacher und schneller für den jeweiligen Anwendungsfall optimieren.
BERT und andere Transformer-basierte Algorithmen geben als Output eine Sequenz aus mehreren Vektoren zurück – pro Wort einen. Für die Klassifikation eines Textes möchte man jedoch eine Art Zusammenfassung haben. Diese besteht idealerweise aus einem einzigen Vektor, der den Inhalt des Textes repräsentiert. Dafür existieren mehrere Vorgehensweisen. Eine Variante ist, von allen Vektoren eine Art Durchschnitt zu berechnen. Üblicherweise hängt man jedoch ein spezielles Token an den Anfang eines jeden Trainingssatzes – meist [CLS] für "Classification". Der Vektor, der aus diesem Token in der letzten Schicht des Modells resultiert, kann als Input etwa für ein einfaches Neuronales Netz zur Klassifikation dienen.
Um einen Algorithmus derart feintunen zu können, benötigt man jedoch viele gelabelte Daten. Wenn eine automatische Kategorisierung beispielsweise die klassischen Outlook-Postfächer ablösen soll, sind aber meist nicht ausreichend klassifizierte Daten vorhanden. Somit müsste jemand mühevoll händisch Labels vergeben. Ein zu großer Unterschied zwischen dem Datensatz für das Training des Sprachmodells und dem zum Klassifizieren kann zudem das Ergebnis negativ beeinflussen.
Eine Lösung kann das sogenannte Few Shot Learning sein: Methoden, die unterschiedliche Aufgaben auch mit wenigen Daten lösen können und dadurch das Labeln der Datensätze zu einem Großteil überflüssig machen. Einer der bekanntesten Ansätze ist das Modell GPT-3 von OpenAI. Bereits der Titel des dazu veröffentlichten Papers "Language Models are Few-Shot Learners" hebt die Fähigkeiten des Modells zum Few Shot Learning hervor. Auch der Nachfolger GPT-4 setzt auf das Prinzip.
Leider sind GPT-3 und GPT-4 weder Open Source noch frei zugänglich und damit für viele Firmen ein No-Go. Außerdem stellt sich die Frage, ob man für die Kategorisierung einfacher Kundenanfragen überhaupt ein derart aufwendiges Modell benötigt. Gerade vor dem Hintergrund der Green-IT und den damit verbundenen Bemühungen, die Rechenleistung zu reduzieren, scheint das absurd.
Eine Alternative fĂĽr GPT-3 kann PET (Pattern Exploiting Training) sein. Das Verfahren verspricht mit deutlich kleineren Modellen in unterschiedlichen Benchmarks vergleichbare und teilweise sogar bessere Ergebnisse zu erbringen als GPT-3.
Die prinzipielle Idee von PET ist es, das sogenannte Weltwissen von Transformern zu nutzen. Gemeint ist damit die Fähigkeit solcher Modelle, über die sprachlichen Zusammenhänge eine Art Verständnis für die reale Welt zu bekommen. Ein Beispiel hierfür ist ein durch Word2Vec erstelltes Embedding. Es bildet reale Zusammenhänge ab, obwohl das Training ausschließlich mit ungelabelten Texten erfolgte. Beispielsweise sind die Abstände zwischen den Vektoren der Wörter "king" und "queen" gleich groß wie die zwischen "man" und "woman". Darin zeigt sich, dass das Modell den grundsätzlichen Zusammenhang enkodiert hat.
Nutzbares Weltwissen
Die groĂźe Herausforderung besteht nun darin, den Modellen ihr Wissen zu entlocken. DafĂĽr wird bei Pattern Exploiting Training die Klassifizierungsaufgabe in einen LĂĽckentext umgewandelt und das Modell angewiesen, ein passendes Wort in die LĂĽcke einzusetzen. Abbildung 1 zeigt das Vorgehen beispielhaft.
Unterschiedliche Modelle erhalten einen solchen Lückentext, bei dem <mask> für die Lücke steht, die sie befüllen sollen. Die Beispielanwendung findet sich auf GitHub. In Abbildung 1 ist erkennbar, dass insbesondere zwei Modelle durchaus in der Lage, sind Wörter zu finden, die im Gesamtkontext sinnvoll sind. Für eine Sentiment-Analyse muss man die gefundenen Wörter einem Sentiment – beziehungsweise Label – zuweisen, um einen Klassifikator zu erhalten.
Ein Pattern Verbalizer Pair (PVP) beschreibt dieses Mapping zwischen einem Label und einem Wort oder Token sowie das Erstellen des LĂĽckentextes.
Für das Training sind die gelabelten Daten durch das Pattern in einen Lückentext mit maskierten Stellen zu übersetzen. Den maskierten Text erhält ein Modell als Input. Geeignete Modelle finden sich unter anderem bei Hugging Face unter der Rubrik Fill-mask. Als Output gibt das Modell die Wörter aus seinem Vokabular zurück, mit denen es den maskierten Bereich am wahrscheinlichsten ersetzen würde.
Als Nächstes erfolgt das Mapping der Wörter zu dem Label mit dem Verbalizer und das Berechnen einer Wahrscheinlichkeitsverteilung über die unterschiedlichen Klassen mit der Softmax-Funktion. Mit Cross Entropy lassen sich anschließend die tatsächlichen Labels (Ground Truth) mit den Ergebnissen des Modelles vergleichen und die daraus resultierenden Fehler für das Feintuning des Modells verwenden.