# Allenare e validare i modelli

Ogni volta che cambi gli esempi degli intent, le regole o le conversazioni, riaddestra.

La pipeline completa

bash
python -m pipeline

Esegue in ordine:

  1. Validazione di intenti ed entità: duplicati e frasi presenti in intent diversi bloccano il training.
  2. Corpus per l'embedding.
  3. Merge di regole, risposte e conversazioni in .cognitor/.
  4. Embedding: skip-gram interno su vocabolario SentencePiece (default) oppure FastText.
  5. Dataset tokenizzato e tag NER.
  6. Intent Classifier (BiGRU + Attention + CRF).
  7. Dialogue Policy.

python -m pipeline esegue sempre tutti gli step. Per saltare classifier o policy chiama run_full_pipeline(train_classifier=False) o run_full_pipeline(train_policy=False) (da from pipeline import run_full_pipeline).

Scegliere l'embedding

Lo switch è USE_FASTTEXT in config.py, controllato dalla variabile d'ambiente COGNITOR_USE_FASTTEXT (default false).

Default (`false`)`true`
Algoritmoskip-gram + negative samplingFastText
VocabolarioSentencePieceparole + n-grammi
Dipendenza`sentencepiece``fasttext-wheel` (opzionale)
bash
COGNITOR_USE_FASTTEXT=true python -m pipeline

Cambiando embedding devi riaddestrare tutto: classifier e embedding vanno sempre insieme.

Solo la validazione

bash
python -c "
from pipeline.validator import DatasetValidator
print(DatasetValidator('knowledge', 'training_data').validate_all())"

È veloce e va lanciata prima del training completo.

Riproducibilità

La pipeline fissa i seed (42): due training sullo stesso dataset danno lo stesso modello. Se dopo una modifica cambia il comportamento di frasi che non hai toccato, il responsabile è il dataset, non il caso.

Cosa viene generato

  • .cognitor/: file di lavoro (vocabolario, dataset tokenizzato, regole e risposte unite). Viene svuotato a ogni run.
  • models/intent_model_fast.pth: classifier.
  • models/dialogue_policy.pth: policy di dialogo.

Prossimo passo: [Capire perché un intent viene sbagliato](/guides/debug-intent).