SLM — Small Language Model italiano
Transformer decoder in italiano da 46 milioni di parametri, addestrato da zero su un laptop Apple M2 da 8 GB. Non è un'alternativa ai modelli grandi: è uno strumento per capire come funziona un LLM dall'interno, e un esperimento su quanto sia possibile con risorse minime.
"Costruire qualcosa dall'interno è il modo più diretto per capirlo."
Il codice sorgente completo (architettura, training, strumenti corpus, documentazione) è su github.com/c1cc10/slm.
Scaricare e usare il modello
1. Scarica un file GGUF
# Versione leggera — Q8_0, 56 MB (raccomandato)
huggingface-cli download c1cc10/slm-italiano slm-run4-q8_0.gguf --local-dir .
# Versione completa — fp32, 207 MB (qualità massima)
huggingface-cli download c1cc10/slm-italiano slm-run4.gguf --local-dir .
2. Installa llama.cpp
Mac (compila da sorgente, ~2 minuti):
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make -j
Windows (binari precompilati):
Scarica llama-*-bin-win-avx2-x64.zip da github.com/ggerganov/llama.cpp/releases, estrai ed esegui da terminale.
3. Genera testo
# Con il file già scaricato:
./llama-cli --model slm-run4-q8_0.gguf \
-p "Il Parlamento europeo" \
-n 100 --temp 0.8 --repeat-penalty 1.1
# Scarica ed esegui direttamente da HuggingFace:
./llama-cli -hf c1cc10/slm-italiano \
--hf-file slm-run4-q8_0.gguf \
-p "L'intelligenza artificiale" \
-n 80
Parametri consigliati:
--temp 0.7–0.9— creatività (più alto = più variabile)--repeat-penalty 1.1— riduce ripetizioni--ctx-size 512— finestra di contesto (limite del modello)
Architettura
| Parametro | Valore |
|---|---|
| Architettura | Decoder-only Transformer (GPT-NeoX) |
| Parametri | 45.997.056 |
| Layer | 12 |
| d_model | 512 |
| Teste attenzione | 8 |
| d_ff | 2048 |
| Sequenza max | 512 token |
| Positional encoding | RoPE (Rotary Position Embedding) |
| Tokenizer | BPE SentencePiece, vocabolario 16.000 token |
| Lingua | Italiano |
Risultati training
| Run | Corpus | Step | Val loss | PPL |
|---|---|---|---|---|
| Run #3 | Wikipedia IT (47.8 M token) | 30.000 | 4.0768 | ~59 |
| Run #4 ← questo repo | Wikipedia IT + RoPE | 30.000 | 3.5861 | ~36 |
| Run #5 🔄 | Wikipedia + CulturaX + letterario (918 M token target) | in corso | — | — |
Il checkpoint in questo repository è Run #4 (step 27.500, miglior val loss), addestrato su GPU RTX 4090 via Vast.ai (76 minuti).
Run #5 è in corso su Apple M2 con corpus espanso (7.7 GB, Chinchilla-optimal). I file aggiornati saranno pubblicati al completamento.
File disponibili
| File | Dimensione | Tipo | RAM richiesta |
|---|---|---|---|
slm-run4-q8_0.gguf | 56 MB | Q8_0 | ~300 MB |
slm-run4.gguf | 207 MB | fp32 | ~800 MB |
Limitazioni
- Registro enciclopedico: addestrato principalmente su Wikipedia → genera testo formale, non conversazionale
- 46M parametri: coerenza su frasi, non su testi lunghi; nessuna conoscenza del mondo profonda
- Nessun instruction tuning: genera completamenti, non risponde a domande in modo diretto
- PPL ~36: comprensibile e grammaticalmente corretto, non fluente come modelli da 1B+
Corpus
corpus_run5.txt (7.7 GB) =
Wikipedia IT (208 M caratteri — base enciclopedica)
+ CulturaX IT filtered (PPL threshold 95, filtro euristico + dedup)
+ corpus letterario (EPUB narrativa italiana contemporanea)
+ corpus personale (voce narrativa dell'autore)
Il filtro PPL ha usato il checkpoint Run #3 come giudice: documenti con perplexity > 95 scartati. Soglia alta per evitare bias verso il registro Wikipedia.
Citazione
@misc{slm-italiano-2026,
author = {c1cc10},
title = {SLM — Small Language Model italiano},
year = {2026},
url = {https://huggingface.co/c1cc10/slm-italiano}
}