🌟 Che cos'è Lumina 2.75M?
Lumina 2.75M è un piccolo modello linguistico (Small Language Model - SLM) autoregressivo causale per la lingua italiana, progettato e addestrato interamente da zero senza riutilizzare modelli preaddestrati di giganti tecnologici, senza API esterne e senza tokenizer preconfigurati.
A differenza dei modelli da centinaia di milioni o miliardi di parametri che richiedono server cloud dedicati e gigabyte di RAM:
- Pesa solo 11 MB in formato nativo
safetensors. - Può essere eseguito istantaneamente su qualsiasi laptop, Raspberry Pi, smartphone o persino all'interno del browser web via JavaScript.
- Risponde con latenza quasi istantanea (< 0.1s su GPU o CPU standard).
💡 Filosofia del Progetto: Onestà contro Allucinazioni
Uno dei problemi più evidenti dei moderni modelli linguistici di grandi dimensioni è la tendenza all'allucinazione: inventare fatti storici, formule matematiche errate o risposte stravaganti con tono autorevole.
Lumina è stato addestrato secondo un principio di affidabilità e onestà delimitata:
- Risposte precise nel perimetro noto: eccelle su definizioni scientifiche, concetti informatici, astronomia, saluti e spiegazioni.
- Rifiuto onesto fuori perimetro: se gli viene posta una domanda complessa o fuori dalla sua conoscenza (es. calcoli avanzati, notizie in tempo reale, prescrizioni mediche o legali), è addestrato a dichiarare apertamente:
"Non lo so: è fuori da ciò che ho imparato. Prova una domanda più semplice."
- Nessuna dipendenza esterna: nessuna chiamata a server remoti, massima riservatezza locale (privacy by design).
📊 Risultati e Benchmark di Valutazione
Il modello è stato testato con greedy decoding su centinaia di esempi di validazione contenenti formulazioni e domande mai viste durante l'addestramento:
| Ambito di Prova | Accuratezza su dati mai visti | Comportamento |
|---|---|---|
| Definizioni e Concetti Tecnici | 98.2% | Spiega correttamente concetti con frasi nuove mai viste prima |
| Domande di Verifica Libera (Probes) | 85.7% | Riconosce l'intento dell'utente anche con sinonimi e saluti diversi |
| Domande Note con Riformulazioni | 79.1% | Generalizzazione robusta su frasi con punteggiatura e prefissi vari |
| Riconoscimento Fatti Fuori Perimetro | 66.7% | Riconosce le domande ignote e rifiuta onestamente invece di inventare |
| Falsi Rifiuti (Errori di Blocco) | 2.9% | Tasso bassissimo: risponde quasi sempre quando la domanda è valida |
📐 Architettura del Modello
| Componente | Dettaglio Tecnico | Note |
|---|---|---|
| Tipo di Rete | Decoder-only Causal Transformer | Meccanismo di attenzione scalata SDPA |
| Numero di Parametri | 2.750.976 | Tutti attivi nel forward pass |
| Livelli (Layers) | 6 blocchi Transformer | LayerNorm pre-attenzione e pre-FFN |
| Dimensione Nascosta ($d_{\text{model}}$) | 192 | Larghezza dello spazio latente |
| Teste di Attenzione ($n_{\text{heads}}$) | 6 teste ($d_{\text{head}} = 32$) | Attenzione multi-testa causale |
| Feed-Forward ($d_{\text{ff}}$) | 768 (espansione 4x) | Attivazione GELU approssimata |
| Contesto massimo | 165 byte | Finestra scorrevole per chat |
| Vocabolario | 259 token (livello byte) | 256 byte UTF-8 + BOS (256), EOS (257), PAD (258) |
| Tied Embeddings | Sì | La matrice di output condivide i pesi con l'embedding iniziale |
| Regolarizzazione | Dropout 0.1, Weight Decay 0.05 | Addestrato con AdamW e Cosine Annealing su GPU RTX 5060 |
🚀 Guida all'Uso Rapido (Quickstart)
1. In Python con modeling_lumina.py
Scarica la cartella o i file del repository (config.json, model.safetensors, modeling_lumina.py):
from modeling_lumina import LuminaForCausalLM
# Carica il modello in 0.1 secondi
model = LuminaForCausalLM.from_pretrained("jacopof/lumina-2.75m")
# Esempio 1: Saluto e presentazione
print(model.generate("Ciao! Chi sei?"))
# Output: "Sono Lumina. Non uso altri chatbot per generare le risposte."
# Esempio 2: Spiegazione scientifica
print(model.generate("Cos'è il Sole?"))
# Output: "Il Sole è la stella al centro del nostro sistema solare."
# Esempio 3: Domanda informatica
print(model.generate("Cos'è Python?"))
# Output: "Python è un linguaggio di programmazione semplice e versatile."
2. Da Riga di Comando con generate.py
python generate.py "Raccontami una storia"
# Lumina: Una piccola stella perse la strada. La Luna le mostrò come tornare a casa.
3. Nel Browser Web (Web Worker)
Il repository include anche weights.json, una mappa serializzata dei pesi in formato JSON float compatibile con motori di inferenza pura in JavaScript / Web Audio per web app completamente offline senza backend!
⚠️ Limiti e Note d'Uso
- Contesto: Essendo un micro-modello educativo da 2.75M di parametri, il contesto massimo è calibrato per scambi domanda-risposta brevi.
- Conoscenza del mondo: Non ha accesso a Internet in tempo reale e non possiede la sterminata enciclopedia di un modello da centinaia di miliardi di parametri.
- Scopi critici: Non deve essere impiegato per consulenze mediche, finanziarie, legali o per decisioni ad alto rischio.
📜 Licenza e Crediti
- Autore: Jacopo Forti (
jacopof) - Licenza: MIT License (libero per uso didattico, sperimentale, di ricerca e commerciale).
- Progetto Lumina: sviluppato con l'obiettivo di dimostrare come sia possibile costruire intelligenze artificiali indipendenti, trasparenti e leggere a partire da zero.
- Downloads last month
- -