In questo articolo presenteremo un sistema di classificazione automatico di testi per il dominio della posta elettronica: JFilter, un modulo java che implementa un algoritmo fuzzy di classificazione di documenti (e-mail). L'area di interesse è quella definita con li termine "apprendimento automatico" (Machine Learning), una disciplina relativa allo studio di algoritmi in grado di simulare processi cognitivi nei calcolatori. Nel seguito forniremo alcuni principi di logica fuzzy e formuleremo l'algoritmo di classificazione per il dominio della posta indesiderata.

Logica Fuzzy

I computer, così come noi oggi li conosciamo, lavorano internamente secondo schemi di tipo on/off; nella logica classica, un predicato può assumere soltanto due possibili valori: vero o falso, tertium non datur (non esistono vie di mezzo). L'utilizzo di questa modalità di decisione binaria ha portato al raggiungimento di grandi risultati tecnologici. Eppure, in molti contesti che riguardano la realtà quotidiana, essi non sono sufficienti per modellarne alcuni aspetti. In particolare, attraverso la logica binaria non è possibile definire l'incertezza. L'incertezza è una componente molto importante del pensiero umano e del suo modo di percepire l'ambiente che lo circonda. Quando parliamo per esempio di una persona simpatica o antipatica, spesso ci riferiamo ad essa con affermazioni del tipo abbastanza simpatica, che introducono un certo margine di incertezza (vari livelli di sfumatura). Nel tentativo di risolvere questo problema, Zadeh teorizzò la cosiddetta logica fuzzy, che altro non è che il tentativo di generalizzare la logica classica a due valori, portandola a schemi molto più vicini al ragionamento umano. Per meglio comprendere l'idea che sta alla base della logica fuzzy, passiamo ad introdurre il concetto di insieme fuzzy. Nella teoria classica degli insiemi, detta degli insiemi crisp ("dai contorni bene definiti"), la funzione di appartenenza di un elemento dell'universo di definizione U ad un dato insieme A è definita come segue:

01

per ciascun elemento dell'universo è così possibile stabilire se esso appartiene o non appartiene all'insieme A. È possibile dunque affermare ad esempio, che tizio è una persona simpatica perché appartiene all'insieme delle persone simpatiche. Un'insieme fuzzy ("sfumato") è un'estensione di questo concetto, in cui la funzione di appartenenza viene definita come:

02

In questa nuova ottica, si è in grado non soltanto di affermare se tizio fa parte o meno dell'insieme delle persone simpatiche, ma si è in grado anche di affermare che esso vi appartiene con grado 0.56 (abbastanza simpatico), modellando così un certo grado di incertezza. Sulla base della definizione di insieme fuzzy, è possibile costruire un sistema logico, appunto detto logica fuzzy, in cui una proposizione è vera con un certo grado di verità pari ad esempio a 0.56 (e dunque falsa con grado di falsità pari a 0.44). La logica fuzzy gioca un importante ruolo nel campo dell'information retrieval e del machine learning, mostreremo infatti come una semplice formulazione fuzzy possa essere applicata in un dominio di classificazione automatica di e-mail SPAM.

L'approccio ML alla classificazione dei testi

Negli anni Ottanta l'approccio più popolare per la creazione di classificatori automatici di testi, consisteva nella creazione manuale, mediante tecniche di ingegneria della conoscenza, di un sistema esperto capace di prendere una decisione di classificazione. I sistemi esperti di questo tipo consistono di un insieme di regole logiche definite manualmente, una per categoria, del tipo.

if <DNF formula> then <categoria>

TRAIN Sia l'insieme delle categorie {c1,c2,...,cn} For i from 1 to n leti pi = <0,0,...,0> (inizializzazione) For each esempio di training <x,c(x)> in D Let d = vettore INTRA-CLUSTER/INTER-CLUSTER per il doc x Let i = j: (ci=c(x)) (somma di tutti i vettori in ci per ottenere pi) Let pi = pi + d TEST Dato un documento di test x Led d = vettore INTRA-CLUSTER/INTER-CLUSTER per x Let m = -2 (inizializzazione) For i from 1 to n: (calcola la similarità col vettore prototipo) Let s = fuzzySim(d, pi) similarità fuzzy if (s>m) Let m = s Let r = ci (aggiorna il più simile) Return class r Riassumiamo i passi... Usiamo lo standard di indicizzazione INTRA-CLUSTER/INTER-CLUSTER per rappresentare in forma vettoriale i documenti di testo (normalizzati secondo la frequenza massima di un termine). Per ogni categoria, elaboriamo un vettore "prototipo" dalla somma dei vettori di training della categoria infine assegniamo il documento di test alla categoria col vettore "prototipo" più vicino mediante l'utilizzo di misure di similarità Fuzzy. l valore di similarità viene calcolato attraverso una nota formulazione di correlazione nota come indice di Jaccard. La formula dell'indice di Jaccard è: s = c/(p+q-c), dove c rappresenta il numero di individui presenti simultaneamente nelle due popolazioni e p e q gli effettivi di ciascuna di esse. Se si preferisce è possibile definire la misura di jaccard come il rapporto tra unione e intersezione: