Está en la página 1de 7

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

MAESTRÍA EN CIENCIAS DE LA COMPUTACIÓN

“Desambiguación del Sentido de las Palabras (WSD) mediante


WordNet y el algoritmo LESK”

PRESENTA

JONATHAN ROJAS SIMÓN

ASESORA: DRA. YULIA NIKOLAEVNA LEDENEVA

TIANGUISTENCO, MÉX. FEBRERO 2018


Contenido
1. Desambiguación del sentido de la palabra ...................................................................... 3
1.2. Diccionario de sentidos WordNet ............................................................................ 4
1.3. Algoritmo LESK ...................................................................................................... 4
2. Implementación del algoritmo LESK en Python ............................................................ 5
2.1. Código ejecutable ........................................................................................................ 5
1. Desambiguación del sentido de la palabra

La desambiguación del sentido de las palabras (del inglés Word Sense Disambiguation
[WSD]) es una de las tareas más conocidas e importantes del Procesamiento del Lenguaje
Natural (PLN), el cual consiste en seleccionar el sentido más apropiado de una palabra
ambigua a partir de su propio contexto y de un conjunto de sentidos candidatos (Bolshakov
& Gelbukh, 2004; Tejada, 2006; Vargas, 2016). De la WSD se derivan varias tareas del PLN,
como la recuperación de la información (Baeza-Yates & Ribeiro-Neto, 1999), traducción
automática (Gelbukh & Bolshakov, 2003), búsqueda de respuestas (Aceves-Pérez, Montes-
y-Gómez, & Villaseñor-Pineda, 2007), generación automática de resúmenes (Ledeneva &
García-Hernández, 2017), etc.

La WSD surge a partir del problema de los múltiples sentidos que puede tener una palabra a
través de los niveles de la estructura del lenguaje (morfológico, sintáctico, semántico y
pragmático) (Bolshakov & Gelbukh, 2004; Gelbukh & Bolshakov, 2003), debido a que a
partir del cierto nivel puede existir una ambigüedad de sentidos. A partir de los múltiples
sentidos que puede tener una palabra a partir de una oración se menciona que la palabra en
cuestión tiene la característica de ser ambigua (Vargas, 2016).

Para solucionar los problemas relacionados a la WSD, se han desarrollado varios métodos
para asignar el sentido correcto de las palabras, algunos de ellos los describen en el trabajo
de (Torres, 2009) y son los siguientes:

 Basados en Diccionarios
o Algoritmo LESK (Lesk, 1986).
o Método de (Ledo, 2008).
 Basados en corpus
o Algoritmo McCarthy (McCarthy et al., 2004).
o Algoritmo Yarowsky (Yarowsky, 1995).
o Clasificadores bayesianos
 Programación directa
o Restricciones de selección
1.2. Diccionario de sentidos WordNet

WordNet es un sistema de referencia léxica desarrollado en la Universidad de Princeton por


George A. Miller (Tejada, 2006; Vargas, 2016). Uno de sus principales usos de este
diccionario está destinado a definir los sentidos de palabras a partir de un término. Define
synsets (conjuntos de sinónimos) a partir de las relaciones léxicas entre palabras. Este
diccionario es considerado como una base de datos de sustantivos, verbos, adjetivos y
adverbios utilizado como un recurso de desambiguación.

1.3. Algoritmo LESK

En el algoritmo de Lesk (Lesk, 1986) es uno de los algoritmos más conocidos para la WDS,
donde se propone utilizar la coherencia global del texto, es decir, el total de sentidos de
palabras relacionadas en el texto: mientras más relacionadas estén las palabras entre sí, más
coherente será el texto. El algoritmo LESK está representado mediante la siguiente secuencia
de pasos:

El algoritmo LESK recibe una oración y una palabra, donde la palabra debe estar contenida
en la oración y además será la palabra para desambiguar. Posteriormente se realiza un conteo
del traslape de sentidos de la palabra en cuestión, para ello se toma en cuenta el conteo del
conjunto de palabras que están relacionadas en el sentido asociado. Por último, se realiza la
asignación del mejor sentido por medio del máximo traslape de sus palabras asociadas en la
oración.
2. Implementación del algoritmo LESK en Python

Para implementar el algoritmo LESK (simplificado) en Python fue necesario utilizar las
siguientes librerías:

 Wordnet: Contiene el diccionario de significados y sentidos asociados, WordNet


está contenida como una librería de corpus en el conjunto de Librerías de NLTK.
 PunktWordTokenizer: Es un tokenizador que divide un texto en una lista de
oraciones, este tokenizador está basado en un algoritmo no supervisado para construir
un modelo de palabras de abreviación, colocaciones y palabras que comienzan
oraciones. Debe ser entrenado en una gran colección de texto plano en el idioma
destino antes de que pueda ser utilizado

2.1. Código ejecutable (Python)

from nltk.corpus import wordnet


from nltk.tokenize.punkt import PunktWordTokenizer
import sys

