Die LAMBADA-KI von IBM ist eine neuartige Data-Augmentation-Methode für Textklassifizierungsaufgaben. Das Akronym LAMBADA steht für "language-model-based data augmentation". Die Idee der Methode ist die Feinabstimmung von vortrainierten Sprachmodellen, um synthetische Trainingsdaten für Textklassifizierungsaufgaben wie z. B. die Absichtsklassifizierung in Konversationssystemen zu generieren.
Chatbots müssen grundsätzlich die folgenden drei Hauptaufgaben erfüllen:
Bei der ersten Aufgabe stehen wir vor der Herausforderung, alle möglichen Aussagen und Fragen zu identifizieren, die ein Benutzer im Gespräch mit unserem Chatbot äußern könnte. Dafür können wir Algorithmen des Natural Language Understanding (NLU) verwenden. Diese Machine Learning-Algorithmen werden mit Beispielaussagen für vordefinierte Benutzerintentionen versehen. Das Ziel ist es, aus diesen vordefinierten Beispielen zu extrapolieren und so alle möglichen Formulierungen für die Absicht eines Benutzers zu identifizieren.
Die Herausforderung bei diesem Ansatz besteht darin, einen ausreichend großen und vielfältigen Satz von Beispiel-Utterances für das Training zu sammeln. Diese *Utterances müssen in der Regel von realen Personen stammen und erfordern daher manuelle Arbeit, um Trainingsdaten zu generieren und zu labeln. Daher wäre eine automatisierte Generierung von zusätzlichen Trainingsdaten auf der Grundlage eines kleinen Mustersatzes von Vorteil, um Zeit und Kosten zu reduzieren. Die LAMBADA AI-Methode befasst sich mit diesem Problem.
Bei der zweiten Aufgabe handelt es sich um ein komplexes Problem, das wir in kommenden Artikeln noch ausführlicher diskutieren. Die dritte Aufgabe kann unter Anwendung von Natural Language Generation (NLG)-Techniken gelöst werden. Oft reicht es jedoch aus, eine begrenzte Anzahl von Antworten zu verwenden, aus denen der Chatbot wählen kann, um Aufgabe drei zu lösen.
Ein interessanter Ansatz zur Erzeugung von Trainings-Utterances namens LAMBADA (language-model-based data augmentation) wurde von IBM Research AI veröffentlicht.
Die zugrundeliegende Idee besteht darin, ein Sprachmodell zu verwenden, das auf großen Korpora wie Wikipedia und Büchern vortrainiert wurde und in der Lage ist, Textausgaben von guter Qualität zu erzeugen. Dieses Sprachmodell wird dann anhand der verfügbaren domänenspezifischen Daten fine getunet. Nach dem Fine-Tuning kann das Modell dann verwendet werden, um zusätzliche Utterances zu generieren. Diese verbessern wiederum das Training von *Intent-Klassifikationsmodellen.
In den folgenden Abschnitten werden wir jeden Schritt ausführlicher besprechen.
Wir beginnen mit einem kleinen Satz von Trainingsäußerungen für jede unseres Chatbots definierte Absicht. Der Intent "greet" könnte zum Beispiel durch die Äußerungen "hello", "hi", "Good morning!" ausgedrückt werden, der Intent "inform_hungry" durch "I am starving", "My mummy is growling", "I want a snack" usw. Als nächstes trainieren wir ein Modell zur Klassifizierung von Absichten - zum Beispiel mit BERT. Dieses Modell dient als Basis, die wir verbessern wollen.
Als nächstes nehmen wir ein generatives Modell wie GPT-2 und stimmen es auf den kleinen Satz von Intent- und Utterance-Daten ab. Um Text mit GPT-2 zu erzeugen, müssen wir einen Input-Text als Keim zur Verfügung stellen. GPT-2 prognostiziert dann die nächsten Wörter und gibt diese Vorhersage aus. Um einen Eindruck von NLG zu erhalten, können Sie GPT-2 hier Text aus Ihren Eingaben generieren lassen.
Ein Beispiel: Wir stellten GPT-2 den Satz "Ich möchte Kaffee bestellen" zur Verfügung und ließen es wiederholt weiteren Text hinzufügen. Das Ergebnis war:
"Ich würde gerne einen Kaffee zum Mitnehmen bestellen und wir besprechen dann, wie es weitergeht. Es wird etwa 15 Minuten dauern, bis wir einen Tisch bekommen, es wird also kein großer Andrang sein, aber wenn Sie ein Bier probieren möchten, würde ich vorschlagen, mit der Bestellung zu warten, und dann können Sie es einfach abholen, wenn ich fertig bin. . .. Ich habe jetzt schon ein paar Mal bestellt und es war immer in Ordnung. ... Die Kellnerin ist immer nett."
Der vorgelegte Text ist nicht aus mehreren Versuchen herausgepickt, sondern das Ergebnis unseres ersten Versuchs. Wir können sehen, dass unsere generierte Geschichte zwar keine wirklich prägnante Botschaft enthält, aber die Sprache korrekt ist, den Kontext respektiert und dem nahe kommt, was ein Mensch schreiben könnte.
Wie können wir dieses Modell nutzen, um neue Utterances für unsere Intents zu generieren? Dazu verfeinern wir das Modell, indem wir ihm unsere Intent-/ Utterance-Paare als Trainingsdaten wie folgt zur Verfügung stellen:
Unser Ziel ist, dass das Modell den Input-String "greet," zu etwas wie "greet, good evening!" vervollständigt. Dabei soll es sein allgemeines Modell zur Sprachgenerierung verwenden und unsere Sprachschreibweise respektieren.
Wir füttern GPT-2 mehrfach mit unseren Intent-Namen. Da die Auswertung eines neuronalen Netzes deterministisch ist, würde es immer wieder die gleiche Ausgabe vorhersagen und damit erzeugen.
GPT-2 bietet jedoch die Möglichkeit, nach dem Zufallsprinzip eine der besten Vorhersagen für jedes Wort auszuwählen, wodurch die Variabilität der Ausgabe erhöht wird.
Wir erzeugen deutlich mehr Utterances, als wir am Ende behalten wollen, weil wir immer noch einige der weniger hochwertigen Ergebnisse auslassen müssen.
Da wir die generierten Utterances zum erneuten Training unseres Klassifikators verwenden werden, müssen wir sicherstellen, dass diese a) korrekt und b) von guter Qualität sind. Es ist nicht auszuschließen, dass unser GPT-2-Modell Intent/Utterance-Paare wie " inform_hungry, Good afternoon" oder etwas völlig außerhalb unserer Reichweite generierte, wie "inform_hungry, the most important thing for any food processor is the size and the speed of the machine". (wieder von hier).
Daher filtern wir die generierten Utterances, indem wir ihren Intent mit unserem alten Basismodell der Intent-Klassifikation vorhersagen und die folgenden Regeln anwenden:
a) Wenn der vorhergesagte Intent für die Utterance nicht mit dem Intent übereinstimmt, für den sie erzeugt wurde, filtern wir die Utterance aus.
b) Wenn die Vorhersage einen Konfidenzwert unter einer bestimmten Schwelle hat, filtern wir die Utterance ebenfalls aus.
Die Daten mit dem Modell zu filtern, das wir verbessern wollen, scheint als würden wir uns im Kreis bewegen. Jedoch ist der Ansatz von teilüberwachten Lernumgebungen übernommen, in denen bereits ein größerer Pool ungelabelter Daten existiert, die nur gelabelt werden müssen.
Die gefilterten Utterances werden nun zu den anfänglichen Trainingsdaten hinzugefügt und das Intent-Klassifikationsmodell - in unserem Fall BERT - wird auf den neuen angereicherten Datensatz trainiert. Wir können dann die Leistung des Klassifikators auf einem Testsatz vergleichen, der weder im ersten oder zweiten Trainingsprozess noch beim Finetuning von GPT-2 verwendet wurde.
In ihrer Veröffentlichung führt das IBM Research AI-Team den LAMBADA-Algorithmus auf drei Datensätzen (ATIS, TREC, WVA) aus, verwendet drei verschiedene Modelle für die Intent-Klassifikation (SVM, LSTM, BERT) und vergleicht schließlich die Leistung von LAMBADA mit anderen Datenaugmentierungstechniken (EDA, CVAE, CBERT). Wenn Sie an weiteren Details interessiert sind, sollten Sie den Artikel lesen, aber hier sind die wichtigsten Erkenntnisse:
Für unser eigenes Experiment verwendeten wir einen der Chitchat-Datensätze die für den Microsoft Azure QnA Maker bereitgestellt wurden. Wir benutzten zehn Intents mit einem Minimum von jeweils 65 Utterances und 1147 Utterances insgesamt. Pro Intent wählten wir nach dem Zufallsprinzip zehn Utterances aus, um BERT für die Intent-Klassifikation zu trainieren und GPT-2 fein zu tunen. Die verbleibenden 1047 Intent/Utterance-Paare behielten wir als Testsatz, um unsere Performance zu messen.
Die zehn Utterances pro Intent teilten wir erneut auf, sodass wir sechs Utterances pro Intent für das Training und vier als Validierungsset verwendeten. Insgesamt hatten wir also 60 Intent/Utterance-Paare für das Training und 40 für die Validierung. Anhand dieser Daten verfeinerten wir ein distilBERT und werteten es mit unserem Testset aus. Das Modell erreichte eine Genauigkeit von 86,3%.
Als nächstes verfeinerten wir das mittelgroße GPT-2 unter Verwendung derselben 10 Utterances pro Intent. Dieses Modell benutzten wir dann, um 100 neue Utterances pro Intent zu generieren.
Diese 1000 Utterances speisten wir in unser distilBERT-Modell ein, um deren Intent vorherzusagen. Wenn der prognostizierte Intent nicht mit dem tatsächlichen übereinstimmte, wurden die Utterances aus den Daten gestrichen. Danach nahmen wir die 30 Äußerungen mit der höchsten Vorhersagewahrscheinlichkeit pro Intent und fügten sie zu unseren Trainingsdaten hinzu, was zu einem neuen Datensatz mit 40 Utterances pro Intent führte. Dann teilten wir den Satz in einen Trainings- und einen Validierungssatz mit 32 und 8 Utterances pro Intent auf und trainierten distilBERT erneut.
Schließlich verwendeten wir den gleichen Testsatz wie zuvor, um die Genauigkeit unseres neuen Modells zu bestimmen. Das Modell sagte 90,3% der Utterances korrekt voraus, was eine Verbesserung von 4% gegenüber dem Basismodell ergab.
Die LAMBADA-Methode ist vielversprechend, wenn Sie ein Intent-Klassifizierungsmodell mit nur einer kleinen Menge an verfügbaren Trainingsdaten trainieren müssen und zusätzliche Daten teuer zu beschaffen sind. Sie nutzt die Leistungsfähigkeit von vortrainierten generativen Modellen, um vielfältigere Äußerungen zu generieren und die Leistung Ihres Klassifikators zu verbessern.
Um die LAMBADA-Methode verwenden zu können, müssen Sie mit vortrainierten Modellen wie BERT und GPT-2 vertraut sein. Es ist zwar nett, die Theorie hinter einer Methode zu kennen, aber es erfordert etwas Mühe, diese in Code zu übersetzen. Um Ihnen den Einstieg in Ihre eigenen Anwendungsfälle zu erleichtern, lesen Sie unseren nächsten Artikel in unserer Serie über Conversational Systems, in dem wir ausführlich beschreiben, wie wir unser Experiment auf dem Microsoft Chitchat-Datensatz implementiert haben.