Medición de Similitud Semántica con WordNet en Python

Clase 20 de 24Curso de Fundamentos de Procesamiento de Lenguaje Natural con Python y NLTK

Contenido del curso

Fundamentos con NLTK

Resumen

Medir qué tan cercanas son dos palabras en significado es una tarea fundamental en el procesamiento de lenguaje natural. WordNet ofrece funciones integradas que permiten calcular esa cercanía a partir de la estructura de grafos que conecta sus synsets, los conjuntos de sinónimos asociados a cada palabra. A continuación se explica paso a paso cómo construir una función en Python para obtener synsets y cómo usar la métrica path similarity para cuantificar la distancia semántica entre palabras.

¿Cómo construir una función para obtener los synsets de cualquier palabra?

El punto de partida es definir una función reutilizable que, dada una palabra en español, devuelva todos los synsets relacionados y los muestre de forma legible [0:30].

python def showsynths(word): ss = wn.synsets(word, lang='spa') for sin in ss: print(sin.name(), sin.definition()) for nombre in sin.lemma_names(): print(f' * {nombre}') return ss

  • wn.synsets(word, lang='spa') genera la lista completa de synsets vinculados a la palabra en español.
  • El primer for recorre cada synset e imprime su nombre y definición.
  • El for interno itera sobre los lemma names, es decir, las palabras que pertenecen a ese conjunto de sinónimos.
  • Aunque la entrada sea en español, los resultados aparecen en inglés porque WordNet mapea todo hacia su estructura original en ese idioma [1:42].

¿Qué resultados se obtienen con palabras concretas?

Al ejecutar showsynths('perro') se obtienen dos synsets: dog y rotter [2:00]. Con showsynths('gato') aparecen tres: cat, tom y dodger, que no todos se refieren al animal [2:20]. Y showsynths('animal') devuelve varias acepciones como animal, beast y dunce, esta última haciendo referencia al uso coloquial de llamar "animal" a alguien que hace algo tonto [2:50].

Este detalle es clave: una misma palabra puede tener múltiples synsets con significados muy distintos.

¿Por qué es necesario especificar el synset correcto?

Cuando se quiere medir similitud semántica, es imprescindible indicar en qué sentido se usa cada palabra [3:30]. Por ejemplo:

  • Para "perro" se selecciona el synset correspondiente a la mascota (dog).
  • Para "gato" se elige igualmente el synset de mascota (cat).
  • Para "animal" se toma la acepción de organismo vivo con movimiento voluntario.

Esta selección del contexto correcto es lo que permite obtener una similitud semántica precisa, ya que la función de distancia opera entre synsets específicos, no entre palabras ambiguas.

¿Cómo funciona la métrica path similarity?

La función path_similarity calcula la distancia entre dos synsets contando el número de vértices que los separan dentro del grafo jerárquico de WordNet [4:10].

python animal.path_similarity(perro) # 0.333 animal.path_similarity(gato) # 0.125 perro.path_similarity(perro) # 1.0

  • Un valor de 1.0 indica que los synsets son idénticos, es decir, la palabra comparada consigo misma.
  • Valores cercanos a 0 indican palabras semánticamente muy distantes.
  • En el ejemplo, "animal" obtiene 0.333 de similitud con "perro" y solo 0.125 con "gato", lo que refleja que en la estructura léxica del español (y del inglés), la palabra animal está semánticamente más cercana a perro que a gato [5:30].

¿Qué errores comunes pueden surgir al asignar variables?

Durante el ejercicio se presentó un error frecuente: asignar la variable gato al primer elemento de la lista ss en lugar de ss2 [5:00]. Al reutilizar la misma lista, ambas variables apuntaban al mismo synset y el resultado era idéntico. Corregir la referencia a la lista correcta produjo valores distintos y coherentes. Este tipo de descuido al manejar variables es habitual y conviene verificar siempre que cada synset provenga de la lista adecuada.

¿Qué aplicaciones tiene esta medida de similitud?

Con la similitud basada en caminos (path similarity) se obtiene una métrica normalizada entre 0 y 1 que permite comparar pares de palabras de forma cuantitativa. Esto resulta útil en tareas como clasificación de textos, desambiguación de sentido y sistemas de recomendación basados en contenido.

Si has probado WordNet con otras palabras y obtuviste resultados inesperados, comparte tu experiencia: ¿qué pares de palabras te sorprendieron por su cercanía o lejanía semántica?