Una mail arriva sul server. In pochi millisecondi il filtro antispam deve decidere: casella di posta o cestino? Siamo nei primi anni Duemila, le reti neurali sono una curiosità accademica, eppure quel filtro funziona sorprendentemente bene. Non capisce l’italiano né l’inglese. Non sa cosa significhi «offerta imperdibile». Sa solo contare parole. E per molti compiti, contare parole basta.
Tokenizzazione, one-hot, bag-of-words e TF-IDF, fino ai vettori densi degli embedding: il percorso completo è nel libro.
Leggi «Rappresentare il testo: dai token agli embedding» nel libro →
Questa è la storia di come l’elaborazione del linguaggio naturale ha funzionato per decenni prima delle reti neurali: un’idea quasi imbarazzante nella sua semplicità, il bag of words, e la sua raffinazione più celebre, il TF-IDF. Capirle non è archeologia: è capire il punto di partenza rispetto a cui tutto il resto — word2vec, i transformer, gli LLM — è stato una risposta.
Il sacco di parole
L’idea del bag of words è questa: prendi un documento, strappalo parola per parola, butta tutti i pezzi in un sacco e scuoti. L’ordine è perso per sempre. «Il cane morde l’uomo» e «l’uomo morde il cane» diventano lo stesso sacco: due articoli, un cane, un uomo, un morso. Quello che resta è solo quali parole compaiono e quante volte.
Sembra una perdita devastante — e in parte lo è, ci arriviamo. Ma pensa a come riconosci l’argomento di un giornale sfogliandolo in fretta: se vedi «spread», «BCE», «rendimenti» sai che è una pagina di economia, anche senza leggere una sola frase intera. Le parole, da sole, portano già un segnale fortissimo sull’argomento. Il bag of words scommette tutto su quel segnale.
Dal testo al vettore
Per un algoritmo, il sacco diventa un vettore: una lunga lista di numeri. Si costruisce prima un vocabolario con tutte le parole viste nel corpus — diciamo 50.000 — e poi ogni documento diventa una riga di 50.000 caselle, quasi tutte a zero, dove la casella di ogni parola contiene il suo conteggio nel documento.
Da testo a numeri: il bag of words trasforma un documento in un vettore dove ogni posizione corrisponde a una parola del vocabolario e il valore è quante volte compare. L’ordine delle parole scompare.
Il trucco è che ora due documenti si possono confrontare matematicamente: se i loro vettori puntano in direzioni simili (misurate con la similarità del coseno), probabilmente parlano di cose simili. Sopra questi vettori si può addestrare un classificatore semplice — Naive Bayes, regressione logistica — e ottenere un filtro antispam, un classificatore di argomenti, un motore di ricerca elementare.
Il problema delle parole troppo comuni
C’è un difetto evidente: nei conteggi grezzi vincono sempre le parole più frequenti, che sono anche le meno informative. «Di», «che», «il» compaiono ovunque e non dicono nulla sull’argomento. Anche togliendo le cosiddette stopword, resta il problema in forma più sottile: in un corpus di articoli di calcio, la parola «partita» compare dappertutto e non distingue niente; «fuorigioco semiautomatico» compare in pochi articoli e li identifica benissimo.
La soluzione ha un nome preciso e una madre precisa: l’inverse document frequency, proposta da Karen Spärck Jones nel 1972. L’intuizione: il peso di una parola dev’essere proporzionale a quanto compare nel documento (term frequency, TF) ma inversamente proporzionale a quanti documenti del corpus la contengono (IDF). In formula, il peso tipico è tf(t,d) × log(N / df(t)), dove N è il numero di documenti e df(t) quanti contengono il termine.
L’analogia è quella del collezionista di francobolli: se in una collezione trovi un francobollo comune, non ti dice nulla sul collezionista; se trovi un esemplare raro, ti dice moltissimo. TF-IDF fa esattamente questo con le parole — premia gli indizi rari e silenzia il rumore di fondo.
Una parola che compare ovunque non dice niente. Una parola che compare solo qui dice tutto. TF-IDF è questa intuizione, trasformata in una formula di una riga.
Cosa si perde nel sacco
I limiti del bag of words sono i motivi per cui esiste tutto l’NLP successivo, e vale la pena guardarli in faccia.
- L’ordine è perso. «Non è buono, è ottimo» e «non è ottimo, è buono» hanno lo stesso sacco. I bigrammi (coppie di parole consecutive) tamponano un po’, al prezzo di vocabolari enormi.
- I sinonimi sono estranei. «Auto» e «macchina» sono due caselle diverse del vettore, distanti quanto «auto» e «carciofo». Il modello non ha modo di sapere che significano quasi la stessa cosa.
- Le parole ambigue sono schiacciate. «Calcio» sport, «calcio» elemento chimico e «calcio» pedata finiscono nella stessa casella.
- I vettori sono sparsi ed enormi. Cinquantamila dimensioni quasi tutte a zero: statisticamente scomodo, computazionalmente sprecone.
Il problema dei sinonimi, in particolare, è quello che aprirà la strada agli embedding: rappresentazioni dense dove parole simili stanno vicine. Ma questa è la puntata successiva (word2vec).
Perché conta ancora oggi
Sarebbe facile archiviare tutto questo come preistoria. Sarebbe anche sbagliato. Primo: TF-IDF e il suo discendente diretto BM25 sono ancora il cuore di moltissimi motori di ricerca reali, incluso il retrieval «lessicale» che affianca quello vettoriale nei sistemi RAG moderni — la ricerca ibrida che trovi in Elasticsearch o in molte pipeline di produzione combina proprio embedding neurali e punteggi in stile BM25, perché sulle corrispondenze esatte (nomi propri, codici, sigle) il vecchio metodo batte spesso il nuovo.
Secondo: è la baseline onesta. Se stai costruendo un classificatore di testi in azienda, una regressione logistica su TF-IDF si addestra in secondi, gira su un portatile, è spiegabile riga per riga — e su tanti problemi concreti (smistare ticket, filtrare recensioni, taggare documenti) arriva a un soffio dai modelli neurali. Se il tuo sistema con LLM non batte nettamente questa baseline, stai pagando GPU per niente.
Terzo, e più importante per chi legge: capire il bag of words significa capire cosa i modelli successivi hanno aggiunto davvero. L’ordine delle parole, la somiglianza semantica, il contesto: ogni pezzo dell’NLP moderno è la risposta a un difetto specifico del sacco di parole. Chi conosce la domanda capisce molto meglio la risposta — e la prossima volta che qualcuno propone «mettiamoci un LLM», saprà chiedere: abbiamo provato prima a contare le parole?

I commenti sono riservati agli iscritti.
Accedi per commentare