TEORIE E TECNICHE DEL RICONOSCIMENTO Apprendimento automatico Sentiment analysis in SciKit-Learn
REMINDER 1: SENTIMENT ANALYSIS (o opinion mining) Identifica il ‘sentimento’ che un testo esprime Sentiment Analysis Positive Negative Neutral
SENTIMENT ANALYSIS COME CLASSIFICAZIONE DI TESTI Treat sentiment analysis as a type of classification Use corpora annotated for subjectivity and/or sentiment Train machine learning algorithms: Naïve bayes Decision trees SVM … Learn to automatically annotate new text
SENTIMENT ANALYSIS DI TWEETS
EASIER AND HARDER PROBLEMS Tweets from Twitter are probably the easiest short and thus usually straight to the point Reviews are next entities are given (almost) and there is little noise Discussions, comments, and blogs are hard. Multiple entities, comparisons, noisy, sarcasm, etc
REMINDER 2: NAÏVE BAYES Metodi Bayesiani: decisione su classificazione basata su un modello PROBABILISTICO che coniuga uso di informazioni A PRIORI ed A POSTERIORI come nella regola di Bayes Metodi NAÏVE BAYES: si fanno assunzioni che semplificano molto il calcolo delle probabilità
CLASSIFICAZIONE DI TESTI USANDO NAÏVE BAYES Attributes are text positions, values are words.
DATASET Diversi dataset di tweets annotati con sentiments P.e. SEMEVAL-2014 In questo studio: il dataset di Nick Sanders Totale 5000 Tweets Annotati con classi positive / negative / neutral / irrelevant Script per scaricarsi I tweets a partire dalle ID
Naïve Bayes per sentiment analysis: un esempio Supponiamo che il nostro training set consista di 6 tweets, che contengono solo le parole ‘awesome’ e ‘crazy’, e che sono stati classificati come segue:
Esempio, con’t I priors saranno quindi come segue: Ora calcoliamo le likelihoods per `awesome’
Ancora l’esempio Le altre likelihoods: Evidence (= il denominatore)
Classificazione dei tweets che ne risulta
Due problemi Probabilita’ 0 Underflow
Cosa fare con gli zeri Anche un corpus di grandi dimensioni rimane sempre un campione molto limitato dell’uso del linguaggio, in cui molte parole anche di uso comune non occorrono Soluzione: SMOOTHING – distribuire la probabilita’ in modo da coprire tutti gli eventi In particolare, ADD ONE o LAPLACE smoothing
Underflow Le vere probabilita’ hanno valori molto bassi E quando si hanno molte features il prodotto delle loro probabilita’ diventa ancora piu’ basso Presto anche i limiti di NumPy vengono raggiunti
Esempio di underflow Supponiamo di avere 65 features, per ognuna delle quali P(F|C) e’ < 0.0001
Soluzione Rimpiazzare il prodotto delle probabilita’ con la SOMMA dei loro LOGARITMI
Un sentiment analyzer Naïve Bayes in SciKit-Learn La libreria sklearn.naive_bayes contiene implementazioni di tre classificatori Naïve Bayes: GaussianNB (quando le features hanno distribuzione Gaussiana, per esempio altezze, etc) MultinomialNB (quando le features sono delle frequenze di occorrenza di parole) BernoulliNB (quando le features sono boolean) Per sentiment analysis: MultinomialNB
Creazione del modello Le parole dei tweets sono usate come feature. Vengono estratte e pesate usando la funzione create_ngram_model create_ngram_model usa la funzione TfidfVectorizer del pacchetto feature_extraction di scikit learn per estrarre i termini dai tweets http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html create_ngram_model usa MultinomialNB per creare un classificatore http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html La funzione Pipeline di scikit-learn viene usata per combinare l’estrattore di features e il classificatore in un unico oggetto (un estimator) che puo’ essere usato per estrarre features dai dati, creare (‘fit’) un modello, e usare il modello per classificare http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html
Estrazione di termini dai tweets & classificazione Estrae features & le pesa Classificatore Naïve Bayes Pipeline
Addestramento e valutazione La funzione train_model Usa uno dei metodi nella libreria cross_validation di scikit-learn, ShuffleSplit, per calcolare i folds da usare nella cross validation Ad ogni iterazione della cross validation addestra un modello usando il metodo fit, poi valuta I risultati usando score
Creazione di un modello Determina gli indici nella in ogni fold Addestra il modello
Esecuzione e risultati
Ottimizzazione Il programma sopra usa I valori di default dei parametri di TfidfVectorizer e MultinomialNB Possibili varianti per Tfidf Vectorizer: Usare unigrammi, bigrammi, trigrammi (parametro Ngrams) Rimuovere stopwords (stop_words) Usare versione binomiale dei counts Possibili varianti per MultinomialNB: Che tipo di smoothing usare
Esplorazione dei parametri La ricerca dei valori migliori per I parametri e’ una delle operazioni standard in apprendimento automatico Scikit-learn, come anche Weka ed altri pacchetti simili, fornisce una funzione (GridSearchCV) che permette di esplorare i risultati ottenuti con valori diversi dei parametri
Ottimizzazione con GridSearchCV Notate la sintassi per specificare I valori dei parametri Funzione di smoothing Usa F measure come metro di valutazione
Ripulire i tweets: emoticons
Ripulire I tweets: abbreviazioni
Usare il preprocessing con TfidfVectorizer
Altri possibili miglioramenti Usare il POS tagger di nltk Usare un sentiment lexicon, per esempio SentiWordNet http://sentiwordnet.isti.cnr.it
Risultati complessivi
LETTURE
QUESTA LEZIONE Echert & Coelho, capitolo 6