feat(mobile,#290): label-spezifische NLI-Hypothesen #291

Closed
admin-mrrm wants to merge 1 commit from feat/290-nli-label-hypotheses into main
Owner

Schließt #290.

Änderung

Statt eines einzigen generischen Hypothesen-Templates ("Diese E-Mail handelt von ${label}.") verwendet der mobile NLI-Klassifier jetzt pro Default-Kategorie eine konkrete deutsche Hypothese:

  • SendungDiese E-Mail informiert über eine Paketlieferung oder den Versand.
  • RechnungDiese E-Mail enthält eine Rechnung oder eine Zahlungsaufforderung.
  • KontoDiese E-Mail betrifft ein Benutzerkonto, ein Login oder ein Passwort.
  • (… 12 insgesamt, siehe CATEGORY_NLI_HYPOTHESES in shared-types)

User-Tags ohne Eintrag in der Map fallen auf den alten generischen Wortlaut zurück.

Warum

mDeBERTa-XNLI wurde auf natürlichsprachlichen NLI-Paaren trainiert. Sätze wie "Diese E-Mail handelt von Sendung." sind grammatikalisch holprig und semantisch dünn — konkretere Hypothesen geben dem Modell den passenden Anchor. Ziel: spürbar bessere Entailment-Scores in der bisherigen Close-Miss-Band 0.25–0.30 (siehe #268).

Debug-Log

Die JSONL-Einträge enthalten jetzt pro Kandidat die tatsächlich verwendete Hypothese (candidates[i].hypothesis). templateUsed bleibt für Backwards-Compat. Der API-Endpoint + Service akzeptieren das neue Feld optional, alte Clients funktionieren weiter.

Tests

  • 4 neue Tests in nli-hypotheses.spec.ts (Map vollständig, Fallback korrekt)
  • 3 neue Tests in nli-classifier.spec.ts (per-Label-Tokenisierung, Result enthält hypothesis, Fallback)
  • 1 neuer Test in model-manager.spec.ts (Debug-Log forwarded Hypothese)
  • Mobile: 49/49 grün · API: 214/214 grün · Typecheck sauber

Analyze-Script gegen die alte JSONL gibt die Baseline 64 % Fast-Path-Hit-Rate für den Vergleich nach Mobile-Restart.

Out of scope

  • A/B-Tooling für mehrere Templates (vertagt — ARM/ONNX-Blocker)
  • Sender-Memory / Pro-Label-Threshold / Correction-Rules (separate Issues, online-driven)
Schließt #290. ## Änderung Statt eines einzigen generischen Hypothesen-Templates ("Diese E-Mail handelt von ${label}.") verwendet der mobile NLI-Klassifier jetzt pro Default-Kategorie eine konkrete deutsche Hypothese: - `Sendung` → `Diese E-Mail informiert über eine Paketlieferung oder den Versand.` - `Rechnung` → `Diese E-Mail enthält eine Rechnung oder eine Zahlungsaufforderung.` - `Konto` → `Diese E-Mail betrifft ein Benutzerkonto, ein Login oder ein Passwort.` - (… 12 insgesamt, siehe `CATEGORY_NLI_HYPOTHESES` in shared-types) User-Tags ohne Eintrag in der Map fallen auf den alten generischen Wortlaut zurück. ## Warum mDeBERTa-XNLI wurde auf natürlichsprachlichen NLI-Paaren trainiert. Sätze wie "Diese E-Mail handelt von Sendung." sind grammatikalisch holprig und semantisch dünn — konkretere Hypothesen geben dem Modell den passenden Anchor. Ziel: spürbar bessere Entailment-Scores in der bisherigen Close-Miss-Band 0.25–0.30 (siehe #268). ## Debug-Log Die JSONL-Einträge enthalten jetzt pro Kandidat die *tatsächlich* verwendete Hypothese (`candidates[i].hypothesis`). `templateUsed` bleibt für Backwards-Compat. Der API-Endpoint + Service akzeptieren das neue Feld optional, alte Clients funktionieren weiter. ## Tests - 4 neue Tests in `nli-hypotheses.spec.ts` (Map vollständig, Fallback korrekt) - 3 neue Tests in `nli-classifier.spec.ts` (per-Label-Tokenisierung, Result enthält `hypothesis`, Fallback) - 1 neuer Test in `model-manager.spec.ts` (Debug-Log forwarded Hypothese) - Mobile: 49/49 grün · API: 214/214 grün · Typecheck sauber Analyze-Script gegen die alte JSONL gibt die Baseline 64 % Fast-Path-Hit-Rate für den Vergleich nach Mobile-Restart. ## Out of scope - A/B-Tooling für mehrere Templates (vertagt — ARM/ONNX-Blocker) - Sender-Memory / Pro-Label-Threshold / Correction-Rules (separate Issues, online-driven)
feat(mobile,#290): label-spezifische NLI-Hypothesen statt generisches Template
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
80adba93ac
Bisher nutzte der mobile NLI-Klassifier ein einziges Template
("Diese E-Mail handelt von ${label}.") für alle Labels — grammatikalisch
holprig (v.a. für "Sendung", "Konto") und semantisch dünn. mDeBERTa-XNLI
wurde auf natürlichsprachlichen NLI-Paaren trainiert, profitiert also
von konkreteren Hypothesen-Sätzen pro Label.

Änderungen:

- CATEGORY_NLI_HYPOTHESES + buildNliHypothesis() in @mrrmlab/shared-types
  (eine konkrete deutsche Hypothese pro Default-Kategorie, generischer
  Fallback für User-Tags)
- nli-classifier verwendet pro Label die passende Hypothese und gibt sie
  zusammen mit dem Score zurück (NliResult.hypothesis)
- nli-debug-log-Payload + JSONL-Schema akzeptieren das neue Feld
  (optional → rückwärtskompatibel mit pre-#290-Logs)

Tests: 49 mobile + 214 API alle grün, typecheck sauber. Wirkungsanalyse
gegen das vorhandene 214-Zeilen-JSONL liefert die Baseline 64 % Fast-Path-
Hit-Rate; Vergleich nach Mobile-Restart auf neuem Log.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
admin-mrrm closed this pull request 2026-05-14 23:48:14 +02:00
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
Required
Details

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!291
No description provided.