Python
print("Hallo! 👋")- 1
- Das ist ein einfacher Python-Befehl, der den Text “Hallo” in der Konsole ausgibt. Der Output erscheint unter dem Codeblock.
Hallo! 👋
Um den Beispielcode selbst auszuführen oder zu modifizieren, können Sie das dieser Seite zugrundeliegende Jupyter Notebook über die Seitenleiste öffnen und herunterladen.
Kein Problem! Erklärungen zu den einzelnen Schritten des Codes verbergen sich hinter den Nummern an der rechten Seite. Einfach mit der Maus über die Nummer fahren, um die Erklärung zu sehen. Wo der jeweilige Code ausgeführt wird (in Python, R, oder dem Terminal), steht in der Kopfzeile des Codeblocks.
Python
print("Hallo! 👋")Hallo! 👋
Unabhängig vom verwendeten Modell laden wir zunächst die bereits installierten Pakete sowie unsere Textdaten und speichern diese in einem Listenobjekt:
Python
import pandas as pd
from transformers import pipeline
daten = pd.read_csv("data/example_dataset.csv")
datenliste = list(daten["text"])Im Gegensatz zu kategoriespezifischen Modellen können wir mit aufgabenspezifischen Encoder-Modellen jede beliebige Kategorie codieren. Als Beispiel verwenden wir hier das NLI-Modell von Laurer et al. (2024).
Anstelle des hier verwendeten Modells MoritzLaurer/bge-m3-zeroshot-v2.0 können Sie auch andere aufgabenspezifische Encoder-Modelle (üblicherweise gekennzeichnet für “Zero-Shot-Classification”) für verschiedene Sprachen und Anwendungsfälle verwenden. Eine Übersicht über verfügbare Modelle finden Sie auf Hugging Face. Achten Sie darauf, dass das gewählte Modell für Ihre spezifische Aufgabe geeignet ist (z. B. Sentiment-Analyse, Themenklassifikation etc.) und die Sprache Ihrer Texte unterstützt.
Python
zeroshot_classifier = pipeline("zero-shot-classification",
model = "MoritzLaurer/bge-m3-zeroshot-v2.0")Für die Klassifikation mit dem NLI-Modell spezifizieren wir zusätzlich zum Modell noch die Ausprägungen der Kategorie (candidate_labels) und eine “Hypothese”, die auf Grundlage des Textes geprüft werden soll (hypothesis_template). Bei der Ausführung des pipeline()-Befehls werden die zu codierenden Ausprägungen der Kategorie automatisch anstelle der geschwungenen Klammern in die Hypothese eingesetzt. Auf diese Weise wird der Befehl für jede Ausprägung einzeln durchgeführt (hier für “positiv”, “negativ” und “neutral”). Wir erhalten also als Ergebnis einen Datensatz, der uns pro Text für jede spezifizierte Ausprägung einen Wahrscheinlichkeitswert ausgibt (in unserem Beispiel die Wahrscheinlichkeit für “positiv”, “negativ” und “neutral”). Nun erfolgt die eigentliche Klassifikation, indem wir den zuvor definierten zeroshot_classifier-Befehl auf unsere Textdaten anwenden. Anschließend extrahieren wir die vergebenen Labels. Das Ergebnis speichern wir in einem DataFrame-Objekt, um es übersichtlich darstellen zu können. Über den Parameter multi_label können wir festlegen, ob prinzipiell mehrere Kategorien gleichzeitig in einem Text vorkommen können.
template = "Die Stimmung beziehungsweise Tonalität des Textes ist {}"
labels = ["positiv", "neutral", "negativ"]
results = zeroshot_classifier(datenliste, candidate_labels=labels,
hypothesis_template=template, multi_label=False)
labels = set(label for item in results for label in item['labels'])
out_dict = {label: [] for label in labels}
out_dict['sequence'] = []
for item in results:
out_dict['sequence'].append(item['sequence'])
for label in labels:
if label in item['labels']:
out_dict[label].append(item['scores'][item['labels'].index(label)])
else:
out_dict[label].append(None)
ergebnis = pd.DataFrame(out_dict)
print(ergebnis)