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:
138
README.md
138
README.md
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user