Bild von juicy_fish auf Freepik
Hugging Face hostet eine Vielzahl transformerbasierter Sprachmodelle (LMs), die auf Aufgaben des Sprachverständnisses und der Sprachgenerierung spezialisiert sind, einschließlich, aber nicht beschränkt auf:
Unsere Prime 5 der kostenlosen Kursempfehlungen
1. Google Cybersecurity-Zertifikat – Begeben Sie sich auf die Überholspur zu einer Karriere in der Cybersicherheit.
2. Natürliche Sprachverarbeitung in TensorFlow – Erstellen Sie NLP-Systeme
3. Python für alle – Entwickeln Sie Programme zum Sammeln, Bereinigen, Analysieren und Visualisieren von Daten
4. Google IT Help Skilled-Zertifikat
5. AWS Cloud-Lösungsarchitekt – Berufszertifikat
- Textklassifizierung
- Named Entity Recognition (NER)
- Textgenerierung
- Fragen und Antworten
- Zusammenfassung
- Übersetzung
Ein besonderer – und recht häufiger – Fall der Textklassifizierungsaufgabe ist die Sentimentanalyse, bei der das Ziel darin besteht, die Stimmung eines bestimmten Textes zu ermitteln. Bei der „einfachsten“ Artwork der Sentimentanalyse werden LMs darauf trainiert, die Polarität eines Eingabetextes, wie z. B. einer Kundenrezension eines Produkts, in positiv vs. negativ oder positiv vs. negativ vs. impartial zu bestimmen. Diese beiden spezifischen Probleme werden als binäre bzw. Mehrklassenklassifizierungsaufgaben formuliert.
Es gibt auch LMs, die zwar immer noch als Modelle zur Stimmungsanalyse erkennbar sind, aber darauf trainiert sind, Texte in verschiedene Emotionen wie Wut, Freude, Trauer usw. zu kategorisieren.
Dieses Python-basierte Tutorial konzentriert sich auf das Laden und Veranschaulichen der Verwendung eines vortrainierten Hugging Face-Modells zur Klassifizierung der Hauptemotion, die mit einem Eingabetext verbunden ist. Wir verwenden das Emotionen-Datensatz öffentlich verfügbar auf dem Hugging Face-Hub. Dieser Datensatz enthält Tausende von Twitter-Nachrichten auf Englisch.
Laden des Datensatzes
Wir beginnen mit dem Laden der Trainingsdaten in den Emotionsdatensatz, indem wir die folgenden Anweisungen ausführen:
!pip set up datasets
from datasets import load_dataset
all_data = load_dataset("jeffnyman/feelings")
train_data = all_data("prepare")
Nachfolgend finden Sie eine Zusammenfassung der Trainings-Teilmenge in der train_data Variable enthält:
Dataset({
options: ('textual content', 'label'),
num_rows: 16000
})
Der Trainingsordner im Emotionsdatensatz enthält 16.000 Instanzen, die mit Twitter-Nachrichten verknüpft sind. Für jede Instanz gibt es zwei Merkmale: ein Eingabemerkmal, das den eigentlichen Nachrichtentext enthält, und ein Ausgabemerkmal oder Label, das die zugehörige Emotion als numerische Kennung enthält:
- 0: Traurigkeit
- 1: Freude
- 2: Liebe
- 3: Wut
- 4: Angst
- 5: Überraschung
Beispielsweise wurde die erste gekennzeichnete Instanz im Trainingsordner mit der Emotion „Traurigkeit“ klassifiziert:
Ausgabe:
{'textual content': 'i didnt really feel humiliated', 'label': 0}
Laden des Sprachmodells
Nachdem wir die Daten geladen haben, besteht der nächste Schritt darin, ein geeignetes vorab trainiertes LM von Hugging Face für unsere Aufgabe zur Erkennung von Zielgefühlen zu laden. Es gibt zwei Hauptansätze zum Laden und Verwenden von LMs mit Transformer-Bibliothek von Hugging Face:
- Rohrleitungen bieten ein sehr hohes Abstraktionsniveau für die Vorbereitung des Ladens eines LM und die nahezu sofortige Ausführung von Inferenzen mit sehr wenigen Codezeilen, allerdings auf Kosten einer geringen Konfigurierbarkeit.
- Autoklassen bieten ein niedrigeres Abstraktionsniveau und erfordern mehr Programmierkenntnisse, bieten aber mehr Flexibilität beim Anpassen der Modellparameter sowie beim Anpassen von Textvorverarbeitungsschritten wie der Tokenisierung.
Dieses Tutorial bietet Ihnen einen einfachen Einstieg, indem es sich auf das Laden von Modellen als Pipelines konzentriert. Für Pipelines müssen Sie mindestens den Typ der Sprachaufgabe und elective einen zu ladenden Modellnamen angeben. Da die Emotionserkennung eine sehr spezielle Type des Textklassifizierungsproblems ist, sollte das beim Laden des Modells zu verwendende Aufgabenargument „text-classification“ sein:
from transformers import pipeline
classifier = pipeline("text-classification", mannequin="j-hartmann/emotion-english-distilroberta-base")
Andererseits wird dringend empfohlen, mit dem Argument „Modell“ den Namen eines bestimmten Modells im Hugging Face Hub anzugeben, das unsere spezielle Aufgabe der Emotionserkennung bewältigen kann. Andernfalls laden wir standardmäßig möglicherweise ein Textklassifizierungsmodell, das nicht mit Daten für dieses spezielle 6-Klassen-Klassifizierungsproblem trainiert wurde.
Sie fragen sich vielleicht: „Woher weiß ich, welchen Modellnamen ich verwenden soll?“ Die Antwort ist einfach: Erkunden Sie die Hugging Face-Web site ein wenig, um geeignete Modelle oder Modelle zu finden, die auf einem bestimmten Datensatz wie den Emotionsdaten trainiert wurden.
Der nächste Schritt besteht darin, Vorhersagen zu treffen. Pipelines machen diesen Inferenzprozess unglaublich einfach, aber rufen Sie einfach unsere neu instantiierte Pipeline-Variable auf und übergeben Sie einen zu klassifizierenden Eingabetext als Argument:
example_tweet = "I really like hugging face transformers!"
prediction = classifier(example_tweet)
print(prediction)
Als Ergebnis erhalten wir eine vorhergesagte Bezeichnung und einen Vertrauenswert: Je näher dieser Wert bei 1 liegt, desto „zuverlässiger“ ist die getroffene Vorhersage.
({'label': 'pleasure', 'rating': 0.9825918674468994})
Daher vermittelt unser Eingabebeispiel „Ich liebe es, Gesichtstransformatoren zu umarmen!“ selbstbewusst ein Gefühl der Freude.
Sie können der Pipeline mehrere Eingabetexte übergeben, um mehrere Vorhersagen gleichzeitig durchzuführen:
example_tweets = ("I really like hugging face transformers!", "I actually like espresso but it surely's too bitter...")
prediction = classifier(example_tweets)
print(prediction)
Der zweite Enter in diesem Beispiel schien für das Modell eine viel größere Herausforderung zu sein, um eine zuverlässige Klassifizierung durchzuführen:
({'label': 'pleasure', 'rating': 0.9825918674468994}, {'label': 'disappointment', 'rating': 0.38266682624816895})
Zuletzt können wir auch einen Stapel von Instanzen aus einem Datensatz wie unseren zuvor geladenen „Emotionen“-Daten übergeben. Dieses Beispiel übergibt die ersten 10 Trainingseingaben an unsere LM-Pipeline zur Klassifizierung ihrer Gefühle und druckt dann eine Liste mit jedem vorhergesagten Label aus, wobei ihre Konfidenzwerte außer Acht gelassen werden:
train_batch = train_data(:10)("textual content")
predictions = classifier(train_batch)
labels = (x('label') for x in predictions)
print(labels)
Ausgabe:
('disappointment', 'disappointment', 'anger', 'pleasure', 'anger', 'disappointment', 'shock', 'worry', 'pleasure', 'pleasure')
Zum Vergleich hier die ursprünglichen Bezeichnungen dieser 10 Trainingsinstanzen:
print(train_data(:10)("label"))
Ausgabe:
(0, 0, 3, 2, 3, 0, 5, 4, 1, 2)
Wenn wir die Emotionen betrachten, die mit jedem numerischen Identifikator verknüpft sind, können wir erkennen, dass etwa 7 von 10 Vorhersagen mit den tatsächlichen Bezeichnungen dieser 10 Fälle übereinstimmen.
Nachdem Sie nun wissen, wie Sie Hugging Face-Transformer-Modelle zum Erkennen von Textemotionen verwenden können, könnten Sie auch andere Anwendungsfälle und Sprachaufgaben erkunden, bei denen vorab trainierte LMs hilfreich sein können.
Iván Palomares Carrascosa ist ein führender Experte, Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Studying und LLMs. Er schult und leitet andere bei der Nutzung von KI in der realen Welt an.