Als aufgabenspezifisches Encoder-Modell wurde das Off-the-Shelf-Modell bge-m3-zeroshot-v2.0 von Laurer et al. (2024) verwendet, das für die NLI-Aufgabe ausgelegt ist (zur NLI-Aufgabe s. Abschn. 2.1 im Paper). Das Modell bot sich an, da es im Hinblick auf die AIA von Texten durch Kommunikationswissenschaftler*innen entwickelt und ausführlich evaluiert worden ist (Laurer et al., 2024). Es basiert auf dem multilingualen Encoder-Modell BGE-M3 (Chen et al., 2024) und wurde mit einer Mischung aus fünf NLI-Datensätzen und 28 weiteren Klassifikationsdatensätzen trainiert. Die Trainingsdatensätze des Modells decken dabei Aufgaben wie Sentimentanalyse und Emotionsklassifikation ab. Die drei möglichen Ausprägungen der Tonalität wurden jeweils als zu prüfende Hypothese formuliert (“Die Stimmung beziehungsweise Tonalität des Textes ist {positiv, neutral, negativ}”). Das Modell ermittelte je Ausprägung einen Wahrscheinlichkeitswert und die wahrscheinlichste Ausprägung wurde hier als Codierentscheidung des Modells betrachtet.
Klassifikation
Python
import pandas as pdfrom transformers import pipelinedaten = pd.read_csv("beispielstudie/data/00_goldstandard.csv")datenliste =list(daten["text"])template ="Die Stimmung beziehungsweise Tonalität des Textes ist {}"labels = ["positiv", "neutral", "negativ"]zeroshot_classifier = pipeline("zero-shot-classification", model ="MoritzLaurer/bge-m3-zeroshot-v2.0")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)vergleich = pd.DataFrame(out_dict).drop("sequence", axis=1).join(daten)vergleich.to_csv("beispielstudie/data/02_aufgabenspezifisches_Encoder-Modell.csv", index=False)
1
Import der notwendigen Bibliotheken.
2
Laden der Daten.
3
Definition der Hypothesen-Vorlage und der möglichen Labels.
4
Initialisierung des Zero-Shot-Klassifikations-Pipelines mit dem spezifischen Modell.
5
Durchführung der Klassifikation.
6
Extrahieren der Labels aus den Ergebnissen.
7
Zusammenführen der Ergebnisse mit den Originaldaten und Speichern in einer CSV-Datei.
Ergebnisse
Schauen wir uns eine kleine Auswahl der Ergebnisse an. Wir setzen einen Seed, um die gleiche Auswahl an Texten zu bekommen wie bei den anderen Modellen.
Chen, J., Xiao, S., Zhang, P., Luo, K., Lian, D., & Liu, Z. (2024). BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings through Self-Knowledge Distillation. https://doi.org/10.48550/ARXIV.2402.03216
Laurer, M., Atteveldt, W. van, Casas, A., & Welbers, K. (2024, März 22). Building Efficient Universal Classifiers with Natural Language Inference. https://doi.org/10.48550/arXiv.2312.17543