|
|
--- |
|
|
|
|
|
license: gpl-3.0 |
|
|
language: |
|
|
- it |
|
|
library_name: transformers |
|
|
tags: |
|
|
- DAC |
|
|
- data-ai |
|
|
- DATA-AI |
|
|
- transformer |
|
|
- experimental |
|
|
|
|
|
--- |
|
|
|
|
|
# 🧠 microDAC |
|
|
|
|
|
[](https://huggingface.co/Mattimax) |
|
|
[](https://huggingface.co/MINC01) |
|
|
|
|
|
 |
|
|
|
|
|
--- |
|
|
|
|
|
## ℹ️ Informazioni sul modello |
|
|
|
|
|
- **Autore:** [Mattimax](https://huggingface.co/Mattimax) |
|
|
- **Organizzazione:** [M.INC](https://huggingface.co/MINC01) |
|
|
- **Pagina GitHub:** [microDAC](https://github.com/M-INC-01/microDAC) |
|
|
- **Licenza:** GPL-3.0 |
|
|
|
|
|
**Descrizione:** |
|
|
microDAC è un modello linguistico compatto di tipo *Decoder-only*, con circa **40 milioni di parametri**, progettato per la **generazione di testo in italiano**. |
|
|
È un’evoluzione di PicoDAC, con maggiore profondità architetturale e un contesto più ampio, mantenendo leggerezza e velocità d’esecuzione. |
|
|
|
|
|
Pensato per **chatbot, agenti vocali e applicazioni embedded**, è ottimizzato per risposte fluide, coerenti e naturali, con training supervisionato per evitare la ripetizione dei prompt. |
|
|
|
|
|
--- |
|
|
|
|
|
## ⚙️ Caratteristiche tecniche |
|
|
|
|
|
* **Architettura:** Transformer Decoder-only (GPT2-like) |
|
|
* **Parametri totali:** ~40 milioni |
|
|
* **Vocabolario:** 32.000 token |
|
|
* **Lunghezza massima del contesto:** 2048 token |
|
|
* **Dimensione embedding:** 512 |
|
|
* **Numero di layer:** 16 |
|
|
* **Teste di attenzione:** 8 |
|
|
* **Feed-Forward (FFN):** 2048 (GELU-new) |
|
|
* **Attivazione:** GELU (new) |
|
|
* **Precisione:** FP16 / BF16 |
|
|
* **Gradient checkpointing:** ✅ Attivo |
|
|
|
|
|
--- |
|
|
|
|
|
## 🗣️ Tokenizer |
|
|
|
|
|
* **Tipo:** Byte-Pair Encoding (BPE) |
|
|
* **Addestramento:** da zero su `microDAC_dataset.jsonl` |
|
|
* **Token speciali:** |
|
|
- `<|user|>` → inizio turno utente |
|
|
- `<|assistant|>` → risposta del modello |
|
|
- `<|sep|>` → fine turno |
|
|
- `<|pad|>`, `<|bos|>`, `<|eos|>` → padding e delimitatori |
|
|
|
|
|
Il tokenizer è salvato in `tokenizer_microDAC/` e viene ricreato automaticamente se non presente. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🎯 Obiettivo di training |
|
|
|
|
|
Il modello è addestrato per **generare esclusivamente le risposte dell’assistente**, mascherando i token dell’utente. |
|
|
|
|
|
**Schema di masking:** |
|
|
```text |
|
|
<|user|> ... <|sep|> → label = -100 |
|
|
<|assistant|> ... <|sep|> → label = token_id |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## 🧩 Parametri di training |
|
|
|
|
|
Parametro Valore |
|
|
|
|
|
Epochs 2 |
|
|
Batch per device 8 |
|
|
Gradient accumulation 4 |
|
|
Learning rate 3e-4 |
|
|
Weight decay 0.01 |
|
|
Scheduler Cosine |
|
|
Warmup ratio 0.05 |
|
|
Max grad norm 1.0 |
|
|
Precision FP16 / BF16 |
|
|
Optimizer AdamW (torch) |
|
|
Checkpointing ogni 2000 step |
|
|
Resume automatico ✅ |
|
|
Save best model ✅ |
|
|
|
|
|
--- |
|
|
|
|
|
## ⚠️ Avvertenze e limitazioni |
|
|
|
|
|
microDAC è un modello sperimentale, soggetto a miglioramenti futuri. |
|
|
|
|
|
Le prestazioni su conversazioni complesse o troppo lunghe possono degradare. |
|
|
|
|
|
Non adatto a contenuti sensibili o critici. |
|
|
|
|
|
|
|
|
|
|
|
--- |
|
|
|
|
|
## 🚀 Uso previsto |
|
|
|
|
|
- Chatbot leggeri e assistenti in lingua italiana |
|
|
|
|
|
- Prototipi embedded o mobile |
|
|
|
|
|
- Fine-tuning personalizzati su dataset specifici |
|
|
|
|
|
|
|
|
Nota: mantenere input sotto i 2 000 token per risultati ottimali. |
|
|
|
|
|
|
|
|
--- |
|
|
|
|
|
## 🧰 Installazione |
|
|
|
|
|
```bash |
|
|
pip install transformers torch |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## 🧪 Esempio di utilizzo in Python |
|
|
|
|
|
```python |
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
import torch |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained("Mattimax/microDAC") |
|
|
model = AutoModelForCausalLM.from_pretrained("Mattimax/microDAC").to("cuda") |
|
|
|
|
|
prompt = "<|user|> Ciao, come stai oggi?<|assistant|>" |
|
|
inputs = tokenizer(prompt, return_tensors="pt").to("cuda") |
|
|
|
|
|
outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.7) |
|
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True)) |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## 🔗 Integrazione consigliata |
|
|
|
|
|
Applicazioni mobile o embedded: basso consumo e rapidità. |
|
|
|
|
|
Sperimentazione NLP: ottimo punto di partenza per LoRA o adattamenti leggeri. |
|
|
|
|
|
Dataset sintetici: utile per generare coppie domanda-risposta. |