Trattamento di dati linguistici - Classificazione

Classificazione di Testo

  • La classificazione di testo consiste nell’assegnare documenti di testo a una o più categorie.

  • Abbiamo un insieme predefinito di classi e vogliamo assegnare un documento mai visto prima a una di tali classi (etichettarlo).

  • Se abbiamo 2 classi, si tratta di una classificazione binaria (ad esempio: spam vs no spam).

  • Potremmo avere più di 2 classi (ad esempio: politica, finanza, sport, …).

  • Esistono forme specifiche di classificazione di testo:

    • Analisi del sentimento: le etichette sono {positivo, negativo, neutrale}.

Soluzioni di Classificazione di Testo

  • Regole codificate a mano

    • Un esperto crea un insieme di regole basate su combinazioni di parole o altre caratteristiche (features).

    • Molto costoso e complesso da mantenere.

  • Apprendimento automatico supervisionato (supervised machine learning):

    • Addestra un classificatore utilizzando testi che sono già stati correttamente etichettati da esseri umani.

    • Estrazione di features dal testo.

    • Apprendimento della relazione tra features e etichette dai testi di addestramento (training data).

Classificazione di Testo Basata sulle Regole

  • La classificazione di testo basata sulle regole usa un insieme di regole predefinite per assegnare etichette ai testi.

  • Esempio: se un articolo giornalistico contiene la parola "deficit", assegna l’etichetta "economia".

  • Vantaggio principale: semplicità di comprensione del processo decisionale.

  • Svantaggi:

    • Tipicamente serve una grande quantità di regole per coprire tutti i casi possibili.

    • Le eccezioni o i casi particolari vanno gestiti con apposite regole.

    • Può funzionare se i dati di testo sono ben strutturati e non presentano molte eccezioni.

Classificazione di Testo con Modelli Probabilistici

  • Vantaggio principale: possono permettere l’apprendimento automatico (machine learning).

  • Svantaggi:

    • Richiedono una quantità sufficiente di dati di training per funzionare correttamente.

    • Non sempre è facile interpretare i risultati.

    • Tipicamente il primo passo è l’estrazione di features (caratteristiche) dal testo.

Estrazione di features per la classificazione di testi

  • Modello Bag of Words: le parole vengono considerate come unità disgiunte e sconnesse (tokens), senza preoccuparci delle relazioni sintattiche e semantiche che le legano.

  • Per estrarre features:

    • Conteggio di token: si può semplicemente contare quante volte ogni parola grafica compare in un documento e dividere per il numero di parole del documento (term frequency, TF).

    • TF-IDF: (term frequency-inverse document frequency) si prende in considerazione sia quante volte le parole appaiono all’interno del documento, sia quanto compaiono nell’insieme dei documenti da classificare.

      • Intuizione dietro a IDF: se una parola compare ovunque, non serve a niente, mentre se compare in pochi documenti è utile per discriminare.

Esempio TF-IDF

  • Un documento contiene 100 parole e "cane" compare 2 volte (TF=2100=0.02TF = \frac{2}{100} = 0.02), mentre "il" compare 30 volte (TF=30100=0.3TF = \frac{30}{100} = 0.3).

  • Abbiamo un corpus di 200 documenti; "cane" compare in 5 documenti (IDF=log<em>1020051.6IDF = log<em>{10} \frac{200}{5} \approx 1.6), mentre "il" compare in tutti (IDF=log</em>10200200=0IDF = log</em>{10} \frac{200}{200} = 0).

  • Quindi "cane" ha un TD-IDF di circa 0.02×1.60.030.02 \times 1.6 \approx 0.03 mentre "il" has un TF-IDF di 0.

  • Siccome compare ovunque, "il" non serve a discriminare tra un documento e l’altro, mentre "cane" un po’ aiuta perché compare in pochi documenti.

  • Supponiamo adesso che Belinda compaia 10 volte in un solo documento di 100 parole. Quanto è il suo TF-IDF?

    • TF=110TF = \frac{1}{10}

    • IDF=log1020012.3IDF = log_{10} \frac{200}{1} \approx 2.3

    • TF-IDF ≈ 0.23, relativamente alto!

