Die Brücke vom klassischen ML zu modernen NLP-Pipelines: TF-IDF + Logistic Regression als ehrliche Baseline, ein konzeptioneller Vergleich mit Zero-Shot-Klassifikation per kleinem Hugging-Face-Modell – und die Frage, wann der LLM-Sprung wirklich Mehrwert bringt.
1. Warum Sentiment im Marketing ein hartes Problem ist
Social-Media-Texte verletzen jede Annahme klassischer NLP-Methoden:
- Kurze Sequenzen (oft <50 Tokens) – wenig Kontext pro Beispiel.
- Sarkasmus und Ironie – Oberflächen-Lexika täuschen sich.
- Emojis, Hashtags, Slang – Out-of-Vocabulary-Wörter dominieren.
- Domain-Drift – heutige Memes sind in 3 Monaten obsolet.
Trotzdem ist eine kompakte, transparente TF-IDF-Baseline oft erstaunlich konkurrenzfähig – und sie ist der Maßstab, an dem sich jedes komplexere Modell messen lassen muss.
2. TF-IDF + Logistic Regression: Die ehrliche Baseline
Was TF-IDF leistet
- Term-Frequenz (TF): Wie oft taucht ein Wort im Dokument auf?
- Inverse Document Frequency (IDF): Wie selten ist es im Korpus? Häufige Wörter („der", „und") werden abgewertet.
- Ergebnis: Sparse-Vektor, der die Wichtigkeit eines Wortes für ein Dokument relativ zum Korpus quantifiziert.
Quick-Check: Was modelliert TF-IDF?
❌ Naiv: Bag-of-Words ohne Gewichtung
Reines Term-Counting ohne IDF lässt häufige, semantisch leere Wörter dominieren und macht das Modell unnötig anfällig für Stopwörter.
✅ Funktional: TF-IDF + LogReg in einer Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# Kleines, repräsentatives Beispiel-Korpus (DE)
texts = [
"Tolles Produkt, klare Empfehlung!",
"Absolut begeistert von der Qualität",
"Super Service, schnelle Lieferung",
"Endlich mal etwas, das hält was es verspricht",
"Mega zufrieden mit dem Kauf",
"Schrecklich, nie wieder.",
"Total enttäuschend und teuer",
"Schlechte Qualität, kaputt nach 2 Tagen",
"Lieferung kam nie an, Geld weg",
"Ich hasse dieses Produkt",
"War okay, mehr nicht.",
"Mittelmäßig, hätte besser sein können",
] * 5 # auf 60 Beispiele duplizieren, um Train/Test sinnvoll zu splitten
y = ([1] * 5 + [0] * 5 + [0] * 2) * 5
X_tr, X_te, y_tr, y_te = train_test_split(texts, y, test_size=0.3, random_state=0)
clf = make_pipeline(
TfidfVectorizer(ngram_range=(1, 2), min_df=1),
LogisticRegression(max_iter=1000),
).fit(X_tr, y_tr)
print(f"Test-Accuracy: {clf.score(X_te, y_te):.3f}")
print()
# Vorhersagen auf unbekannten Beispielen
neue = ["überraschend gut", "leider sehr enttäuschend", "geht so"]
for t, pred, p in zip(neue, clf.predict(neue), clf.predict_proba(neue)[:, 1]):
print(f" '{t}' -> Label={pred} P(positiv)={p:.2f}")
# Interpretierbarkeit: stärkste Features
tfidf = clf.named_steps["tfidfvectorizer"]
logreg = clf.named_steps["logisticregression"]
features = tfidf.get_feature_names_out()
coefs = logreg.coef_[0]
order = coefs.argsort()
print("\nTop-5 negative Features:")
for i in order[:5]:
print(f" {features[i]:25s} {coefs[i]:+.2f}")
print("Top-5 positive Features:")
for i in order[-5:][::-1]:
print(f" {features[i]:25s} {coefs[i]:+.2f}")
Die Interpretierbarkeit ist hier kein Bonus, sondern ein Hauptargument: Marketing-Stakeholder können die gelernten Wörter direkt prüfen – ein neuronales Modell verschluckt diese Plausibilitäts-Kontrolle.
3. Failure-Modes der Baseline
Trotz ihrer Stärken hat TF-IDF + LogReg klare blinde Flecken:
| Phänomen | Beispiel | Warum es schwer ist |
|---|---|---|
| Negation | „nicht schlecht" | Bag-of-Words sieht „schlecht" |
| Sarkasmus | „Ja, ganz toll. augenroll" | Oberflächen-Tokens täuschen |
| Kontext-Abhängigkeit | „Das Produkt ist umwerfend – im negativen Sinn" | Globale Semantik fehlt |
| Neue Slangs / Memes | „Mid", „bussin" | OOV |
Hier setzt der LLM-Sprung an.
4. Zero-Shot mit vortrainierten Modellen (konzeptioneller Vergleich)
Vortrainierte Sprachmodelle bringen Weltwissen mit – Negation, Kontext und Sarkasmus sind im Training implizit gelernt. Der konzeptionelle Code-Block:
# KONZEPT (außerhalb des Pyodide-Playgrounds, da transformers nicht lädt):
from transformers import pipeline
clf = pipeline(
"sentiment-analysis",
model="oliverguhr/german-sentiment-bert",
)
clf(["nicht schlecht", "Ja, ganz toll. *augenroll*"])
# [{'label': 'positive', 'score': 0.78}, {'label': 'negative', 'score': 0.82}]
| Aspekt | TF-IDF + LogReg | Kleines HF-Modell (z. B. distilBERT) |
|---|---|---|
| Trainingsbedarf | Wenige Sekunden auf CPU | Vortraining ist Vorleistung; Fine-Tuning Minuten auf GPU |
| Negation/Kontext | Schwach | Stark |
| Erklärbarkeit | Direkte Koeffizienten | Eingeschränkt (SHAP, Attention) |
| Latenz pro Inferenz | <1 ms | 10–100 ms (CPU) |
| Datenschutz | On-Premise trivial | Modell-Größe und ggf. Lizenz prüfen |
Quick-Check: Wann lohnt sich ein kleines LLM gegenüber TF-IDF + LogReg?
5. Diskussion: Die Baseline-Disziplin
"If your fancy model can't beat a simple baseline, it's not the baseline that's broken." – Empirische Faustregel aus dem ML-Engineering
In jedem produktiven Sentiment-Projekt sollten beide Wege parallel ausgewertet werden. Konkret:
- TF-IDF + LogReg in 20 Minuten trainieren.
- Vortrainiertes Zero-Shot-Modell in 20 Minuten anwenden.
- Beide auf demselben Holdout vergleichen.
- Falls das LLM nur 1–2 Prozentpunkte besser ist: Baseline gewinnt durch Wartbarkeit, Latenz und Datenschutz.
- Falls das LLM systematisch Negation und Sarkasmus korrekter behandelt und das geschäftlich relevant ist: Fine-Tuning lohnt sich.
Quick-Check: Welcher Failure-Mode ist für TF-IDF + LogReg am charakteristischsten?
6. Abschluss-Quiz
Welche Aussage zum Vergleich TF-IDF+LogReg vs. kleines LLM stimmt am besten?
Warum lohnt sich die Inspektion der LogReg-Koeffizienten beim TF-IDF-Modell besonders?
Welcher Punkt spricht in einem produktiven Marketing-Stack gegen den vorschnellen Einsatz eines großen LLMs?
7. Weiterführend
- Diese Serie schließt mit Artikel 05 ab. Querverweis: recommendation-systems und large-language-models-llms.
- Im Refinement: Vergleich auf echtem Tweet-Datensatz (
sentiment140,germeval-2017), Fine-Tuning-Beispiel mittransformers.Trainer.
Quellen
- Generative AI Foundations in Python – Kapitel zu klassischem vs. neuronalem NLP.
- Machine Learning with PyTorch and Scikit-Learn (Sebastian Raschka et al.) – Kapitel zu Text-Klassifikation.
- Practical Natural Language Processing (Vajjala et al.) – Kapitel zu Baselines.