TEORIE E TECNICHE DEL RICONOSCIMENTO Apprendimento automatico Introduzione a SciKit-Learn FACCIAMO UN PASSO INDIETRO … • Molti dei metodi per interpretare testi che abbiamo visto sono basati su CLASSIFICATORI appresi usando tecniche di APPRENDIMENTO AUTOMATICO: – Classificazione di documenti in spam / non spam – Sentiment analysis – Classificazione delle parti del discorso – Etc etc CLASSIFICATORI • Un CLASSIFICATORE e’ una FUNZIONE da oggetti che si vogliono classificare a etichette DISCRETE • La disambiguazione delle parti del discorso e molti altri problemi in LC possono essere visti come problemi di classificazione – Determinare la parte del discorso di un token – Assegnare valore SPAM/NO SPAM a un messaggio email – Assegnare un valore positivo / negativo ad una recension CLASSIFICATORI COME FUNZIONI TOKEN POS La DT mamma NN di OF Giacomo NNP ha HV UNA VISIONE GEOMETRICA DELLA CLASSIFICAZIONE SPAM NON-SPAM VISIONE GEOMETRICA DELLE FUNZIONI IL RUOLO DELL’APPRENDIMENTO AUTOMATICO • Un classificatore potrebbe essere codificato a mano (in Python, per esempio) • Ma nella linguistica computazionale moderna, e in moltre altre aree dell’intelligenza artificiale, questi classificatori non vengono specificati a mano, ma vengono APPRESI AUTOMATICAMENTE a partire da esempi. APPRENDIMENTO E LA DAMA • Il termine ‘Machine Learning’ e’ stato coniato negli anni ‘50 da Samuel, che sviluppo’ tecniche di apprendimento automatico per sviluppare un sistema che imparasse a giocare a dama ALTRE APPLICAZIONI • Robotica (per esempio veicoli autonomi) APPROCCI ALL’APPRENDIMENTO • SUPERVISIONATO: dato un insieme di esempi di input / output, trovare una associazione che predica accuratamente l’output associato ad un certo input • NON SUPERVISIONATO o CLUSTERING: dato un insieme di esempi non etichettati, raggruppare gli esempi in gruppi di oggetti “simili” (CLUSTER) APPRENDIMENTO SUPERVISIONATO APPRENDIMENTO SUPERVISIONATO IN NLTK >>> featuresets = [(gender_features(n), g) for (n,g) in names] >>> train_set, test_set = featuresets[500:], featuresets[:500] >>> classifier = nltk.NaiveBayesClassifier.train(train_set) >>> classifier.classify(gender_features('Neo')) 'male' >>> classifier.classify(gender_features('Trinity')) 'female' DUE TIPI DI APPRENDIMENTO SUPERVISIONATO CLASSIFICAZIONE: Spam, non-spam Classification Discrete valued output (0 or 1) 1(Y) Spam? 0(N) Length of message (words) Length of message (words) REGRESSIONE: PREDIRRE IL COSTO DELLE CASE 400 Prezzo (€) in 1000’s 300 200 100 0 0 500 1000 1500 2000 2500 Dimensione in m2 Supervised Learning “right answers” given Regression: Predict continuous valued output (price) APPRENDIMENTO AUTOMATICO IN PYTHON • Come abbiamo visto, la libreria NLTK permette di apprendere diversi tipi di classificatori a partire da testi • Ma in Python esistono diverse librerie piu’ generali • Useremo la libreria SciKit-Learn SCIKIT-LEARN • Una libreria open-source di funzioni per l’apprendimento automatico – Basata su numpy, scipy, e matplotlib • Fornisce funzioni per – – – – Classificazione Regressione Clustering Riduzione di dimensionalita’ • Sito web: – http://scikit-learn.org/stable/ APPRENDIMENTO AUTOMATICO CON SCIKIT-LEARN 1. Leggere i dati (e ripulirli se necessario) 2. Analizzarli, per esempio tramite visualizzazione 3. Identificare il miglior algoritmo di apprendimento 4. Analizzare le prestazioni ESEMPIO DI REGRESSIONE • Obiettivo: sviluppare una funzione che predice la quantita’ di accessi ad un sito web Reading in the data We have collected the web stats for the last month and aggregated them in ch01/ dat a/ web_t r af f i c. t sv (t sv because it contains tab separated values). They are stored as the number of hits per hour. Each line contains consecutive hours and the number of web hits in that hour. I DATI lines look like the following: [ 19 ] LEGGERE I DATI VISUALIZZARE I DATI VISUALIZZARE I DATI: CODICE APPRENDERE UNA FUNZIONE • Nell’apprendimento supervisionato (sia regressione che classificazione) si cerca di trovare la funzione che fornisca la “migliore rappresentazione dei dati” • Si definisce “migliore rappresentazione dei dati” come “rappresentazione che minimizza l’ERRORE” ERRORE NEL CASO DELLA REGRESSIONE IMPARARE LA FUNZIONE CHE RAPPRESENTA MEGLIO I DATI VISUALIZZARE IL RISULTATO Dopodiche’ e’ chiaro che c’e’ un problema con l’idea che la funzione sia una linea retta La funzione approssima bene I dati le prime quattro settimane UN’APPROSSIMAZIONE MIGLIORE ANCORA MEGLIO? OVERFITTING • Aumentando il grado del polinomio otteniamo delle funzioni che ottengono risultati migliori `memorizzando’ i dati di addestramento, ma non generalizzano a sufficienza TRAIN E TEST • Come nei casi di classificazione visti in precedenza, per trovare la soluzione migliore vogliamo dividere I dati in train e test e valutare solo su tes LEZIONE DI BASE • Sviluppando algoritmi di apprendimento automatico e’ importante non limitarsi a provare tutti I metodi possibili e tutti I parametri possibili, ma cercare di capire cosa sta succedendo (per esempio visualizzando i dati) e scegliere sulla base dell’analisi PACCHETTI COMPRESI CON SCIKIT-LEARN • NumPy – Operazioni su array • SciPy – Contiene implementazioni di praticamente tutti gli algoritmi numerici NUMPY SCIPY LETTURE QUESTA LEZIONE • Echert & Coelho, capitolo 1