Tutorials
GLiNER für 9 Dollar fine-tunen: Wie Gemini seine eigene Ablösung trainierte
Peter Vijeh betrieb eine Pipeline, die Reddit-Kommentare über Kochmesser liest und daraus Marken-, Modell- und Stahl-Erwähnungen extrahiert - Named Entity Recognition (NER) auf Forentext. Das Problem: Forentext bricht jede Annahme, für die generische NER-Modelle trainiert wurden. Keine Grossschreibungs-Disziplin, Abkürzungen als Insider-Kürzel, Material-Bezeichnungen, die wie Teilenummern aussehen, und dasselbe Wort kann je nach Satz Marke oder generische Kategorie sein.
Der Ansatz: LLM als Etikettierer, kleines Modell als Arbeiter
Bisher lief jede Extraktion durch Gemini 3.1 Pro - ein bezahlter API-Call pro Kommentar, Kosten wuchsen mit dem Post-Aufkommen. Die Alternative: GLiNER (ein 459M-Parameter DeBERTa-v3-large Encoder) zero-shot betreiben. Kostet nichts, landete aber nur bei ~0.65 F1 - mit den teuren Fehlern: Kategorie-Wörter wurden selbstsicher als Marken getaggt, kleine Hersteller, die eine Empfehlungs-Engine gerade bräuchte, wurden still übersehen.
Die Lösung: Gemini labelt einmalig 4.290 Kommentare für 9 Dollar, GLiNER fine-tunen, danach lokal laufen lassen. Der entscheidende Prompt-Trick: nie nach Character-Offsets fragen. LLMs zählen Zeichen schlecht und liefern Spans, die um ein paar Positionen daneben liegen - schlimmer als kein Label. Stattdessen gibt das Modell den exakten Substring plus Label zurück, und deterministischer Code berechnet die Offsets. Etwa 30% der Trainingsbeispiele sind bewusst leere Kommentare mit typischen False-Positive-Triggern.
Was schiefging - und die Lektion
Fünf von zehn Training-Runs lieferten kein nutzbares Modell. Drei scheiterten an Config-Fallstricken des HF Trainers (max_steps override, eval_strategy, Checkpoint-Key-Prefix). Die teuren Fehler waren Runs 4 und 5: ein Tensor namens words_mask - vom Namen und Shape her nicht von einem Attention-Mask zu unterscheiden - war aber in Wahrheit ein Wort-Index (0 für Special/Padding-Tokens, dann 1, 2, 3 für das erste Subtoken je Wort). Als binär gefüllt, lernte das Modell schlicht nichts: flacher Loss bei 70-130, F1 nahe null, kein Crash, keine Warnung. Die Diagnose kam erst durch Lesen des Training-Loops statt der Docstrings.
Ergebnis
- 0,83 F1 auf einem vorab gelockten 225-Kommentar-Validierungsset (vs. ~0,65 zero-shot)
- Per-Class-Thresholds statt globalem Cutoff: Material-Recall von 0,787 auf 0,911
- Kosten: 9 Dollar Labels, ~2,50 Dollar GPU-Zeit (Tesla T4, 24 Minuten pro Run)
- Das Modell läuft lokal und amortisiert sich ab Kommentar 4.291
Fazit des Autors: Modell und Daten sind selten das Problem bei kleinen Fine-Tuning-Jobs - der Code dazwischen fällt aus, und ein flacher Loss durch einen falschen Input-Tensor sieht aus wie flacher Loss durch schwere Daten. Seine Konsequenz: lieber eine Assertion auf jedem selbstgebauten Tensor als ein besseres Label-Set.
Ein Paradebeispiel dafür, wie Frontier-LLMs als Silver-Labeler für spezialisierte kleine Modelle dienen - ohne Label-Team, ohne dauerhafte API-Kosten.
Link: Peter Vijeh