Modelli Generativi e Discriminativi

  • Dato un insieme di features x estratte dal testo (ex., quante volte ogni parola compare nel testo) e un set di etichette (labels) di classi o categorie y:

    • Modelli generativi: caratterizzano la probabilità congiunta di features e labels P(x,y)P(x, y)

    • Modelli discriminativi: caratterizzano probabilità delle etichette condizionata all’avere osservato le features P(yx)P(y|x)

  • I modelli discriminativi apprendono il minimo indispensabile per classificare, mentre i modelli generativi apprendono molto di più (in teoria apprendono abbastanza informazioni da poter generare).

Modelli Generativi e Discriminativi

  • Stessa logica nella classificazione di immagini

    • Modelli generativi: sulla base di tante immagini di cani e gatti, apprendono informazioni sui baffi del gatto, la forma degli occhi, orecchi… e stimano la probabilità che una nuova immagine rappresenti un cane o un gatto (ex.: Naïve Bayes).

    • Modelli discriminativi: cercano solo di distinguere, ad esempio sulla base del collare (ex.: regressione logistica).

Concetti di base per Naïve Bayes

  • Naïve: si assume che le variabili siano indipendenti

  • Bayes: basato sul teorema di Bayes

  • La probabilità che si verifichino due eventi A e B è P(AB)P(A ∩ B)

  • P(AB)P(B)=P(AB)P(A|B)P(B) = P(A ∩ B) ma è uguale a P(BA)P(B ∩ A)

  • P(BA)=P(BA)P(A)P(B ∩ A) = P(B|A)P(A)

  • quindi P(AB)P(B)=P(BA)P(A)P(A|B)P(B) = P(B|A)P(A)

  • che porta al teorema di Bayes: P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A)P(A)}{P(B)}

Probabilità condizionale

  • P(AB)P(A ∩ B) = probabilità che si verifichino sia A che B

  • P(BA)P(B|A) = probabilità che si verifichi B se si verifica A

  • P(A)P(BA)=P(AB)=P(BA)=P(B)P(AB)P(A)P(B|A) = P(A ∩ B) = P(B ∩ A) = P(B)P(A|B)

Classificatore Naïve Bayes (generativo)

  • Per un documento d (rappresentato come vettore di features) e una classe c:

    • P(cd)=P(dc)P(c)P(d)P(c|d) = \frac{P(d|c)P(c)}{P(d)}

  • Classificatore Maximum A Posteriori (MAP):

    • c<em>MAP=argmax</em>cCP(cd)=argmax<em>cCP(dc)P(c)P(d)=argmax</em>cCP(dc)P(c)c<em>{MAP} = arg \, max</em>{c∈C} P(c|d) = arg \, max<em>{c∈C} \frac{P(d|c)P(c)}{P(d)} = arg \, max</em>{c∈C} P(d|c)P(c)

    • Eliminando il denominatore non cambia cMAPc_{MAP} perché P(d)P(d) non ha alcun effetto su arg max

  • Nomenclatura:

    • P(cd)P(c|d) è chiamata likelihood o probabilità a posteriori perché è la probabilità di aver osservato la classe c dopo aver esaminato i dati d

    • P(c)P(c) è chiamata probabilità a priori perché è la probabilità di aver osservato la classe c prima di esaminare i dati

Classificatore Naïve Bayes: le Features

  • In pratica, il documento d viene fornito alla macchina sotto forma di features x<em>1...x</em>Nx<em>1 . . . x</em>N

  • Classificatore Maximum A Posteriori (MAP) in pratica:

    • c<em>MAP=argmax</em>cCP(x<em>1,x</em>2,...xNc)P(c)c<em>{MAP} = arg \, max</em>{c∈C} P(x<em>1, x</em>2, . . . x_N|c)P(c)

  • Cosa sono le features?

    • Nel caso più semplice, dato un vocabolario di V parole, possiamo chiedere se una data parola appare in un documento d, o quante volte appare

    • Modello Bernoulli: rappresenta d come (e<em>1...e</em>V)(e<em>1 . . . e</em>V ), dove e<em>i=1e<em>i = 1 se la parola i è in d e e</em>i=0e</em>i = 0 altrimenti

    • Modello Multinomiale: rappresenta d come (f<em>1...f</em>V)(f<em>1 . . . f</em>V ), dove fif_i è il numero di volte che una parola i compare in d

