Tecniche di stemming

Transcript

Tecniche di stemming
Tecniche di stemming
Antonino Freno
[email protected]
Corso di Basi di Dati Multimediali – A.A. 2008/2009
Cos’è lo stemming
◮
Lo stemming è il processo usato per ridurre parole flesse al
loro tema;
◮
Il tema non deve necessariamente coincidere con la radice
morfologica della parola: l’importante è che parole con una
semantica strettamente correlata vengano mappate sullo
stesso tema;
◮
Le tecniche di stemming sono studiate in informatica da ben
40 anni; sono uno dei metodi di base per ridurre la
dimensionalità dei documenti di testo.
Esempi di stemming
◮
Quello che ci aspettiamo da un buono stemmer è che
riconosca (con la maggiore acucratezza possibile) la
correlazione tra termini a cui attribuiamo una semantica
comune, e sfrutti questa correlazione per sostituire tutti i
termini correlati con il tema corrispondente. Ad esempio:
◮
◮
‘gatto’, ‘gatta’, ‘gattino’, ‘gattaccio’, ecc. li vorremmo
mappati sul tema ‘gatto’, o ‘gatt’;
‘fish’, ‘fished’, ‘fishing’, ‘fisher’, ecc. li vorremmo mappati sul
tema ‘fish’.
Cenni storici
◮
◮
Il primo stemmer mai pubblicato è stato proposto da Julie
Beth Lovins nel 1968;
Uno stemmer più raffinato è stato pubblicato nel 1980 da
Martin Porter:
◮
◮
◮
Il Porter stemmer si è imposto come il metodo standard di
stemming dell’Inglese;
Nel 2000, il lavoro sullo stemming è valso a Porter il Tony
Kent Strix award.
Le implementazioni ufficiali del Porter stemmer in vari
linguaggi sono liberamente distribuite su
http://tartarus.org/~martin/PorterStemmer/.
Algoritmi di stemming
◮
In base all’approccio utilizzato, gli algoritmi di stemming si
possono dividere in alcune famiglie:
◮
◮
◮
◮
◮
◮
Algoritmi a forza bruta;
Algoritmi che operano per rimozione dei suffissi (suffix
stripping);
Algoritmi di lemmatizzazione;
Algoritmi stocastici;
Algoritmi ibridi;
Algoritmi di matching.
Algoritmi a forza bruta
◮
Gli algoritmi a forza bruta utilizzano una grossa tabella di
lookup per memorizzare l’insieme di tutte le coppie (w , w ′ )
tali che w è un termine flesso e w ′ è il tema corrispondente;
◮
Per fare lo stemming di una parola w , si controlla se la tabella
contiene w : in caso positivo, si rimpiazza w con il valore
corrispondente restituito dalla tabella, altrimenti si lascia w
inalterata;
◮
La tabella viene fornita dall’uomo, dunque deve essere
costruita a mano.
Algoritmi a forza bruta: Vantaggi
◮
La tabella di lookup è particolarmente utile per i casi in cui la
forma flessa si discosta da una regola generale (ad es. ‘went’
→ ‘go’, ‘children’ → ‘child’, ecc.);
◮
Migliorare il comportamento di uno stemmer a forza bruta è
solo una questione di aumentare la sua comprensività, cioè di
aggiungere più casi alla tabella: non serve alcuno sforzo di
riprogettazione, nè delle particolari competenze linguistiche.
Algoritmi a forza bruta: Svantaggi
◮
Non c’è nessun tipo di elaborazione profonda del testo;
◮
Rispetto alle dimensioni tipiche di ciascun documento, occorre
usare una quantità di memoria spropositata per mantenere la
tabella;
◮
L’accuratezza è strettamente dipendente dalle dimensioni
della tabella;
◮
Costruire la tabella a mano è un processo molto dispendioso,
e tutt’altro che banale;
◮
La tabella deve essere spesso aggiornata in considerazione di
nuovi termini e usi linguistici.
Algoritmi a rimozione dei suffissi
◮
Invece di immagazzinare una tabella di lookup, si
immagazzina un insieme di regole, che sia il più compatto
possibile. Regole tipiche sono ad esempio:
◮
◮
◮
“Se la parola finisce in ‘-ed’, rimuovi il suffisso ‘ed’ dalla
parola”;
“Se la parola finisce in ‘-ing’, rimuovi il suffisso ‘ing’ dalla
parola”;
“Se la parola finisce in ‘-ly’, rimuovi il suffisso ‘ly’ dalla parola”.
Algoritmi a rimozione dei suffissi: Vantaggi e svantaggi
◮
Vantaggi:
◮
◮
◮
Le regole che costituiscono il cuore dell’algoritmo codificano
una comprensione relativamente profonda del testo, dunque
catturano caratteristiche stabili della lingua;
La compattezza e la modularità del sistema di regole rendono
agevoli gli interventi di manutenzione;
Svantaggi:
◮
◮
La manutenzione/riprogettazione del sistema di regole richiede
una profonda competenza linguistica;
Le regole non catturano (per la loro stessa natura) le eccezioni,
dunque il sistema si comporta bene solo con le parole che
seguono fedelmente una morfologia generale.
Algoritmi di lemmatizzazione
◮
La lemmatizzazione è il processo per cui si individua il lemma
corrispondente ad un termine, cioè la voce canonica sotto cui
il termine viene catalogato in un dizionario;
◮
Rispetto agli algoritmi di rimozione del suffisso, la differenza
chiave è che la lemmatizzazione utilizza (come passo
preliminare) l’identificazione della parte del discorso
rappresentata da un termine (part of speech tagging): l’idea è
quella di usare regole di stemming relativizzate alla parte del
discorso identificata (sostantivo, verbo, ecc.).
Lemmatizzazione: Pro e contro
◮
Pro:
◮
◮
La lemmatizzazione è più raffinata (dunque potenzialmente più
precisa) del suffix stripping ordinario, perchè le regole di
stemming vengono applicate sfruttando maggiore informazione
sui termini trattati.
Contro:
◮
◮
Il part of speech tagging è un processo piuttosto complicato,
oltre che soggetto ad errore;
Quando il part of speech tagging fallisce, le regole di stemming
vengono applicate in modo errato.
Algoritmi probabilistici
◮
Gli algoritmi probabilistici vengono addestrati a effettuare lo
stemming, utilizzando un training set di coppie parola
flessa–tema;
◮
L’idea è quella di estrarre dall’insieme di addestramento delle
statistiche di correlazione parola flessa–tema, che nel loro
insieme costituiscono un modello probabilistico delle
trasformazioni morfologiche desiderate;
◮
Una volta appreso il modello dai dati di training, tale modello
è usato per stimare quale tra i possibili temi di una parola
flessa abbia la maggiore probabilità di essere corretto.
Algoritmi ibridi
◮
◮
Gli algoritmi ibridi usano due o più algoritmi delle famiglie
precedenti in combinazione tra loro;
Un esempio sarebbe l’algoritmo seguente:
1. Si consulta una tabella di lookup del tipo di quella degli
algoritmi a forza bruta, dove però sono memorizzate non tutte
le coppie del linguaggio, ma solo le eccezioni rispetto alle
regole morfologiche standard;
2. Se la tabella contiene la parola che si sta cercando di
trasformare, si prende il valore restituito dalla tabella,
altrimenti si lancia una routine di suffix stripping o di
lemmatizzazione su quella stessa parola.
Algoritmi di matching
◮
Gli algoritmi di matching tengono in memoria un database di
temi validi;
◮
Data una parola flessa, si cerca nel database il tema che ha il
matching migliore con la parola in questione, in base a criteri
come la lunghezza relativa del tema dentro la parola flessa;
◮
Quando il matching è ritenuto adeguato, si sostituisce la
parola flessa con il tema individuato.
Lovins (1968)
◮
◮
Il Lovins stemmer usa un dizionario di suffissi comuni (ad
es. ‘-ing’ o ‘-ation’), insieme ad una lista di eccezioni relative
ai suffissi (ad es. ‘nation’ rispetto a ‘-ation’): l’idea è che
un’eccezione sia una parola che contiene il suffisso solo
apparentemente, ma non come reale costituente morfologico;
Presa una parola flessa, si controlla se la parola termina con
uno dei suffissi contenuti nel dizionario:
◮
In caso positivo, si controlla se la parola non costituisca
un’eccezione rispetto al suffisso considerato:
◮
◮
In caso negativo (ossia se la parola non costituisce
un’eccezione), il suffisso viene rimosso.
Il Lovins stemmer contiene 294 suffissi, ciascuno dei quali è
associato con diverse eccezioni.
Porter (1980)
◮
Il Porter stemmer è una tecnica di suffix stripping molto simile
a quella di Lovins, ma con due differenze fondamentali:
1. Il numero di suffissi comuni considerati è di gran lunga
inferiore (circa 60 suffissi): la riduzione del numero di suffissi è
resa possibile dalla rimozione ricorsiva dei suffissi dalle parole
flesse (ad es. ‘hopefulness’ → ‘hopeful’ → ‘hope’);
2. Le eccezioni alla rimozione dei suffissi sono trattate con un
meccanismo unico, che valuta il tema rimanente dopo la
rimozione in base alla sua struttura sillabica: l’idea è di vietare,
ad esempio, la rimozione di ‘-ing’ da ‘string’ senza inserire
un’eccezione esplicita dentro lo stemmer.