Aufgabenspezifisches Encoder-Modell

Beispielstudie

Die Methode

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 pd
from transformers import pipeline

daten = 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.

Code
R
set.seed(42)
readr::read_csv(here::here("beispielstudie/data/02_aufgabenspezifisches_Encoder-Modell.csv"), show_col_types = FALSE) |>
  dplyr::arrange(desc(id)) |>
  dplyr::select(positiv, neutral, negativ, sentiment_gs, textart, text) |>
  dplyr::sample_n(5)
# A tibble: 5 × 6
  positiv neutral negativ sentiment_gs textart                 text             
    <dbl>   <dbl>   <dbl>        <dbl> <chr>                   <chr>            
1  0.608   0.384  0.00780            1 Zeitungsartikel Offline "Dachau Dachau 1…
2  0.0350  0.619  0.346             -1 Zeitungsartikel Offline "Inland Bundesla…
3  0.927   0.0712 0.00174            1 Zeitungsartikel Online  "Beate Meinl-Rei…
4  0.986   0.0127 0.00153            1 Tweet                   "Herzliche Gratu…
5  0.850   0.136  0.0144             1 Facebook-Post           "Wir möchten Pio…

Literatur

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