docs: add live Gemma-4 e-learning examples to README

Summary table of 5 escalating cases + two inline worked examples (baseline
signup, HR multi-person coreference) + collapsible details (login username
coinage, two-IBAN distinction, minor+health dense coreference). Real
(fictional-data) output, all 5/5 round-trips.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mobiletic
2026-07-01 11:03:00 +01:00
parent 2584bd8c95
commit bc34d9470e

138
README.md
View File

@@ -214,6 +214,144 @@ Three distinct outputs, with different sensitivities:
| `mapping` | `{ "[PER_1.NOM:M]": "Alain Jaccard" }` | **Secret** — re-identifies people; keep it on your side | | `mapping` | `{ "[PER_1.NOM:M]": "Alain Jaccard" }` | **Secret** — re-identifies people; keep it on your side |
| `legend` | `{ "PER": "Personne", "M": "Masculin" }` | Safe to share — explains the tokens to a downstream LLM | | `legend` | `{ "PER": "Personne", "M": "Masculin" }` | Safe to share — explains the tokens to a downstream LLM |
## Examples
Real learner ↔ platform chat messages, anonymized **live by Gemma 4** (via Infomaniak) with no regex
fallback. All personal data below is **fictional**. `mapping` is the secret re-identification key (kept by
the operator); `legend` is safe to send to the downstream model. Every case restores identically.
| # | Scenario | Sensitive data detected | Notable capability | Round-trip |
| --- | ----------------------- | --------------------------------------------------- | ----------------------------------------- | ---------- |
| 1 | Course signup | name, e-mail | baseline detection | ✅ |
| 2 | Login problem | + username, phone, signup date | coins `[PER_1.ID_USER:LOGIN]` on the fly | ✅ |
| 3 | Billing / IBAN change | + address, **two IBANs**, AVS | old vs new IBAN kept **distinct** | ✅ |
| 4 | HR enrolls staff | **3 people** + org, e-mails, phones, DOB, IBAN | coreference (same person → same id) + org | ✅ |
| 5 | Parent + minor + health | 3 people, DOB, address, contacts, IBAN, maiden name | minor/guardian/doctor kept distinct | ✅ |
### Case 1 — course signup (baseline)
**User message:**
> Bonjour, je suis Jean Dupont et mon adresse e-mail est jean.dupont@yopmail.com. Je viens de m'inscrire à la formation « Bureautique de base » et je voulais confirmer que tout est en ordre. Merci d'avance !
**Anonymized — what the model sees:**
> Bonjour, je suis [PER_1.PRENOM:M] [PER_1.NOM:M] et mon adresse e-mail est [PER_1.EMAIL:PERSO]. Je viens de m'inscrire à la formation « Bureautique de base » et je voulais confirmer que tout est en ordre. Merci d'avance !
| `mapping` 🔒 (secret) | value | | `legend` 🏷️ (shareable) | meaning |
| --------------------- | ----------------------- | --- | ----------------------- | ------------------ |
| `[PER_1.PRENOM:M]` | Jean | | `PER` | Personne |
| `[PER_1.NOM:M]` | Dupont | | `PRENOM` / `NOM` | Prénom / Nom |
| `[PER_1.EMAIL:PERSO]` | jean.dupont@yopmail.com | | `EMAIL` · `M` · `PERSO` | E-mail · M · Perso |
Note the course name « Bureautique de base » is **left intact** — it isn't personal data.
### Case 4 — HR enrolls staff (coreference + organization)
**User message:**
> Bonjour, je suis Sophie Meyer, responsable formation chez Nestlé Suisse (sophie.meyer@nestle.com, +41 21 924 11 11). Je souhaite inscrire deux collaborateurs à la formation « Sécurité au travail » qui débute le 03/03/2026 : Marc Rossi, né le 12.03.1990 (marc.rossi@nestle.com), et Amélie Girard, joignable au 078 321 65 43. La facture est à adresser à notre comptabilité, IBAN CH93 0076 2011 6238 5295 7. Marc Rossi avait déjà suivi une formation l'an dernier — pouvez-vous réactiver son ancien compte plutôt que d'en créer un nouveau ?
**Anonymized — what the model sees** (note **Marc Rossi → `PER_2` in both mentions**, and the org as `ORG_1`):
> Bonjour, je suis [PER_1.PRENOM:F] [PER_1.NOM:F], responsable formation chez [ORG_1.NOM:Entreprise] ([PER_1.EMAIL:F], [PER_1.TELEPHONE:F]). Je souhaite inscrire deux collaborateurs à la formation « Sécurité au travail » qui débute le 03/03/2026 : [PER_2.PRENOM:M] [PER_2.NOM:M], né le [PER_2.DATE_NAISSANCE:1990] ([PER_2.EMAIL:M]), et [PER_3.PRENOM:F] [PER_3.NOM:F], joignable au [PER_3.TELEPHONE:F]. La facture est à adresser à notre comptabilité, IBAN [ORG_1.IBAN:Comptabilite]. [PER_2.PRENOM:M] [PER_2.NOM:M] avait déjà suivi une formation l'an dernier — pouvez-vous réactiver son ancien compte plutôt que d'en créer un nouveau ?
**`mapping` 🔒 (secret — kept on your side):**
| Placeholder | Real value |
| ----------------------------- | -------------------------- |
| `[PER_1.PRENOM:F]` | Sophie |
| `[PER_1.NOM:F]` | Meyer |
| `[ORG_1.NOM:Entreprise]` | Nestlé Suisse |
| `[PER_1.EMAIL:F]` | sophie.meyer@nestle.com |
| `[PER_1.TELEPHONE:F]` | +41 21 924 11 11 |
| `[PER_2.PRENOM:M]` | Marc |
| `[PER_2.NOM:M]` | Rossi |
| `[PER_2.DATE_NAISSANCE:1990]` | 12.03.1990 |
| `[PER_2.EMAIL:M]` | marc.rossi@nestle.com |
| `[PER_3.PRENOM:F]` | Amélie |
| `[PER_3.NOM:F]` | Girard |
| `[PER_3.TELEPHONE:F]` | 078 321 65 43 |
| `[ORG_1.IBAN:Comptabilite]` | CH93 0076 2011 6238 5295 7 |
**`legend` 🏷️ (shareable — sent to the downstream model):** `PER`=Personne, `PRENOM`=Prénom, `NOM`=Nom de
famille, `F`=Féminin, `M`=Masculin, `ORG`=Organisation, `EMAIL`=Adresse e-mail, `TELEPHONE`=Numéro de
téléphone, `DATE_NAISSANCE`=Date de naissance, `IBAN`=Numéro de compte bancaire.
<details>
<summary><b>More examples — Case 2 (login), Case 3 (two IBANs), Case 5 (minor + health)</b></summary>
#### Case 2 — login problem (coins an abbreviation for the username)
**User message:**
> Salut, moi c'est Marie Favre. J'ai créé mon compte avec l'e-mail marie.favre@bluewin.ch le 15/02/2026 mais je n'arrive plus à me connecter. Mon identifiant est mfavre et vous pouvez me joindre au 079 456 78 90. Pouvez-vous réinitialiser mon accès à la formation « Machiniste » ?
**Anonymized:**
> Salut, moi c'est [PER_1.PRENOM:F] [PER_1.NOM:F]. J'ai créé mon compte avec l'e-mail [PER_1.EMAIL:PERSO] le [PER_1.DATE_CREATION:2026] mais je n'arrive plus à me connecter. Mon identifiant est [PER_1.ID_USER:LOGIN] et vous pouvez me joindre au [PER_1.TELEPHONE:MOBILE]. Pouvez-vous réinitialiser mon accès à la formation « Machiniste » ?
| Placeholder | Real value |
| ---------------------------- | ---------------------- |
| `[PER_1.PRENOM:F]` | Marie |
| `[PER_1.NOM:F]` | Favre |
| `[PER_1.EMAIL:PERSO]` | marie.favre@bluewin.ch |
| `[PER_1.DATE_CREATION:2026]` | 15/02/2026 |
| `[PER_1.ID_USER:LOGIN]` | mfavre |
| `[PER_1.TELEPHONE:MOBILE]` | 079 456 78 90 |
`ID_USER` and `DATE_CREATION` are **coined by the model** — not in the base vocabulary — and documented in
the legend.
#### Case 3 — billing / IBAN change (two different IBANs kept distinct)
**User message:**
> Bonjour, je m'appelle Luc Berset, domicilié au 14 avenue de la Gare, 1700 Fribourg. J'ai un souci avec le paiement de la formation « Comptabilité PME » (CHF 1'200.) : mon IBAN CH93 0076 2011 6238 5295 7 n'est plus valide, je souhaite le remplacer par CH56 0483 5012 3456 7800 9. Si besoin, mon numéro AVS est le 756.1234.5678.90. Merci de mettre à jour mon dossier.
**Anonymized** (old and new IBAN get **distinct** placeholders via context):
> Bonjour, je m'appelle [PER_1.PRENOM:M] [PER_1.NOM:M], domicilié au [PER_1.ADRESSE:Rue], [PER_1.ADRESSE:NPA] [PER_1.ADRESSE:Ville]. J'ai un souci avec le paiement de la formation « Comptabilité PME » (CHF 1'200.) : mon IBAN [PER_1.IBAN:Ancien] n'est plus valide, je souhaite le remplacer par [PER_1.IBAN:Nouveau]. Si besoin, mon numéro AVS est le [PER_1.AVS:Suisse]. Merci de mettre à jour mon dossier.
| Placeholder | Real value |
| ----------------------- | -------------------------- |
| `[PER_1.PRENOM:M]` | Luc |
| `[PER_1.NOM:M]` | Berset |
| `[PER_1.ADRESSE:Rue]` | 14 avenue de la Gare |
| `[PER_1.ADRESSE:NPA]` | 1700 |
| `[PER_1.ADRESSE:Ville]` | Fribourg |
| `[PER_1.IBAN:Ancien]` | CH93 0076 2011 6238 5295 7 |
| `[PER_1.IBAN:Nouveau]` | CH56 0483 5012 3456 7800 9 |
| `[PER_1.AVS:Suisse]` | 756.1234.5678.90 |
#### Case 5 — parent, minor child and health (dense coreference)
**User message:**
> Bonjour, je vous écris au sujet de mon fils, Lucas Favre, né le 04.07.2011, que j'aimerais inscrire à la formation junior « Robotique » à Lausanne. Étant mineur, c'est moi, sa mère Camille Favre, qui gère le dossier — vous pouvez me joindre au 021 555 12 34 ou à camille.favre@bluewin.ch, nous habitons au 8 chemin des Vignes, 1009 Pully. Lucas est asthmatique ; son médecin, le Dr Nadia Benali (cabinet à Renens), a établi un certificat le 15.05.2024. Par ailleurs, j'avais moi-même suivi la formation « Photographie » en 2023 sous mon nom de jeune fille, Camille Rochat — mes deux comptes peuvent-ils être fusionnés ? Le paiement se fera depuis mon IBAN CH56 0483 5012 3456 7800 9.
**Anonymized** (son = `PER_1`, mother = `PER_2` incl. her maiden name, doctor = `PER_3`):
> Bonjour, je vous écris au sujet de mon fils, [PER_1.PRENOM:M] [PER_1.NOM:M], né le [PER_1.DATE_NAISSANCE:2011], que j'aimerais inscrire à la formation junior « Robotique » à [LOC_1.VILLE:Lausanne]. Étant mineur, c'est moi, sa mère [PER_2.PRENOM:F] [PER_2.NOM:F], qui gère le dossier — vous pouvez me joindre au [PER_2.TELEPHONE:Fixe] ou à [PER_2.EMAIL:Privé], nous habitons au [PER_2.ADRESSE:Rue], [PER_2.ADRESSE:NPA] [PER_2.ADRESSE:Ville]. [PER_1.PRENOM:M] est asthmatique ; son médecin, le Dr [PER_3.PRENOM:F] [PER_3.NOM:F] (cabinet à [LOC_2.VILLE:Renens]), a établi un certificat le 15.05.2024. Par ailleurs, j'avais moi-même suivi la formation « Photographie » en 2023 sous mon nom de jeune fille, [PER_2.PRENOM:F] [PER_2.NOM_JEUNE_FILLE:F] — mes deux comptes peuvent-ils être fusionnés ? Le paiement se fera depuis mon IBAN [PER_2.IBAN:Principal].
| Placeholder | Real value |
| ------------------------------------------------- | ---------------------------------- |
| `[PER_1.PRENOM:M]` / `[PER_1.NOM:M]` | Lucas / Favre |
| `[PER_1.DATE_NAISSANCE:2011]` | 04.07.2011 |
| `[PER_2.PRENOM:F]` / `[PER_2.NOM:F]` | Camille / Favre |
| `[PER_2.NOM_JEUNE_FILLE:F]` | Rochat |
| `[PER_2.TELEPHONE:Fixe]` | 021 555 12 34 |
| `[PER_2.EMAIL:Privé]` | camille.favre@bluewin.ch |
| `[PER_2.ADRESSE:Rue/NPA/Ville]` | 8 chemin des Vignes / 1009 / Pully |
| `[PER_3.PRENOM:F]` / `[PER_3.NOM:F]` | Nadia / Benali |
| `[LOC_1.VILLE:Lausanne]` / `[LOC_2.VILLE:Renens]` | Lausanne / Renens |
| `[PER_2.IBAN:Principal]` | CH56 0483 5012 3456 7800 9 |
The health detail ("asthmatique") is kept as non-identifying context, and the reference chain
("mon fils" / "sa mère" / "son médecin") is resolved into three distinct entities.
</details>
## How this helps with the nLPD ## How this helps with the nLPD
Switzerland's [nLPD](https://www.fedlex.admin.ch/eli/cc/2022/491/fr) (and the GDPR) push for **data Switzerland's [nLPD](https://www.fedlex.admin.ch/eli/cc/2022/491/fr) (and the GDPR) push for **data