Question Classifier — ein Mini-Modell reicht für Binärklassifikation
Binärklassifikation, ob eine Frage ein Gesundheitsthema behandelt — mit einem bewusst kleinen Modell: eingefrorener DistilBERT (66 Mio. Parameter), trainiert wird nur ein 769-Parameter-Kopf. ~98% Genauigkeit.
Entstanden als Teil eines Team-Portfolio-Projekts meiner Data-Science-Weiterbildung (2022); den Klassifikator selbst — Konzept, Labeling, Umsetzung — habe ich eigenständig gebaut. Code auf GitHub: SinaRampe/question_classifier.
Was der Klassifikator macht
Eine Frage kommt rein — „What is the treatment for high-grade astrocytomas?“ — und am Ende steht eine binäre Entscheidung: Gesundheitsthema oder nicht. Anwendungsbeispiel: eine Frage-Antwort-Pipeline, die gesundheitsbezogene Anfragen sauber von allem anderen trennen will.
Die Methode: Transformer einfrieren, Kopf trainieren
Die Idee stammt aus Kapitel 2 („Classification“) des O’Reilly-Buchs Natural Language Processing with Transformers: Man nutzt ein vortrainiertes DistilBERT (eine destillierte, kleinere BERT-Variante) als eingefrorenen Feature-Extractor. Die Transformer-Gewichte bleiben während des kompletten Trainingslaufs unangetastet. Stattdessen:
- Jede Frage wird tokenisiert und vom DistilBERT encodiert; herauskommen Hidden States — 768-dimensionale Vektoren aus der letzten versteckten Schicht.
- Die [CLS]-Hidden-States — die komprimierte Repräsentation der ganzen Frage — werden als Features genommen.
- Darauf sitzt eine schlichte logistische Regression — und genau die wird trainiert.
Der Effekt: die Sprachverständnis-Leistung eines Transformers, ohne ein Transformer-Training. Läuft komplett auf der CPU, ~98% Genauigkeit auf dem Hold-out-Split. Für die Aufgabe genau richtig dimensioniert.
Und das ist der springende Punkt bei Binärklassifikation: Es ist ein kompletter Trainingslauf — aber trainiert werden nur 769 Parameter (die 768 Gewichte der logistischen Regression plus Bias), gerade mal 0,001% des Modells. Der Encoder darüber, DistilBERT mit 66 Millionen Parametern, bleibt komplett eingefroren. Zur Einordnung gegen heutige LLMs: Das kleinste aktuelle Llama (3.2, 1 Milliarde Parameter) ist 15-mal so groß wie DistilBERT, ein 8B-Modell ist 121-mal, ein 70B-Modell über 1.000-mal so groß. Wer für eine Ja/Nein-Entscheidung ein solches Modell komplett trainiert oder fine-tunt, verschwendet Rechenzeit und Energie: Klein reicht, wenn die Repräsentation stimmt.
Das Prinzip dahinter: Bedeutung als Position im Raum
Was passiert eigentlich, wenn eine Frage in das Modell geht? DistilBERT rechnet nicht mit Wörtern, sondern mit Zahlen. Aus jeder Frage macht der Encoder einen Vektor aus 768 Zahlen — und diese Zahlen sind im Kern eine mathematische Repräsentation von Semantik (Bedeutung): Fragen mit ähnlicher Bedeutung landen an benachbarten Punkten in diesem 768-dimensionalen Raum, Fragen mit unterschiedlicher Bedeutung woanders. Diese „Bedeutungs-Landkarte“ hat sich das Modell nicht ausgedacht — sie steckt in den Gewichten aus dem Training auf riesigen Textmengen. Der Klassifikator nutzt die Landkarte nur, er verändert sie nicht.
Das Bild macht davon einen Ausschnitt sichtbar: Mit UMAP (einem nichtlinearen Verfahren, das hochdimensionale Daten für die Visualisierung auf zwei Dimensionen staucht — 768 Dimensionen passen auf keinen Bildschirm) sind die Trainingsfragen in die Ebene projiziert. Links die Punktdichte der nicht-Gesundheits-Fragen (blau), rechts die der Gesundheits-Fragen (rot).
Man sieht: Die beiden Gruppen sitzen an unterschiedlichen Stellen im Raum — nicht perfekt getrennt, an den Rändern überlappen sie, aber ihre Dichtezentren liegen klar woanders. Genau deshalb reicht eine einfache lineare Trennlinie — im Bild eine Gerade, im vollen Raum eine Ebene. Sie hat 769 Parameter. Die etwa 2% Fehler des Klassifikators stammen vor allem aus dieser Grauzone der Überlappung.

Was drin ist, und was nicht
Der Datensatz: 2.226 Fragen, alle einer Quelle zugeordnet — 1.355 aus SQuAD (Stanford Question Answering Dataset; überwiegend die Nicht-Gesundheits-Fragen, plus wenige Gesundheitsfragen) und 871 aus AskDocs (Reddit r/AskDocs, Titel). Die Labels (Gesundheit ja/nein) habe ich selbst gesetzt.
Wichtig für die Einordnung: SQuAD steht unter CC BY-SA 4.0, AskDocs unter GPL-3.0 — beides Lizenzen mit Weitergabe-Bedingungen. Deshalb liegt im Repo kein vorgefertigter Datensatz. Stattdessen enthält es labels.csv (die Label-Entscheidungen: Quelle, ID, Label, Split) und ein Build-Skript, das die Fragetexte reproduzierbar aus den Originalquellen zieht. Ein Teil der Fragen aus der ersten Version ließ sich keiner lizenzierbaren Quelle zuordnen — die sind konsequent entfernt worden. README und NOTICE dokumentieren Quellen und Lizenzen vollständig.
Warum das Projekt für mich zählt
Es war das erste Mal, dass ich eine Methode aus der Fachliteratur aufgezogen und eigenständig umgesetzt habe.