Classificatore Naïve Bayes: indipendenza delle features

  • Dato una classe c, si suppone che le features siano indipendenti

    • P(x<em>1,x</em>2,...x<em>Nc)=P(x</em>1c)P(x<em>2c)...P(x</em>Nc)=<em>k=1NP(x</em>kc)P(x<em>1, x</em>2, . . . x<em>N|c) = P(x</em>1|c)P(x<em>2|c) . . . P(x</em>N|c) = \prod<em>{k=1}^{N} P(x</em>k |c)

  • Questo ci dà il Classificatore Naïve Bayes:

    • c<em>NB=argmax</em>cCP(c)<em>k=1NP(x</em>kc)c<em>{NB} = arg \, max</em>{c∈C} P(c) \prod<em>{k=1}^{N} P(x</em>k |c)

Classificatore Naïve Bayes con Bag of Words

  • Classificatore Naïve Bayes:

    • c<em>NB=argmax</em>cCP(c)<em>k=1NP(x</em>kc)c<em>{NB} = arg \, max</em>{c∈C} P(c) \prod<em>{k=1}^{N} P(x</em>k |c)

  • È necessario calcolare P(c)P(c) e P(xkc)P(x_k |c).

    • P(c)P(c) può essere stimato sulla base della frequenza di ogni classe nei dati di training (maximum likelihood)

    • P(xkc)P(x_k |c) dipende da come si rappresentano le features

  • Modello bag-of-word:

    • Rappresenta ogni token in d come un vettore di caratteristiche x<em>i=f</em>ix<em>i = f</em>i, dove fif_i è il numero di volte che il token i appare in d

    • P(xic)P(x_i|c) può essere stimato come

      • \frac{\text{# di occorrenze del token i in c}}{\text{# totale di token in c}}

    • P(xic)P(x_i|c) può essere pensato come P(wc)P(w|c), cioè la probabilità di trovare il token w nella classe c

Classificatore Naïve Bayes in pratica

  • Classificatore Naïve Bayes:

    • c<em>NB=argmax</em>cCP(c)<em>k=1NP(x</em>kc)c<em>{NB} = arg \, max</em>{c∈C} P(c) \prod<em>{k=1}^{N} P(x</em>k |c)

  • In pratica:

    • P(c)P(c) si stima come frazione di campioni etichettati come class c (se ho 1000 testi di training di cui 200 parlano di sport, la classe sport ha P(c)=0.2P(c) = 0.2)

    • P(xic)P(x_i|c) si stima come numero di volte che il token i appare nella classe c diviso per il numero di token nella classe c

Complicazioni pratiche

  • Se una parola w dal vocabolario (che contiene un numero di token pari a V) non compare mai nella classe c nei dati di training, si calcola P(wc)=0P(w|c) = 0, il che comporta c<em>NB=argmax</em>cCP(c)<em>k=1NP(x</em>kc)=0c<em>{NB} = arg \, max</em>{c∈C} P(c) \prod<em>{k=1}^{N} P(x</em>k |c) = 0.

    • "Zero probabilities cannot be conditioned away, no matter the other evidence!" - Dan Jurafsky

  • Soluzione tipica: Laplace smoothing

    • P(wc)P(w|c) viene stimato come

      • \frac{\text{# di volte che il token w compare nella classe c + 1}}{\text{# totale dei token nella classe c + V}}

Classificatore Naïve Bayes in pratica

  • Ci sono due fasi:

    • Addestramento (training): si fanno le stime di P(c)P(c) e P(xic)P(x_i|c) sulla base dei dati di training (usando i token lì presenti)

    • Inferenza (test): dato un esempio di test, lo si rappresenta come vettore di features e gli si assegna la classe c per la quale cNBc_{NB} è massimo

      • Si usano le P(c)P(c) e le P(xic)P(x_i|c) calcolate durante il training

      • Quindi si ignorano i token che compaiono nei dati di test ma non in quelli di training (se nei dati di training non compare mai la parola "mare", il sistema la ignora se la vede nei dati di test)

Training e test

  • In tutti i sistemi di machine learning (e non solo nel Naïve Bayes)

    • Durante il training, il sistema acquisisce informazioni sui patterns presenti nei dati e ne costruisce un modello matematico

    • Durante il test (al momento dell’utilizzo), il sistema cerca di generalizzare il modello per elaborare nuovi dati che non ha visto durante il training

  • In pratica servono

    • Dati di training per trovare i patterns di interesse e costruire un modello

    • Dati di validazione per calibrare gli iper-parametri del modello

    • Dati di testing per valutare se il modello funziona

    • Baseline, cioè un modello (molto semplice) che serve come termine di paragone (il nostro modello deve come minimo battere la baseline)

Valutazione delle prestazioni

  • Esiste un modo standard per valutare le prestazioni di qualsiasi classificatore.

    • Accuratezza: frazione dei documenti di test correttamente classificati

    • Precisione PcP_c per la classe c: frazione dei documenti di test classificati come c correttamente classificati

    • Recall RcR_c per la classe c: frazione dei documenti di test etichettati come c correttamente classificati

    • F1 score per la classe c: media armonica di precisione e recall

      • F1=2P<em>cR</em>cP<em>c+R</em>cF1 = \frac{2P<em>cR</em>c}{P<em>c + R</em>c}

Metriche

  • L’accuratezza è facile: è quanti campioni hai classificato correttamente su quanti campioni ti sono stati mostrati.

  • Data una classe c:

    • Vero positivo (TP): si vede un campione c e lo si classifica correttamente

    • Falso positivo (FP): si vede un campione non-c e lo si classifica erroneamente come c

    • Vero negativo (TN): si vede un campione non-c e lo si classifica correttamente

    • Falso negativo (FN): si vede un campione c e lo si classifica erroneamente come non-c

    • Pc=TPTP+FPP_c = \frac{TP}{TP + FP}

    • Rc=TPTP+FNR_c = \frac{TP}{TP + FN}

Esempio

  • Accuratezza: traccia (somma degli elementi lungo la diagonale principale) diviso la somma totale (somma di tutti gli elementi)

  • Precisione: data una colonna, l’elemento sulla diagonale principale diviso la somma della colonna

  • Recall: data una riga, l’elemento sulla diagonale principale diviso la somma della riga

Classificatore a Regressione Logistica (discriminativo)

  • Ogni testo da classificare viene rappresentato come un vettore di features

  • Si calcola (in automatico) un vettore di pesi (weights) per capire quali features sono più utili a classificare

    • Per capire se un articolo di giornale parla di politica, "ministro" sarà più utile di "racchetta"

    • Per capire se una recensione di un prodotto è positiva o negativa, "funzionale" sarà più utile di "negozio"

  • In generale, per un vettore di n features, avremo z=<em>i=1nw</em>ixi+bz = \sum<em>{i=1}^{n} w</em>i x_i + b, dove w è un vettore di pesi e b è un termine additivo (bias)

    • z=wx+bz = wx + b è l’equazione di una retta: modello lineare, il più semplice che esiste!

Parametri da apprendere in automatico

  • Quindi si moltiplica ciascuna feature per il peso wiw_i (prodotto scalare tra vettore delle features e vettore dei pesi) e si somma la bias b

  • Equazione della retta!

  • Si possono imparare in automatico i valori del vettore dei pesi w e il valore della bias b

  • Poi però serve una funzione (necessariamente non lineare) per trasformare z in una probabilità

Regressione Logistica binaria

  • Supponiamo di voler classificare delle recensioni in brutte e buone (sentiment analysis)

  • Abbiamo solo due classi, brutta (0) e buona (1): facciamo vedere tanti esempi di recensioni brutte e di recensioni buone al classificatore

  • gli possiamo fare apprendere i valori dei parametri w (vettore di pesi) e b bias in modo che:

    • quando la review è buona, z=wx+bz = wx + b sia un numero grande

    • quando la review è brutta, z=wx+bz = wx + b sia un numero piccolo

  • in pratica torna meglio se trasformiamo z in una probabilità e facciamo apprendere i parametri in modo che:

    • quando la review è buona, z corrisponda a una probabilità vicina a 1

    • quando la review è brutta, z corrisponda a una probabilità vicina a 0

  • Come si fa a trasformare un numero reale in una probabilità, facendolo tendere a 1 se è grande e a 0 se è piccolo?

Funzione sigmoide

  • (Grafico della funzione sigmoide)

Funzione sigmoide

  • Detta anche logistic function

    • σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

    • limz11+ez=0\lim_{z \to -\infty} \frac{1}{1 + e^{-z}} = 0

    • limz11+ez=1\lim_{z \to \infty} \frac{1}{1 + e^{-z}} = 1

  • Quindi usiamo σ(z)=σ(wx+b)\sigma(z) = \sigma(wx + b) come output del classificatore e abbiamo finito: otteniamo la probabilità p(y|x) che una review sia buona; se è bassa, allora la classifichiamo come cattiva

Funzione logit

  • La logit è la funzione inversa della logistic function.

  • Ponendo y=σ(z)y = \sigma(z),

    • 1y=1+ez\frac{1}{y} = 1 + e^{-z}

    • 1y1=ez\frac{1}{y} - 1 = e^{-z}

    • 1yy=ez\frac{1 - y}{y} = e^{-z}

    • ln(1yy)=z\ln(\frac{1 - y}{y}) = -z

    • z=ln(1yy)z = -\ln(\frac{1 - y}{y})

    • logit(y)=ln(1yy)=ln(y1y)logit(y) = -\ln(\frac{1 - y}{y}) = \ln(\frac{y}{1 - y})

Sicuri che funziona?

  • Calma…

  • σ(z)[0,1]\sigma(z) ∈ [0, 1], ma è veramente una probabilità?

    • σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

    • 1σ(z)=111+ez=ez1+ez1 - \sigma(z) = 1 - \frac{1}{1 + e^{-z}} = \frac{e^{-z}}{1 + e^{-z}}

    • 11+ez+ez1+ez=1\frac{1}{1 + e^{-z}} + \frac{e^{-z}}{1 + e^{-z}} = 1

  • Quindi sì, la somma fa 1 e σ(z)\sigma(z) è veramente una probabilità.

  • Notate anche che σ(z)=11+ez=ez1+ez=1σ(z)\sigma(-z) = \frac{1}{1 + e^{z}} = \frac{e^{-z}}{1 + e^{-z}} = 1 - \sigma(z)

Loss function nel caso binario

  • Per un’osservazione x, il classificatore fornisce y^=σ(wx+b)\hat{y} = \sigma(wx + b).

  • Si misura la differenza tra la classificazione y^\hat{y} e la vera y utilizzando un’apposita funzione detta loss function da minimizzare

  • Nel caso di classificazione binaria, p(yx)=y^y(1y^)(1y)p(y|x) = \hat{y}^y (1 - \hat{y})^{(1-y)}

    • Se la vera classe y è 0, p(0x)=1y^1p(0|x) = 1 - \hat{y} ≈ 1 se il classificatore fornisce y^0\hat{y} ≈ 0, ma p(0x)0p(0|x) ≈ 0 in caso di errore

    • Se invece la vera classe y è 1, p(1x)=y^1p(1|x) = \hat{y} ≈ 1 se il classificatore fornisce y^1\hat{y} ≈ 1, ma p(1x)0p(1|x) ≈ 0 in caso di errore

  • Quindi in ogni caso vogliamo massimizzare p(yx)p(y|x)

  • A noi però serve una funzione da minimizzare

  • Si trasforma la moltiplicazione in addizione prendendo il logaritmo a sinistra e a destra:

    • logp(yx)=ylogy^+(1y)log(1y^)log \, p(y|x) = y \, log \, \hat{y} + (1 - y) \, log(1 - \hat{y})

  • Si cambia segno!

  • Si usa (ylogy^+(1y)log(1y^))-(y \, log \, \hat{y} + (1 - y) \, log(1 - \hat{y})), che si chiama binary cross-entropy

Intuizione sulla Binary Cross-Entropy Loss

  • Intuitivamente, la binary cross-entropy penalizza di più il modello quando sceglie la classe sbagliata con alta probabilità (è sicuro di sé ma si sbaglia), aiutando così ad assegnare alta probabilità alla classe vera e bassa probabilità alla classe falsa.

  • (ylogy^+(1y)log(1y^))-(y \, log \, \hat{y} + (1 - y) \, log(1 - \hat{y}))

  • Esempi:

    • y = 1, y^=0.9\hat{y} = 0.9: 1log(0.9)(11)log(10.9)=log(0.9)0.11-1 \, log(0.9)-(1-1) \, log(1-0.9) = -log(0.9) ≈ 0.11 (predizione corretta, perdita piccola)

    • y = 0, y^=0.9\hat{y} = 0.9: 0log(0.9)(10)log(10.9)=0log(10.9)2.3-0 \, log(0.9) - (1 - 0) \, log(1 - 0.9) = 0 - log(1 - 0.9) ≈ 2.3 (predizione errata, perdita grande)

Regressione Logistica Multinomiale

  • E se invece abbiamo N > 2 classi?

  • Ad esempio, se vogliamo classificare un articolo di giornale tra politica, economia e sport (N = 3)?

  • Ognuna delle 3 classi avrà un suo vettore di pesi e un suo bias

  • La classe i-esima, avrà un suo vettore di pesi w<em>iw<em>i e un suo bias b</em>ib</em>i

  • Al posto del sigmoide, si usa la funzione softmax, che permette di normalizzare le probabilità:

    • p<em>i=softmax(z</em>i)=ez<em>i</em>j=13ezjp<em>i = softmax(z</em>i) = \frac{e^{z<em>i}}{\sum</em>{j=1}^{3} e^{z_j}}

    • dove z<em>i=w</em>ix+biz<em>i = w</em>i x + b_i

Funzione softmax

  • La funzione softmax trasforma un vettore di numeri reali in un vettore di probabilità che somma a 1.

  • Applicando la funzione softmax al vettore x = [100, 1000, 100000], otteniamo:

    • softmax(x)=1e100+e1000+e100000[e100 e1000 e100000][0 0 1]softmax(x) = \frac{1}{e^{100} + e^{1000} + e^{100000}} \begin{bmatrix} e^{100} \ e^{1000} \ e^{100000} \end{bmatrix} ≈ \begin{bmatrix} 0 \ 0 \ 1 \end{bmatrix}

  • La softmax ci permette di normalizzare un vettore in maniera che la somma dei suoi elementi sia 1 e che quindi i singoli elementi possano essere interpretati come probabilità.

  • Nel caso della regressione logistica multinomiale a 3 classi, l’uscita è un vettore di 3 elementi, ciascuno dei quali indica la probabilità che il testo appartenga a una delle 3 classi.

Gradient Descent

  • La discesa del gradiente (gradient descent) è un algoritmo di ottimizzazione utilizzato per trovare i minimi di una funzione.

  • Nel machine learning, la funzione a cui si applica è la loss function

  • Si parte da un punto iniziale e si utilizza il gradiente della funzione per muoversi verso il punto di minimo (o massimo).

  • Il gradiente è il vettore delle derivate parziali della funzione, che indica la direzione di massimo aumento.

  • Il passo di discesa viene controllato dal tasso di apprendimento (learning rate), che determina quanto velocemente l’algoritmo convergerà verso il minimo.

  • In pratica si usa stochastic gradient descent (SGD): per fare prima, si stima il gradiente su un sottoinsieme casuale del training set, che cambia a ogni iterazione

Regressione Logistica

  • Ricapitolando, occorrono i seguenti elementi:

    • Una rappresentazione delle features del testo.

    • Una funzione di classificazione che stima la classe a cui corrisponde il testo (sigmoid nel caso binario e softmax nel caso multinomiale)

    • Una funzione obiettivo per l’apprendimento che cerca di minimizzare l’errore tra classi predette e classi effettive sulla base dei dati di training (cross-entropy loss function)

    • Un algoritmo per ottimizzare la funzione obiettivo (stochastic gradient descent - SGD)

  • Ci sono due fasi:

    • Addestramento (training): addestriamo il sistema (imparando i parametri w e b della funzione di classificazione) utilizzando SGD e la cross-entropy loss function.

    • Test: dato un esempio di test x, gli si assegna l’etichetta y che massimizza p(y|x)

Regressione logistica come rete neurale

  • L’idea di base è avere una combinazione lineare delle features che rappresentano i dati di ingresso e darla in pasto a una funzione non-lineare per prendere una decisione (scegliere la classe)

    • Jurafsky & Martin, Speech and Language Processing

  • In pratica, la regressione logistica equivale a una rete neurale con un singolo layer

  • Nelle reti neurali, il sigmoide può essere sostituito da altre non-linearità, come ReLu o tanh

Funzioni di attivazione

  • Le non linearità si chiamano activation functions.

  • La loro caratteristica comune è la facilità di calcolo della derivata, che serve per gestire il processo di apprendimento.

    • Tangente iperbolica: tanh(z)=ezezez+eztanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}

    • Rectified Linear Unit (ReLU): f(z)=max(z,0)f(z) = max(z, 0)

  • Se non le usassimo, potremmo modellare soltanto relazioni lineari tra ingresso e uscita (inutile per problemi di classificazione dove l’uscita è la classe scelta)

Regressione logistica come rete neurale

  • Jurafsky & Martin, Speech and Language Processing

  • Nel caso multinomiale (più classi), bisogna invece usare la softmax (sigmoide generalizzato)

Reti neurali feedforward

  • Jurafsky & Martin, Speech and Language Processing

  • Una rete neurale feedforward con 2 layer permette l’apprendimento di relazioni non-lineari tra le features

  • Non è detto che aggiungere layer aiuti (dipende dalla complessità del problema)

Reti neurali feedforward

  • Hidden layer: h=σ(Wx+b)h = \sigma(Wx + b), con W e b da imparare automaticamente durante il training

  • Output layer: y=Uhy = Uh, con U da imparare automaticamente durante il training

  • Normalizzazione con una softmax per ottenere una distribuzione di probabilità in uscita (fondamentale per classificare)

  • D. Jurafsky & J.H. Martin

Estrazione di features

  • Abbiamo visto semplici tecniche (indicatori binari, TF, TF-IDF)

  • A seconda del problema, si possono usare features speciali (ad esempio, numero delle parole positive e negative per la sentiment analysis)

  • In pratica però la cosa migliore è avere un sistema che, partendo dai dati, impari automaticamente le features

  • Questo si chiama representation learning

  • Si associa a ogni parola grafica un vettore

  • Gli elementi del vettore vengono appresi in automatico dal sistema (con reti neurali)

  • Esempio notevole di questa tecnica: Word2Vec (Google, 2013)

Embeddings come features

  • Jurafsky & Martin, Speech and Language Processing

  • Gli embeddings possono essere utilizzati direttamente come features

  • Si possono usare embeddings pre-appresi, oppure farli apprendere dal nostro sistema

Ipotesi distribuzionale

  • Parole usate in contesti analoghi tendono ad avere significati simili

  • Esempio con finestra di lunghezza 2 da ogni lato della parola target

Approcci distribuzionali

  • Famoso esempio di Eugene Nida (1975): supponete che vi chieda cos’è un tesgüino

  • "Sulla base del contesto, avrete capito che un tesgüino è una bibita alcolica che si ottiene da qualche cereale (un po’ come la birra)."

  • Idea di base: parole semanticamente simili hanno contesti simili

  • Potremmo sostituire tesgüino con beer e quelle frasi avrebbero ancora senso

Word Embeddings

  • Embedding: rappresentazione di una parola attraverso un vettore denso (di dimensioni contenute) che cattura le relazioni tra parole

  • In passato si usavano le tecniche viste per la feature extraction e poi si usava l’algebra per proiettare i vettori su uno spazio vettoriale di dimensioni ridotte

  • Nell’ultimo decennio, hanno preso il sopravvento le tecniche predittive che usano una rete neurale (tipicamente feedforward e con pochi layer) per predire le singole parole sulla base delle parole vicine.

  • (Grafico di Google Trends per "word embeddings")

Modelli predittivi: Word2Vec

  • Si effettua il training di un classificatore (rete neurale feedforward) per predire la probabilità che una data parola sia parola di contesto di un’altra parola (ex. studente avrà una maggiore probabilità di essere parola di contesto di esame rispetto a lago)

  • Si parte con un grande corpus e quindi con un vocabolario di una data lunghezza

  • Ogni parola nel vocabolario del corpus è rappresentata come vettore (inizialmente random)

  • Considero le parole del corpus singolarmente. Quando una data parola è il target, ci saranno delle parole di contesto.

    • Skip-gram: predire le parole di contesto sulla base della parola target.

    • Continuous bag of words (CBOW): predire la parola target sulla base delle parole di contesto (viste come una bag of words)

  • Per iterazioni successive, si aggiustano i vettori per massimizzare la suddetta probabilità

  • Concetto chiave: predire la probabilità serve a far sì che il sistema popoli