Zero-Shot Textklassifikation


Die Textklassifikation ist eine der hĂ€ufigsten Anwendungen der natĂŒrlichen Sprachverarbeitung (NLP). Sie besteht darin, einem Textausschnitt eine Reihe vordefinierter Kategorien zuzuweisen. Je nach Art des Problems kann der Textausschnitt ein Satz, ein Absatz oder sogar ein ganzes Dokument sein. Es gibt viele potenzielle Anwendungen der Textklassifikation in der realen Welt, aber zu den hĂ€ufigsten gehören Sentiment-Analyse, Themenmodellierung und Absicht, Spam- und Hassrede-Erkennung.
Der Standardansatz zur Textklassifikation besteht darin, einen Klassifikator in einem ĂŒberwachten Regime zu trainieren. Dazu benötigt man Paare aus Text und zugehörigen Kategorien (auch Labels genannt) aus dem interessierenden Bereich als Trainingsdaten. Dann kann ein beliebiger Klassifikator (z.B. ein neuronales Netzwerk) eine Zuordnungsfunktion vom Text zur wahrscheinlichsten Kategorie lernen. WĂ€hrend dieser Ansatz in vielen Situationen gut funktionieren kann, hĂ€ngt seine DurchfĂŒhrbarkeit stark von der VerfĂŒgbarkeit dieser handbeschrifteten Trainingsdatenpaare ab.
Auch wenn vortrainierte Sprachmodelle wie BERT die benötigte Datenmenge reduzieren können, machen sie diese nicht vollstĂ€ndig ĂŒberflĂŒssig. Daher bleibt die DatenverfĂŒgbarkeit fĂŒr Anwendungen in der realen Welt die gröĂte HĂŒrde.
Zero-Shot-Lernen
Es gibt zwar verschiedene Definitionen des Zero-Shot-Lernens1, aber im Allgemeinen kann es als ein Regime definiert werden, in dem ein Modell eine Aufgabe löst, auf die es zuvor nicht explizit trainiert wurde.
Es ist wichtig zu verstehen, dass eine âAufgabeâ sowohl im weiteren als auch im engeren Sinne definiert werden kann: Zum Beispiel zeigten die Autoren von GPT-2, dass ein auf Sprachgenerierung trainiertes Modell auf völlig neue nachgelagerte Aufgaben wie maschinelle Ăbersetzung2 angewendet werden kann. Gleichzeitig wĂ€re eine engere Definition der Aufgabe, zuvor ungesehene Kategorien in Bildern zu erkennen, wie im OpenAI CLIP-Papier3 gezeigt.
Aber was all diese AnsĂ€tze gemeinsam haben, ist die Idee der Extrapolation gelernter Konzepte ĂŒber das Trainingsregime hinaus. Ein mĂ€chtiges Konzept, weil es die Lösbarkeit einer Aufgabe von der VerfĂŒgbarkeit von (beschrifteten) Trainingsdaten entkoppelt.
Zero-Shot-Lernen fĂŒr Textklassifikation
Die Lösung von Textklassifikationsaufgaben mit Zero-Shot-Lernen kann als gutes Beispiel dafĂŒr dienen, wie man die Extrapolation gelernter Konzepte ĂŒber das Trainingsregime hinaus anwenden kann. Eine Möglichkeit, dies zu tun, ist die Verwendung von natĂŒrlicher Sprachinferenz (NLI) wie von Yin et al. (2019)4 vorgeschlagen. Es gibt auch andere AnsĂ€tze, wie die Berechnung von AbstĂ€nden zwischen Text-Einbettungen oder die Formulierung des Problems als LĂŒckentext.
Bei NLI besteht die Aufgabe darin zu bestimmen, ob eine Hypothese in Anbetracht einer PrÀmisse5 wahr (entailment), falsch (contradiction) oder unbestimmt (neutral) ist. Ein typischer NLI-Datensatz besteht aus Satzpaaren mit zugehörigen Labels in der folgenden Form:

