# Tf-idf

La funzione di peso tf-idf (term frequency–inverse document frequency) è una funzione utilizzata in information retrieval per misurare l'importanza di un termine rispetto ad un documento o ad una collezione di documenti. Tale funzione aumenta proporzionalmente al numero di volte che il termine è contenuto nel documento, ma cresce in maniera inversamente proporzionale con la frequenza del termine nella collezione. L'idea alla base di questo comportamento è di dare più importanza ai termini che compaiono nel documento, ma che in generale sono poco frequenti.
Un'indagine condotta nel 2015 ha mostrato che l'83% dei sistemi di raccomandazione basati sul testo nelle biblioteche digitali utilizza tf-idf.

## Studio delle frequenze
### Frequenza di termine

Ipotizziamo di avere un insieme di documenti di testo in italiano e di volerli classificare in base a quale sia il documento più rilevante per l'interrogazione "la mucca marrone". Un modo semplice per iniziare è escludere i documenti che non contengono tutte e tre le parole "la", "mucca" e " marrone", ma ciò lascerebbe ancora molti documenti. Per distinguerli ulteriormente, potremmo contare il numero di volte in cui ogni termine ricorre in ogni documento; il numero di volte in cui un termine ricorre in un documento è chiamato frequenza di termine. Tuttavia, nel caso in cui la lunghezza dei documenti sia molto variabile, spesso vengono apportate delle correzioni. La prima forma di ponderazione dei termini è dovuta a Hans Peter Luhn (1957) e può essere riassunta come segue:
   Il peso di un termine che ricorre in un documento è semplicemente proporzionale alla frequenza del termine.

### Frequenza inversa del documento

Poiché il termine "la" è estremamente comune, la frequenza del termine tenderà a enfatizzare erroneamente i documenti che utilizzano più frequentemente la parola "la", senza dare sufficiente peso ai termini più significativi "mucca" e "marrone". Per questo motivo, viene incorporato un fattore inverso di frequenza dei documenti che diminuisce il peso dei termini che ricorrono molto frequentemente nell'insieme dei documenti e aumenta il peso dei termini che ricorrono raramente. Nel 1972, Karen Spärck Jones ha concepito un'interpretazione statistica della specificità dei termini chiamata Inverse Document Frequency (idf), che è diventata una pietra miliare della ponderazione dei termini:
   La specificità di un termine può essere quantificata come una funzione inversa del numero di documenti in cui compare.

## Formula matematica

La funzione può essere scomposta in due fattori: Il primo fattore della funzione è il numero dei termini presenti nel documento. In genere questo numero viene diviso per la lunghezza del documento stesso per evitare che siano privilegiati i documenti più lunghi.
    $\mathrm {tf_{i,j}} ={\frac {n_{i,j}}{|d_{j}|}},$
dove $n_{i,j}$ è il numero di occorrenze del termine i{\textstyle i} nel documento j{\textstyle j}, mentre il denominatore |d$_j$|{\textstyle |d_{j}|} è semplicemente la dimensione, espressa in numero di termini, del documento $j$.
L'altro fattore della funzione indica l'importanza generale del termine $i$ nella collezione:
    $\mathrm {idf_{i}} =\log _{10}{\frac {|D|}{|\{d:i\in d\}|}},$
dove $|D|$ è il numero di documenti nella collezione, mentre il denominatore è il numero di documenti che contengono il termine $i$.
Abbiamo quindi che:
    $\mathrm {(tf{\mbox{-}}idf)_{i,j}} =\mathrm {tf_{i,j}} \times \mathrm {idf_{i}} .$

## Esempio

Consideriamo un documento contenente 100 parole e nel quale il termine pluto compare 5 volte. Il fattore TF per il termine pluto è ${\frac {5}{100}}=0,05$. Assumiamo di avere ora 1 000 documenti nella collezione e pluto compare in 10 di questi. Quindi $IDF=\log _{10}{\frac {1000}{10}}=2$. Da questo possiamo calcolare il valore Tf-idf relativo alla parola pluto nel documento iniziale: ${\mbox{TF-IDF}}=0,05\times 2=0,1$.