- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
5.3 KiB
BUILD-A3: Torrkörning — Valideringsresultat (aamos_train_v3 / aamos_val_v3)
Datum: 2026-06-06
Utfört av: Subagent BUILD-A3
Script körd på: AAMOS-server (ej GPU-boxen — ingen GPU krävdes)
Valideringsscript: /home/bernt/.openclaw/workspace/build/validate_training_data.py
🟢 SLUTDOM: DATAN ÄR KLAR FÖR TRÄNING
Noll problem hittades. Alla 37 052 exempel (33 352 träning + 3 700 validering) passerar samtliga tester.
Resultat per test
[1] JSONL-integritet
| Mätvärde | Träning | Validering |
|---|---|---|
| Icke-tomma rader | 33 352 | 3 700 |
| Korrekt laddade records | 33 352 | 3 700 |
| JSON-parse-fel | 0 | 0 |
| Format-distribution | messages_key: 33352 |
messages_key: 3700 |
Alla rader är giltig JSON. Alla hamnar direkt i messages_key-grenen — det enklaste och mest robusta flödet i load_dataset_from_jsonl().
[2] Chat-format validering
| Kontroll | Träning | Validering |
|---|---|---|
| Har system-meddelande | 33 352 / 33 352 ✅ | 3 700 / 3 700 ✅ |
| Har user-meddelande | 33 352 / 33 352 ✅ | 3 700 / 3 700 ✅ |
| Har assistant-meddelande | 33 352 / 33 352 ✅ | 3 700 / 3 700 ✅ |
| Tomma content-fält | 0 ✅ | 0 ✅ |
| Valideringsfel (messages) | 0 ✅ | 0 ✅ |
| Roll-profil | [assistant, system, user] (100%) |
[assistant, system, user] (100%) |
100% av exemplen har exakt triaden system+user+assistant. Noll avvikelser.
[3] Token-längd-distribution
Uppskattningsmetod: len(text) // 4 på ChatML-formaterad text (<|im_start|>role\ncontent<|im_end|>\n)
Träningsdata (33 352 exempel)
| Percentil | Tokens |
|---|---|
| p50 (median) | 176 |
| p75 | 202 |
| p90 | 339 |
| p95 | 632 |
| p99 | 723 |
| p100 (max) | 1 006 |
Histogram:
0-200 : 24 544 ( 73.6%) █████████████████████████████
200-400 : 5 607 ( 16.8%) ██████
400-600 : 878 ( 2.6%) █
600-800 : 2 233 ( 6.7%) ██
800-1000 : 89 ( 0.3%)
1000-1200 : 1 ( 0.0%)
1200+ : 0 ( 0.0%)
Valideringsdata (3 700 exempel)
| Percentil | Tokens |
|---|---|
| p50 | 176 |
| p95 | 626 |
| p99 | 702 |
| max | 884 |
[4] Verifiering av load_dataset_from_jsonl()
Scriptet simulerade exakt load_dataset_from_jsonl()-logiken mot de faktiska filerna:
- ✅ Alla 33 352 träningsexempel laddas utan fel
- ✅ Alla 3 700 valideringsexempel laddas utan fel
- ✅ Samtliga hamnar i
messages_key-grenen (rätt format) - ✅
Dataset.from_list()kan köras utan problem - ✅ Alla
content-fält är strängar (inga null, inga icke-strängar) - ✅ Strikt
[system, user, assistant]-struktur i 100% av fallen
Scriptet hanterar formatet korrekt utan modifikationer.
[5] CANON-stickprov
| Nyckelord | Träning | Validering | Status |
|---|---|---|---|
infrastrukturkontroll |
97 förekomster | 0 | ✅ (injicerat i träning, ej val — förväntat) |
559141-7042 (korrekt org-nr) |
33 352 förekomster | 3 700 | ✅ (finns i ALLA system-prompts) |
eskalera |
156 förekomster | 5 | ✅ |
559316-3881 (felaktigt org-nr) |
0 förekomster | 0 | ✅ Rensat |
CANON-fix bekräftad: Det gamla felaktiga org-numret 559316-3881 finns i noll rader. Det korrekta 559141-7042 är genomgående i 100% av exemplen (i system-prompten).
Att infrastrukturkontroll inte finns i valdata är förväntat — CANON-exempel injicerades primärt i träningsdatan.
max_seq_length-rekommendation (A2-relevant)
| Statistik | Värde |
|---|---|
| p95 | 632 tokens |
| p99 | 723 tokens |
| max | 1 006 tokens |
| Överstiger 2048 | 0 av 33 352 (0.0%) |
| Överstiger 1024 | 0 av 33 352 (0.0%) |
DOM: max_seq_length=2048 ÄR TILLRÄCKLIGT ✅
Det längsta exemplet i hela datasetet är ~1 006 tokens. Det innebär att max_seq_length=2048 ger dubbel marginal mot det faktiska maximum. Ingen trunkering sker överhuvudtaget.
Konsekvens för A2:s VRAM-kalkyl: A2:s antagande om max_seq_length=2048 är korrekt — men om VRAM är ont kan max_seq_length=1024 användas utan dataförlust (99% av exemplen är ≤723 tokens). Det längsta enskilda exemplet (1 006 tokens) skulle trunkeras marginellt vid 1024.
Rekommendation: Behåll max_seq_length=2048 som planerat. Det ger säker marginal och inga pad/truncation-överraskningar. Sänk till 1024 om VRAM är ett problem (inga reella dataförluster, minimal effekt på kvalitet).
Sammanfattning
Träningsdata: 33 352 records — 0 fel
Valideringsdata: 3 700 records — 0 fel
JSON-parse-fel: 0
Format-fel: 0
Tomma content: 0
Överstiger 2048: 0 (max är 1006 tokens)
CANON korrekt: Ja (org-nr, nyckelbegrepp, 0 fel org-nr)
load_dataset(): Fungerar korrekt
DOM: 🟢 KLAR FÖR TRÄNING
Bilagor
- Valideringsscript:
/home/bernt/.openclaw/workspace/build/validate_training_data.py - Träningsscript:
/home/bernt/.openclaw/workspace/build/train_eslm.py - Träningsdata:
/opt/amos/data/finetune-exports/aamos_train_v3.jsonl(33 352 rader) - Valideringsdata:
/opt/amos/data/finetune-exports/aamos_val_v3.jsonl(3 700 rader)