functionwords = ['about', 'across', 'against', 'along', 'around', 'at',


'behind', 'beside', 'besides', 'by', 'despite', 'down',
'during', 'for', 'from', 'in', 'inside', 'into', 'near', 'of',
'off', 'on', 'onto', 'over', 'through', 'to', 'toward',
'with', 'within', 'without', 'anything', 'everything',
'anyone', 'everyone', 'ones', 'such', 'it', 'itself',
'something', 'nothing', 'someone', 'the', 'some', 'this',
'that', 'every', 'all', 'both', 'one', 'first', 'other',
'next', 'many', 'much', 'more', 'most', 'several', 'no', 'a',
'an', 'any', 'each', 'no', 'half', 'twice', 'two', 'second',
'another', 'last', 'few', 'little', 'less', 'least', 'own',
'and', 'but', 'after', 'when', 'as', 'because', 'if', 'what',
'where', 'which', 'how', 'than', 'or', 'so', 'before', 'since',
'while', 'although', 'though', 'who', 'whose', 'can', 'may',
'will', 'shall', 'could', 'be', 'do', 'have', 'might', 'would',
'should', 'must', 'here', 'there', 'now', 'then', 'always',
'never', 'sometimes', 'usually', 'often', 'therefore',
'however', 'besides', 'moreover', 'though', 'otherwise',
'else', 'instead', 'anyway', 'incidentally', 'meanwhile']

def overlapcontext( synset, sentence ):


gloss = set(PunktWordTokenizer().tokenize(synset.definition()))
for i in synset.examples():
gloss.union(i)
gloss = gloss.difference( functionwords )
if isinstance(sentence, str):
sentence = set(sentence.split(" "))
elif isinstance(sentence, list):
sentence = set(sentence)
elif isinstance(sentence, set):
pass
else:
return
sentence = sentence.difference( functionwords )
return len( gloss.intersection(sentence) )

def lesk( word, sentence ):


bestsense = None
maxoverlap = 0
word=wordnet.morphy(word) if wordnet.morphy(word) is not None else word
for sense in wordnet.synsets(word):
overlap = overlapcontext(sense,sentence)
for h in sense.hyponyms():
overlap += overlapcontext( h, sentence )
if overlap > maxoverlap:
maxoverlap = overlap
bestsense = sense
return bestsense

sentence = raw_input("Introducir la oración o contexto:")


word = raw_input("Escribe la palabra a desambiguar :")

a = lesk(word,sentence)
print "\n\nSynset:",a
if a is not None:
print "Significa:",a.definition()
num=0
print "\nEjemplos:"
for i in a.examples():
num=num+1
print str(num)+'.'+')',i
Referencias
Aceves-Pérez, R. M., Montes-y-Gómez, M., & Villaseñor-Pineda, L. (2007). Enhancing
Cross-Language Question Answering by Combining Multiple Question Translations.
Conference on Intelligent Text Processing and Computational Linguistics, 485–493.
https://doi.org/10.1007/978-3-540-70939-8_43
Baeza-Yates, R., & Ribeiro-Neto, B. (1999). Modern information retrieval. New York, 9, 513.
https://doi.org/10.1080/14735789709366603
Bolshakov, I. A., & Gelbukh, A. (2004). Computational Linguistics: Models, Resources,
Applications. Computational Linguistics (First edit, Vol. 32).
https://doi.org/10.1162/coli.2006.32.3.443
Gelbukh, A., & Bolshakov, I. A. (2003). Internet, a True Friend of the Translator.
International Journal of Translation, 15, 31–50. Retrieved from
http://www.gelbukh.com/CV/Publications/2003/Bahri-2003.htm
Ledeneva, Y., & García-Hernández, R. A. (2017). Generación automática de resúmenes
Retos, propuestas y experimentos. Retrieved from
http://ri.uaemex.mx/bitstream/handle/20.500.11799/67655/Genera_automa_resumen.p
df?sequence=1&isAllowed=y
Ledo, Y. (2008). Recuperación de Información con Resolución de Ambigüedad de Sentidos
de Palabras para el Español. Computación Y Sistemas, 11(3), 288–300.
Lesk, M. (1986). Automatic sense disambiguation using machine readable dictionaries.
Proceedings of the 5th Annual International Conference on Systems Documentation -
SIGDOC ’86, 24–26. https://doi.org/10.1145/318723.318728
McCarthy, D., Koeling, R., Weeds, J., & Carroll, J. (2004). Finding predominant word senses
in untagged text. Proceedings of the 42nd Annual Meeting on Association for
Computational Linguistics - ACL ’04, 279–es.
https://doi.org/10.3115/1218955.1218991
Tejada, J. (2006). Desambiguación De Sentidos De Palabras Usando Relaciones Sintácticas
Como Contexto Local. Instituto Politécnico Nacional.
Torres, S. (2009). Optimización global de coherencia en la desambiguación del sentido de
las palabras. Instituto Politécnico Nacional. Retrieved from
http://www.nosolousabilidad.com/articulos/desambiguacion.htm
Vargas, S. (2016). Comparación de medidas de similitud para desambiguación del sentido
de las palabras utilizando rankeo de grafos. Universidad Autónoma del Estado de
México.
Yarowsky, D. (1995). Unsupervised word sense disambiguation rivaling supervised
methods. Proceedings of the 33rd Annual Meeting on Association for Computational
Linguistics -, 189–196. https://doi.org/10.3115/981658.981684

También podría gustarte