Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Tf-Idf | Modelli di Testo di Base
Introduzione a NLP con Python

Tf-Idf

Scorri per mostrare il menu

Comprendere TF-IDF

Sebbene il modello bag of words sia semplice ed efficace, tende a sovrastimare i termini comuni, rendendo più difficile identificare parole meno frequenti ma più informative. Per ovviare a questo problema, viene spesso utilizzato il modello TF-IDF.

Note
Definizione

TF-IDF (term frequency-inverse document frequency) è una misura statistica che riflette quanto una parola sia importante per un documento specifico rispetto a un corpus più ampio.

A differenza di BoW, che si basa sul conteggio grezzo dei termini, TF-IDF tiene conto sia della frequenza di un termine all'interno di un documento sia della sua frequenza inversa nell'intero corpus. Questo riduce l'influenza dei termini comuni e mette in risalto quelli più rari e informativi.

Come funziona TF-IDF

Il punteggio TF-IDF per un termine in un documento viene calcolato come:

tf-idf(t,d)=tf(t,d)×idf(t)\def\tfidf{\operatorname{tf-idf}} \def\tf{\operatorname{tf}} \def\idf{\operatorname{idf}} \tfidf(t, d) = \tf(t, d) \times \idf(t)

dove:

  • tt è il termine (una parola o un n-gramma);
  • dd è il documento.
Formule TF-IDF

Esistono molte varianti per il calcolo dei valori di tf\operatorname{tf} e idf\operatorname{idf}. Vediamo un'opzione comune per ciascuno:

Frequenza del termine (TF)

Indica quanto spesso un termine appare in un documento, rappresentando la sua importanza relativa all'interno di quel documento. Simile al modello bag of words, spesso si utilizza un conteggio semplice:

tf(t,d)=count(t,d)\def\tf{\operatorname{tf}} \def\count{\operatorname{count}} \tf(t, d) = \count(t, d)

Frequenza inversa del documento (IDF)

Misura quanto è raro un termine nell'intero corpus. Può essere calcolato come il logaritmo naturale del rapporto tra il numero totale di documenti e il numero di documenti che contengono il termine:

idf(t)=log(1+Ndocuments1+df(t))+1\def\idf{\operatorname{idf}} \def\df{\operatorname{df}} \idf(t) = \log\Bigl(\frac{1 + N_{documents}}{1 + \df(t)}\Bigr) + 1

Questa formula utilizza uno smoothing (aggiungendo 1) per evitare la divisione per zero e garantisce che anche i termini comuni ricevano un punteggio IDF diverso da zero. In pratica, l'IDF riduce il peso dei termini frequenti e valorizza quelli più informativi e rari.

Senza la componente IDF, TF-IDF si ridurrebbe a un semplice conteggio dei termini — tornando essenzialmente al modello bag of words.

Calcolo del TF-IDF

Esempio pratico:

Calcolo TF-IDF

In questo caso, sono presenti solo due documenti e vengono utilizzati solo unigrammi (singole parole), quindi i calcoli risultano semplici. Si inizia calcolando le frequenze dei termini per ogni parola in entrambi i documenti, seguite dai valori IDF per i termini "a" e "is".

Note
Nota

Poiché ci sono solo due documenti nel nostro corpus, ogni termine che appare in entrambi i documenti avrà un valore IDF di 1, mentre gli altri termini avranno un valore IDF di ~1.406465.

Infine, è possibile calcolare i valori TF-IDF per ogni termine in ciascun documento moltiplicando TF per IDF, ottenendo la seguente matrice:

Matrice TF-IDF

Normalizzazione L2

I vettori TF-IDF risultanti possono variare significativamente in magnitudo, specialmente in grandi corpora, a causa delle differenze nella lunghezza dei documenti. Per questo motivo viene comunemente applicata la normalizzazione L2 — per scalare tutti i vettori a una lunghezza uniforme, consentendo confronti equi e imparziali tra documenti di lunghezze diverse.

Note
Approfondisci

La normalizzazione L2, nota anche come normalizzazione euclidea, è un processo applicato ai singoli vettori che ne regola i valori per garantire che la lunghezza del vettore sia 1.

La normalizzazione L2 viene effettuata dividendo ciascun termine del vettore per la norma euclidea del vettore.

Se il vettore documento è così:

d=(w1,w2,w3,...,wN)d = (w_1, w_2, w_3, ..., w_N)

dove wiw_i è il peso del termine ii,

allora la norma euclidea è così:

d2=w12+w22+w32+...+wN2\|d\|_2 = \sqrt{w^2_1 + w^2_2 + w^2_3 + ... + w^2_N}

e il vettore normalizzato è così:

dnorm=(w1d2,w2d2,w3d2,...,wNd2)d_{norm} = \Bigl(\frac{w_1}{\|d\|_2}, \frac{w_2}{\|d\|_2}, \frac{w_3}{\|d\|_2}, ..., \frac{w_N}{\|d\|_2})

Ecco come funziona la normalizzazione L2 per un vettore bidimensionale (un documento con 2 termini):

Normalizzazione L2
Note
Nota

Non preoccuparti se le formule sembrano complesse. Tutto ciò che facciamo è dividere ogni valore TF-IDF in un documento per la lunghezza (o magnitudine) del vettore TF-IDF di quel documento. Questo ridimensiona il vettore in modo che la sua lunghezza diventi 1, garantendo confronti coerenti tra vettori.

Applichiamo ora la normalizzazione L2 alla nostra matrice TF-IDF, che abbiamo calcolato sopra:

Matrice TF-IDF

La matrice risultante è esattamente quella che abbiamo visto come esempio in uno dei capitoli precedenti.

question mark

Qual è il principale vantaggio del modello TF-IDF rispetto al modello BoW?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 6

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 3. Capitolo 6
some-alt