Beispiele von http://nlpprogress.com/english/natural_language_inference.html
Yin et al. (2019) schlugen vor, groĂe Sprachmodelle wie BERT, die auf NLI-DatensĂ€tzen trainiert sind, zu nutzen und ihre SprachverstĂ€ndnisfĂ€higkeiten fĂŒr die Zero-Shot-Textklassifikation auszunutzen. Dies kann geschehen, indem man den interessierenden Text als PrĂ€misse nimmt und fĂŒr jede potenzielle Kategorie eine Hypothese formuliert, indem man eine sogenannte Hypothesen-Vorlage verwendet. Dann lĂ€sst man das NLI-Modell vorhersagen, ob die PrĂ€misse die Hypothese beinhaltet. SchlieĂlich kann die vorhergesagte Wahrscheinlichkeit der Einbeziehung als Wahrscheinlichkeit des Labels interpretiert werden.
Zero-Shot-Textklassifikation mit Hugging Face đ€
Lass uns die oben formulierte Idee genauer untersuchen, indem wir die hervorragende Hugging Face-Implementierung fĂŒr Zero-Shot-Textklassifikation verwenden.
Wir sind daran interessiert, den untenstehenden Satz in vordefinierte Themen zu klassifizieren:
topics = ['Web', 'Panorama', 'International', 'Wirtschaft', 'Sport', 'Inland', 'Etat', 'Wissenschaft', 'Kultur']
test_txt = 'Eintracht Frankfurt gewinnt die Europa League nach 6:5-Erfolg im ElfmeterschieĂen gegen die Glasgow Rangers'
â
Dank der đ€ Pipeline-Abstraktion mĂŒssen wir die Vorhersageaufgabe nicht selbst definieren. Wir mĂŒssen lediglich eine Pipeline instanziieren und die Aufgabe als zero-shot-text-classification
definieren. Die Pipeline kĂŒmmert sich um die Formulierung der PrĂ€misse und Hypothese sowie um den Umgang mit den Logits und Wahrscheinlichkeiten aus dem Modell.
Wie oben geschrieben, benötigen wir ein Sprachmodell, das auf einer NLI-Aufgabe vortrainiert wurde. Das Standardmodell fĂŒr Zero-Shot-Textklassifikation in đ€ ist bart-large-mnli
. BART ist ein Transformer-Encoder-Decoder fĂŒr Sequenz-zu-Sequenz-Modellierung mit einem bidirektionalen (BERT-Ă€hnlichen) Encoder und einem autoregressiven (GPT-Ă€hnlichen) Decoder6. Das mnli
-Suffix bedeutet, dass BART anschlieĂend auf dem MultiNLI-Datensatz7 weiter trainiert wurde.
Da wir jedoch deutsche SĂ€tze verwenden und BART nur Englisch unterstĂŒtzt, mĂŒssen wir das Standardmodell durch ein benutzerdefiniertes Modell ersetzen. Dank des đ€ Modell-Hubs ist es ziemlich einfach, einen geeigneten Kandidaten zu finden. In unserem Fall ist mDeBERTa-v3-base-xnli-multilingual-nli-2mil7
ein solcher Kandidat. Lass uns den Namen kurz entschlĂŒsseln fĂŒr ein besseres VerstĂ€ndnis: Es ist eine mehrsprachige Version von DeBERTa-v3-base (das selbst eine verbesserte Version von BERT/RoBERTa8 ist), die anschlieĂend auf zwei cross-lingualen NLI-DatensĂ€tzen (XNLI9 und multilingual-NLI-26lang10) weiter trainiert wurde.
Mit der richtigen Aufgabe und dem richtigen Modell können wir nun die Pipeline instanziieren:
from transformers import pipeline
model = 'MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7'
pipe = pipeline(task='zero-shot-classification', model=model, tokenizer=model)
â
Als nĂ€chstes rufen wir die Pipeline auf, um die wahrscheinlichste Kategorie unseres Textes basierend auf den Kandidaten vorherzusagen. Aber als letzten Schritt mĂŒssen wir auch die Standard-Hypothesen-Vorlage ersetzen. Dies ist notwendig, da die Standardvorlage wieder auf Englisch ist. Daher definieren wir die Vorlage als 'Das Thema ist {}'.
Beachte, dass {}
ein Platzhalter fĂŒr die zuvor definierten Themenkandidaten ist. Du kannst jede Vorlage definieren, die dir gefĂ€llt, solange sie einen Platzhalter fĂŒr die Kandidaten enthĂ€lt:
template_de = 'Das Thema ist {}'
prediction = pipe(test_txt, topics, hypothesis_template=template_de)
SchlieĂlich können wir die Vorhersage aus der Pipeline bewerten. Der untenstehende Code gibt die drei wahrscheinlichsten Themen zusammen mit ihren vorhergesagten Wahrscheinlichkeiten aus:
print(f'Zero-shot prediction for: \n {prediction["sequence"]}')
top_3 = zip(prediction['labels'][0:3], prediction['scores'][0:3])
for label, score in top_3:
print(f'{label} - {score:.2%}')
Zero-shot prediction for:
Eintracht Frankfurt gewinnt die Europa League nach 6:5-Erfolg im ElfmeterschieĂen gegen die Glasgow Rangers
Sport - 77.41%
International - 15.69%
Inland - 5.29%
Wie man sehen kann, liefert das Zero-Shot-Modell ein vernĂŒnftiges Ergebnis, wobei âSportâ das wahrscheinlichste Thema ist, gefolgt von âInternationalâ und âInlandâ.
Unten sind einige weitere Beispiele aus anderen Kategorien. Wie zuvor sind die Ergebnisse insgesamt recht vernĂŒnftig. Beachte, wie das Modell fĂŒr den zweiten Text eine unerwartet niedrige Wahrscheinlichkeit fĂŒr âKulturâ vorhersagt.
further_examples = ['Verbraucher halten sich wegen steigender Zinsen und Inflation beim Immobilienkauf zurĂŒck',
'âDie bitteren TrĂ€nen der Petra von Kantâ von 1972 geschlechtsumgewandelt und neu verfilmt',
'Eine 541 Millionen Jahre alte fossile Alge weist erstaunliche Ăhnlichkeit zu noch heute existierenden Vertretern auf']
for txt in further_examples:
prediction = pipe(txt, topics, hypothesis_template=template_de)
print(f'Zero-shot prediction for: \n {prediction["sequence"]}')
top_3 = zip(prediction['labels'][0:3], prediction['scores'][0:3])
for label, score in top_3:
print(f'{label} - {score:.2%}')
Zero-shot prediction for:
Verbraucher halten sich wegen steigender Zinsen und Inflation beim Immobilienkauf zurĂŒck
Wirtschaft - 96.11%
Inland - 1.69%
Panorama - 0.70%
Zero-shot prediction for:
âDie bitteren TrĂ€nen der Petra von Kantâ von 1972 geschlechtsumgewandelt und neu verfilmt
International - 50.95%
Inland - 16.40%
Kultur - 7.76%
Zero-shot prediction for:
Eine 541 Millionen Jahre alte fossile Alge weist erstaunliche Ăhnlichkeit zu noch heute existierenden Vertretern auf
Wissenschaft - 67.52%
Web - 8.14%
Inland - 6.91%
â
Der gesamte Code kann auf GitHub gefunden werden. Neben den oben genannten Beispielen findest du dort auch Anwendungen der Zero-Shot-Textklassifikation auf zwei beschrifteten DatensĂ€tzen, einschlieĂlich einer Bewertung der Genauigkeit. DarĂŒber hinaus habe ich einige Prompt-Tuning durchgefĂŒhrt, indem ich mit der Hypothesen-Vorlage experimentiert habe.
AbschlieĂende Gedanken
Zero-Shot-Textklassifikation bietet einen geeigneten Ansatz, wenn entweder Trainingsdaten begrenzt (oder sogar nicht vorhanden) sind oder als einfach zu implementierende Benchmark fĂŒr anspruchsvollere Methoden. WĂ€hrend explizite AnsĂ€tze, wie das Feinabstimmen groĂer vortrainierter Modelle, sicherlich immer noch implizite AnsĂ€tze wie das Zero-Shot-Lernen ĂŒbertreffen, macht ihre universelle Anwendbarkeit sie sehr attraktiv.
DarĂŒber hinaus sollten wir erwarten, dass Zero-Shot-Lernen im Allgemeinen in den nĂ€chsten Jahren wichtiger wird. Dies liegt daran, dass sich die Art und Weise, wie wir Modelle zur Lösung von Aufgaben verwenden werden, mit der zunehmenden Bedeutung groĂer vortrainierter Modelle weiterentwickeln wird. Daher plĂ€diere ich dafĂŒr, dass Zero-Shot-Techniken bereits heute Teil des Werkzeugsatzes eines modernen Datenwissenschaftlers sein sollten
Quellen:
1 https://joeddav.github.io/blog/2020/05/29/ZSL.html
2 https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
3 https://arxiv.org/pdf/2103.00020.pdf
4 https://arxiv.org/pdf/1909.00161.pdf
5 http://nlpprogress.com/english/natural_language_inference.html
6 https://arxiv.org/pdf/1910.13461.pdf
7 https://huggingface.co/datasets/multi_nli
8 https://arxiv.org/pdf/2006.03654.pdf
9 https://huggingface.co/datasets/xnli
10 https://huggingface.co/datasets/MoritzLaurer/multilingual-NLI-26lang-2mil7
â