Tre algoritmi di Word Sense Disambiguation
This post is available in English
La disambiguazione del significato delle parole (word sense disambiguation, w.s.d.) è quella parte dell’elaborazione del linguaggio naturale che si occupa di attribuire ad una parola (token) il suo significato nel contesto in cui appare.
In questo articolo sono presentati tre algoritmi probabilistici per risolvere questo problema, accompagnati dalla loro implementazione in Python.
Gli algoritmi sono:
- algoritmo Naive Bayes;
- algoritmo di Lesk;
- algoritmo EM (Expectation-Maximization);
e sono stati testati su questo corpus opportunamente pre-processato con il codice presente in corpus_preprocessing.py.
Algoritmo Naive Bayes
Questo algoritmo appartiene alla classe degli algoritmi di apprendimento supervisionato e si basa su tre fattori:
Per semplicità indichiamo come feature fi di una parola wi tutte le altre parole wj che appaiono nella stessa frase; con i ≠ j.
Avremo quindi:
Il risultato dell’ultima espressione rappresenta il significato più adatto per la parola w.
Implementazione in Python: naive_bayes.py
Algoritmo di Lesk
L’algoritmo di Lesk utilizza un dizionario per disambiguare le parole: WordNET è il database che serve.
Il concetto alla base dell’algoritmo di Lesk è l’intersezione tra la definizione data dal dizionario e il contesto in cui appare la parola da disambiguare. Più precisamente, il significato attribuito dall’algoritmo è quello nella cui definizione (che può essere estesa con alcune frasi di esempio) compaiono il numero maggiore di parole (feature) del contesto.
Implementazione in Python: lesk.py
Algoritmo EM
L’algoritmo Expectation-Maximization fa parte della classe degli algoritmi di apprendimento non supervisionato.
L’obiettivo è la massimizzazione del likelihood del corpus:
dove C è il corpus e ci sono i singoli contesti che compongono il corpus, ovvero le frasi.
All’inizio i parametri P(sk) e P(fj|sk) vengono inizializzati in modo casuale. Come il nome suggerisce, l’algoritmo iterativo è composto dalle fasi:
- E-step: stima la probabilità a posteriori che il senso sk generi il contesto ci.
- M-step: ricalcolo dei parametri P(sk) e P(fj|sk).
Il ciclo iterativo va avanti finché l(C) viene migliorato.
Implementazione in Python: em.py
Note
Nonostante non abbia riscontrato altri errori nei codici sorgente se non quelli segnalati con i commenti nei file stessi, non garantisco la loro completa correttezza.
Riferimenti
- Alessandro Raganato, Jose Camacho-Collados and Roberto Navigli.Word Sense Disambiguation: A Unified Evaluation Framework and Empirical Comparison. Proceedings of EACL 2017, Valencia, Spain.
- Word Sense Disambiguation (WSD) – UAIC
Lorenzo Vainigli
Sviluppatore Android e appassionato fin da piccolo di computer e tecnologia.
Ho una laurea magistrale in Informatica conseguita all'Università di Bologna.
Mi piacciono l'astronomia 🌌 e la cultura giapponese ⛩️.
Qui racconto di più su di me.