Downloads · 30 days
0
fhswf/ner-lanuk-luftqualitaet
ner-lanuk-luftqualitaet is a token classification model from fhswf. Use it when you need labels on individual words, such as names. The card lists the license as cc-by-4.0.
Ein spaCy-EntityRecognizer für sechs Fachklassen (SCHADSTOFF, ORGANISATION, MESSWERT, MESSSTATION, RECHTSNORM, GRENZWERT), trainiert auf dem Silberstandard des Datensatzes fhswf/lanuk-luftqualitaet-ner, plus die Regel…
Downloads · 30 days
0
Access
Public
Updated Sep 21, 2026
Repo size
6.4 MB
Likes
0
Public
Click a slice to open those files.
Other6.4 MB · 99%
From the Hugging Face model README
Ein spaCy-EntityRecognizer für sechs Fachklassen (SCHADSTOFF, ORGANISATION, MESSWERT,
MESSSTATION, RECHTSNORM, GRENZWERT), trainiert auf dem Silberstandard des Datensatzes
fhswf/lanuk-luftqualitaet-ner, plus die Regel- und Gazetteer-Schicht, mit der zusammen es das
Hybrid bildet — das beste System der zugehörigen Studienarbeit (micro-F₁ 0,844 auf dem
menschlich annotierten Testsplit).
Autor: Simeon Ehmer, Fachhochschule Südwestfalen, September 2026. Lizenz: CC BY 4.0
(Gewichte, Regelschicht, laden.py); der Trainingsdatensatz fhswf/lanuk-luftqualitaet-ner
steht unter CC BY-NC 4.0.
| Pfad | Inhalt |
|---|---|
spacy_ner_lanuk_weights/ | NER-Gewichte (spaCy 3.8.14, TransitionBasedParser.v2, MultiHashEmbed + statische Vektoren), gespeichert mit exclude=["vocab"]; ner/model SHA-256 6c08defe0f4036c4… |
regeln/preannotation_entityruler.py, regeln/stationen.json | Regel- und Gazetteer-Schicht (Stand Juli 2026) und Stationsliste (79 Messorte, LUQS) |
laden.py | lädt Domänenmodell, Regeln und Hybrid und zeigt die drei Vorhersagen für einen Beispielsatz |
requirements-cpu.txt | gepinnte Umgebung (Python 3.11.9, spaCy 3.8.14, de_core_news_lg 3.8.0) |
training_history.json, dev_werte.json, eval_test.json | Trainingsverlauf, Dev- und Testkennzahlen |
Die Gewichte brauchen die statischen Vektoren aus de_core_news_lg 3.8.0 (500.000 Schlüssel,
300 Dimensionen), genau wie im Training:
pip install -r requirements-cpu.txt
pip install https://github.com/explosion/spacy-models/releases/download/de_core_news_lg-3.8.0/de_core_news_lg-3.8.0-py3-none-any.whl
python laden.py "Für Benzol ist in der 39. BImSchV ein Grenzwert von 5 µg/m³ festgesetzt."
from laden import domaenenmodell, regelschicht, hybrid
nlp = domaenenmodell() # spaCy-Pipeline mit NER
pred_r = regelschicht() # text -> [[start, end, label], ...]
pred_h = hybrid(nlp, pred_r) # Hybrid: SCHADSTOFF aus Regeln, Rest aus dem Modell, Regeln haben Vorrang
pred_h("Für Benzol ist in der 39. BImSchV ein Grenzwert von 5 µg/m³ festgesetzt.")
| Trainingsdaten | 315 Sätze, 290 Spannen (Silberstandard, LLM-gestützt, nicht menschlich geprüft) |
| Dev | 55 Sätze, 38 Spannen (drei Klassen) — Modellwahl nach Dev-F₁ |
| Architektur | spacy.TransitionBasedParser.v2, tok2vec: MultiHashEmbed.v2 (NORM, PREFIX, SUFFIX, SHAPE; Breite 96) + MaxoutWindowEncoder.v2 (Breite 96, Tiefe 4), statische Vektoren aus de_core_news_lg |
| Optimierung | Adam (spaCy-Standard), Dropout 0,1, Batch 4 → 32 (compounding), höchstens 40 Epochen, Early Stopping mit Patience 8 |
| Ergebnis | 17 Epochen, beste Epoche 8, Dev-F₁ 0,806; Training 144 s auf CPU; Seed 42; bitgleich wiederholt am 15.09.2026 |
| Keine Hyperparametersuche | bei 38 Dev-Spannen wäre sie Anpassung an Rauschen |
| System | P | R | micro-F₁ | macro-F₁ (4 Klassen) | F₁ nur offene Klassen |
|---|---|---|---|---|---|
| Regeln/Gazetteer | 1,000 | 0,646 | 0,785 | 0,429 | 0,263 |
| Domänenmodell (diese Gewichte) | 0,781 | 0,633 | 0,699 | 0,541 | 0,516 |
| Hybrid | 0,912 | 0,785 | 0,844 | 0,578 | 0,593 |
zum Vergleich: deepset/gbert-large feinabgestimmt | 0,744 | 0,848 | 0,793 | 0,685 | 0,611 |
Je Klasse (F₁, Hybrid): SCHADSTOFF 0,989 · ORGANISATION 0,824 · RECHTSNORM 0,500 ·
MESSWERT 0,000 (siehe Grenzen). Der Vorsprung des Hybrids ist im gepaarten Bootstrap
(1.000 Ziehungen) belegt: +0,061 gegen die Regeln (p = 0,026), +0,140 gegen das Domänenmodell
(p < 0,002), +0,051 gegen gbert-large (p = 0,040). Vollständig in eval_test.json und im
Belegexemplar (Notebook, Kapitel 9–10).
ppb-Lücke. Das Messwertmuster der Regeln kennt Massenkonzentrationen (µg/m³), keine
Volumenmischungsverhältnisse (ppb, nmol/mol); das Training enthält keinen ppb-Wert. Auf
dem Testsplit (elf ppb-Werte) ist MESSWERT für Regeln, Modell und Hybrid 0,000. Die Lücke
wurde in der Arbeit bewusst nicht geschlossen, um sie messen zu können; eine Regelzeile behebt sie.MESSSTATION und GRENZWERT kommen im Testsplit nicht vor; die
Leistung darauf ist unbekannt.Ehmer, S. (2026): Domänenspezifische Named Entity Recognition auf deutschen Luftqualitäts- und Behördentexten. Studienarbeit, Fachhochschule Südwestfalen. Modell: https://huggingface.co/fhswf/ner-lanuk-luftqualitaet · Datensatz: https://huggingface.co/datasets/fhswf/lanuk-luftqualitaet-ner