In diesem Artikel erfahren Sie, wie Sie mithilfe großer Sprachmodelle und der scikit-LLM-Bibliothek eine Textklassifizierung mit mehreren Labels durchführen, ohne dass dafür gelabelte Trainingsdaten oder ein komplexes Modelltraining erforderlich sind.
Zu den Themen, die wir behandeln werden, gehören:
- Was Multi-Label-Klassifizierung ist und warum sie für eine differenzierte Textanalyse wichtig ist.
- So richten Sie scikit-LLM mit einem kostenlosen Open-Supply-LLM von Groq für Zero-Shot-Inferenz ein und konfigurieren es.
- So laden Sie einen realen Datensatz und führen Stimmungsvorhersagen mit mehreren Labels mithilfe eines bekannten Workflows im Scikit-Be taught-Stil aus.
Multi-Label-Textklassifizierung mit Scikit-LLM
Einführung
Textklassifizierung Typischerweise läuft es auf Szenarien hinaus, in denen eine Produktbewertung „positiv“ oder „negativ“ ist oder eine Kundenanfrage in die eine oder andere Kategorie gehört. Wenn es jedoch um menschliche Gefühle geht, ist die Kategorisierung selten eindeutig. Schon ein einziger Satz kann manchmal sowohl Freude als auch Wut ausdrücken – zum Beispiel: „Ich liebe die längere Akkulaufzeit, aber das neue Design ist unglaublich schrecklich.“ Geben Sie die Multi-Label-Klassifizierung ein: eine „aktualisierte“ Klassifizierungsaufgabe, die in der Lage ist, Datenobjekten wie Textteilen gleichzeitig mehrere Kategorien zuzuweisen.
Der Aufbau von Multi-Label-Klassifikatoren für Textual content erfordert normalerweise große Mengen an Label-Trainingsdaten neben komplexen neuronalen Netzwerkarchitekturen, aber heute gibt es einen Meistertrick: die Argumentationsfähigkeit großer Sprachmodelle (LLMs) zu nutzen – konkret Zero-Shot-Argumentation. Dank neuartiger Bibliotheken wie scikit-LLMdies kann genau wie mit einem herkömmlichen maschinellen Lernworkflow mit scikit-learn erfolgen. In diesem Artikel erfahren Sie, wie das geht, indem Sie ein Sentimentklassifizierungsproblem mit mehreren Labels mithilfe eines realen Open-Supply-Datensatzes angehen.
Schritt-für-Schritt-Anleitung
Scikit-LLM zeichnet sich aus gutem Grund aus: Es fungiert als fabelhafter Wrapper, der es Benutzern von scikit-learn – und auch denjenigen, die neu in beiden Bibliotheken sind – unglaublich einfach macht, vorhandene LLMs für Inferenzen zu verwenden, ohne dass eine intensive Schulung erforderlich ist. Das Tüpfelchen auf dem i: Es ermöglicht auch die Nutzung kostenloser Open-Supply-LLMs ohne Quotenbegrenzung. Und genau das werden wir tun: Laden, Anpassen und Nutzen eines vorab trainierten LLM für eine Klassifizierungsaufgabe mit mehreren Etiketten, bei der einem Textual content eine oder mehrere Kategorien zugewiesen werden können.
Zuerst importieren wir die notwendigen Bibliotheken:
pip installiert scikit-llm-Datensätze
|
Pip installieren Scikit–llm Datensätze |
Wir werden ein kostenloses LLM von Groq verwenden, einer Ressource, die LLMs mit schneller Inferenz bereitstellt. Registrieren Sie sich daher unbedingt auf der Web site und erhalten Sie einen API-Schlüssel Hier. Sie müssen diesen Schlüssel kopieren, sobald er erstellt wurde (beachten Sie, dass er nur einmal kopiert werden kann) und ihn in den folgenden Code einfügen:
aus skllm.config import SKLLMConfig aus skllm.fashions.gpt.classification.zero_shot import MultiLabelZeroShotGPTClassifier # 1. Festlegen Ihres API-Schlüssels (verwenden Sie „any_string“, wenn lokal) SKLLMConfig.set_openai_key(“YOUR_FREE_API_KEY“) # 2. Festlegen der benutzerdefinierten Endpunkt-URL SKLLMConfig.set_gpt_url(„https://api.groq.com/openai/v1/“) # 3. Initialisieren des Klassifikators. # Das Präfix „custom_url::“ wird verwendet, um das GPT-Modul anzuweisen, an die oben angegebene URL weiterzuleiten. clf = MultiLabelZeroShotGPTClassifier(mannequin=“custom_url::llama-3.3-70b-versatile“, max_labels=3)
|
aus skllm.config Import SKLLMConfig aus skllm.Modelle.gpt.Einstufung.null_schuss Import MultiLabelZeroShotGPTClassifier # 1. Festlegen Ihres API-Schlüssels (verwenden Sie „any_string“, wenn lokal) SKLLMConfig.set_openai_key(„YOUR_FREE_API_KEY“) # 2. Festlegen der benutzerdefinierten Endpunkt-URL SKLLMConfig.set_gpt_url(„https://api.groq.com/openai/v1/“) # 3. Initialisierung des Klassifikators. # Das Präfix „custom_url::“ wird verwendet, um das GPT-Modul anzuweisen, an die oben angegebene URL weiterzuleiten. clf = MultiLabelZeroShotGPTClassifier(Modell=„custom_url::llama-3.3-70b-versatile“, max_labels=3) |
Beachten Sie, dass wir speziell ein Objekt von instanziiert haben MultiLabelZeroShotGPTClassifier Klasse, um unser vorab trainiertes LLM von Groq zu veranstalten.
Als nächstes importieren wir einen Datensatz. Hugging Face verfügt hierfür über ein hervorragendes Datensatz-Repository, das wir gezielt nutzen werden go_emotions Datensatz, der für unsere Aufgabe ideally suited ist – abhängig von der verwendeten Betriebsumgebung werden Sie möglicherweise nach einem Hugging Face (HF)-API-Schlüssel gefragt, aber um einen zu erhalten, müssen Sie sich nur auf der HF-Web site registrieren und erstellen.
from datasets import load_dataset import pandas as pd # 1. Neuer expliziter Namespace/Identify zur Einhaltung der neuen HF-URI-Regeln in der „Datasets“-Bibliothek dataset = load_dataset(„google-research-datasets/go_emotions“, cut up=“prepare(:100)“) df = dataset.to_pandas() # Extrahieren Sie die Rohtextkommentare texts = df(‚textual content‘).tolist() print(f“Loaded {len(texts)} Kommentare.“) print(f“Beispiel: ‚{texts(0)}'“)
|
aus Datensätze Import Load_Dataset Import Pandas als pd # 1. Neuer expliziter Namespace/Identify zur Einhaltung der neuen HF-URI-Regeln in der „Datasets“-Bibliothek Datensatz = Load_Dataset(„google-research-datasets/go_emotions“, Teilt=„Zug(:100)“) df = Datensatz.to_pandas() # Extrahieren Sie die Rohtextkommentare Texte = df(‚Textual content‘).Tolist() drucken(F„{len(texts)} Kommentare geladen.“) drucken(F„Beispiel: ‚{texts(0)}‘“) |
Sie sehen eine Ausgabe wie diese, die ein Beispiel aus dem geladenen Datensatz zeigt:
100 Kommentare geladen. Beispiel: „Mein Lieblingsessen ist alles, was ich nicht selbst kochen musste.“
|
Geladen 100 Kommentare. Probe: „Mein Lieblingsessen ist alles, was ich gegessen habe“T haben Zu kochen ich selbst.‚ |
Um das geladene LLM zu „trainieren“, müssen wir lediglich unseren domänenspezifischen Satz von Etiketten angeben, und es passt das Modell für die Klassifizierung von Instanzen mithilfe von Etiketten aus diesem Satz an. Insbesondere werden wir den folgenden Etikettensatz verwenden:
Candidate_labels = („Bewunderung“, „Belustigung“, „Wut“, „Ärger“, „Zustimmung“, „Neugier“, „Enttäuschung“, „Freude“, „Traurigkeit“, „Überraschung“ )
|
Candidate_labels = ( „Bewunderung“, „Amüsement“, „Wut“, „Ärger“, „Genehmigung“, „Neugier“, „Enttäuschung“, „Freude“, „Traurigkeit“, „Überraschung“ ) |
Wir führen keinen eigentlichen Trainingsprozess durch: Wir setzen das Modell einfach dem Labelsatz aus, den wir angegeben haben, um das Problemszenario zu instanziieren. So geht’s:
# Passen Sie das Modell vollständig auf Null an, indem Sie
|
# Passen Sie das Modell vollständig auf Null an, indem Sie X als „Keine“ übergeben, ohne tatsächlich zu trainieren. # und Bereitstellung unserer Labels als verschachtelte Liste clf.match(Keiner, (Candidate_labels)) |
Sobald die vorherigen Schritte abgeschlossen sind, sind Sie quick bereit, einige Vorhersagen zu einigen Textbeispielen zu treffen. Machen wir es für fünf Texte im Datensatz und zeigen einige Ergebnisse:
# Führen Sie die Vorhersagen für unsere Reddit-Kommentare ausvorhersagen = clf.predict(texts) # Zeigen Sie die Ergebnisse für i in vary(5) an: print(f“Remark: {texts(i)}“) print(f“Predicted Sentiments: {predictions(i)}“) print(„-“ * 50)
|
# Führen Sie die Vorhersagen in unseren Reddit-Kommentaren durch Vorhersagen = clf.vorhersagen(Texte) # Zeigen Sie die Ergebnisse an für ich In Reichweite(5): drucken(F„Kommentar: {texts(i)}“) drucken(F„Vorhergesagte Stimmungen: {predictions(i)}“) drucken(„-“ * 50) |
Ausgabeauszug – nur zwei der fünf Vorhersagen werden angezeigt:
100%|██████████| 100/100 (03:01<00:00, 1,82s/it)Kommentar: Mein Lieblingsessen ist alles, was ich nicht selbst kochen musste. Vorhergesagte Gefühle: („Belustigung“, „Freude“ '') -------------------------------------------------- Kommentar: Wenn er sich jetzt ausschaltet, wird jeder denken, dass er Spaß daran hat, sich mit Leuten anzulegen, statt tatsächlich tot zu sein. Vorhergesagte Gefühle: („Wut“, „Ärger“, „Überraschung“) --------------------------------------------------
|
100%|██████████| 100/100 (03:01<00:00, 1,82s/Es)Kommentar: Mein Favorit Essen Ist irgendetwas ICH tat esIch muss nicht selbst kochen. Voraussichtliche Stimmungen: (‚Amüsement‚ ‚Freude‚ ‚‚) ————————————————– Kommentar: Wenn er sich jetzt selbst erledigt, werden alle denken, erS haben A lachen Schrauben mit Menschen stattdessen von Genau genommen tot Vorhergesagt Gefühle: (‚Wut‘ ‚Ärger‘ ‚Überraschung‘) ————————————————————————— |
Haftungsausschluss: Der Autor und Herausgeber des Artikels übernimmt keine Haftung für den tatsächlichen Inhalt des verwendeten Datensatzes Dritter und die in einigen seiner Beispiele verwendete Sprache.
Beachten Sie, dass im Rahmen der Vorhersage einem einzelnen Textual content mehrere Beschriftungen zugewiesen werden können.
Geraten Sie auch nicht in Panik, wenn Sie feststellen, dass der Vorhersagevorgang eine Weile dauert. Dies ist regular, da die lokale Verwendung dieser LLMs ein rechenintensiver Prozess ist. So widersprüchlich es auch klingen magazine, im obigen Beispiel dauert die Schlussfolgerung weitaus länger als die Anpassung des Modells, da wir kein tatsächliches Coaching durchgeführt und auch keinen Trainingssatz übergeben haben match(): Wir haben gerade den Etikettensatz übergeben, um unser spezifisches Szenario zu definieren.
Zusammenfassung
In diesem Artikel wurde veranschaulicht, wie mit scikit-LLM ein Multi-Label-Textklassifizierungsprozess durchgeführt wird: einer Bibliothek, die die Fähigkeiten vorab trainierter LLMs nutzt und deren Verwendung ermöglicht, als wären es klassische, scikit-learn-basierte Modelle für maschinelles Lernen.
Als nächsten Schritt könnten Sie mit der Erweiterung des Kandidaten-Label-Units experimentieren, um die gesamte emotionale Bandbreite Ihrer Zieldomäne besser widerzuspiegeln, oder ein anderes von Groq gehostetes Modell einsetzen, um das Vorhersageverhalten zu vergleichen. Wenn Sie noch weiter gehen möchten, unterstützt scikit-LLM auch andere Zero-Shot- und Few-Shot-Klassifizierungsstrategien. Wenn Sie dem Klassifikator eine kleine Anzahl beschrifteter Beispiele zuführen, können seine Vorhersagen manchmal spürbar verbessert werden, ohne dass eine vollständige Trainingspipeline erforderlich ist. Schließlich lohnt es sich für Produktionsanwendungsfälle, eine geeignete Bewertungsschleife zu erstellen, um die Präzision und den Rückruf auf Etikettenebene anhand einer zurückgehaltenen, mit Anmerkungen versehenen Stichprobe zu messen, damit Sie ein konkretes Gefühl dafür haben, wo das Modell intestine funktioniert und wo es Schwierigkeiten hat.
