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

Resumen

¿Cómo se mide la similitud semántica usando WordNet?

En el fascinante mundo del procesamiento del lenguaje natural, una tarea esencial es la medición de la similitud semántica entre palabras. WordNet, una base de datos léxica, se convierte en una herramienta invaluable para esta tarea al permitir calcular la distancia semántica basándose en sinónimos y conceptos asociados a las palabras. Vamos a explorar cómo podemos utilizar WordNet para este propósito, con un ejercicio sencillo y práctico utilizando Python.

¿Cómo definir una función para mostrar sinsets?

Para comenzar a trabajar con WordNet, primero necesitamos una función en Python que nos permita explorar los sinsets, o conjuntos de sinónimos, relacionados con una palabra. Aquí te mostramos cómo definir dicha función en un notebook de Google Colab.

import nltk
from nltk.corpus import wordnet as wn

# Función para mostrar sinsets
def show_synset(word, language='spa'):
    # Crear lista de sinsets
    ss = wn.synsets(word, lang=language)
    for syn in ss:
        print(f'{syn.name()} - {syn.definition()}')
        for lemma in syn.lemmas():
            print(f'* {lemma.name()}')
    # Retorne el objeto SS
    return ss

Esta función show_synset toma como argumento una palabra y busca sus sinsets en español, mostrando su nombre, definición y variantes de palabras.

¿Cómo calcular sinsets y medir similitud?

Uso de show_synset

Podemos usar la función creada show_synset para explorar sinsets de diferentes palabras de interés. Por ejemplo, si queremos calcular los sinsets de "perro":

sinsets_perro = show_synset("perro")

Lo interesante es que, aunque configuramos para buscar en español, los resultados se mapean en inglés debido al núcleo de WordNet.

Medición de similitud semántica

Para medir la similitud semántica entre palabras, primero necesitamos elegir sinsets específicos que representen el contexto deseado para cada palabra:

  • Seleccionamos el sinset "dog" para "perro"
  • Seleccionamos el sinset "cat" para "gato"
  • Seleccionamos el sinset más adecuado para "animal" con el significado de organismo vivo.

Cálculo de la distancia

La similitud se calcula usando la función path_similarity, que mide los vértices que separan los sinsets en el grafo:

# Definición de sinsets específicos
perro = sinsets_perro[0]  # suposición de que el primer elemento es el adecuado
gato = show_synset("gato")[0]
animal = show_synset("animal")[0]

# Cálculo de similitud de 'animal' con 'perro'
similaridad_animal_perro = animal.path_similarity(perro)
print(similaridad_animal_perro)

# Cálculo de similitud de 'animal' con 'gato'
similaridad_animal_gato = animal.path_similarity(gato)
print(similaridad_animal_gato)

Los valores de similitud están entre 0 y 1, donde 1 significa total similitud (idéntico sinset), mientras que valores menores indican menor similitud.

¿Por qué es útil esta métrica?

La capacidad de medir similitudes semánticas tiene múltiples aplicaciones:

  1. Análisis de textos: Útil para entender relaciones semánticas en documentos.
  2. Motores de recomendación: Para sugerir elementos relacionados semánticamente.
  3. Traducción automática: Mejora en la precisión mediante la comprensión contextual.
  4. Sistemas de búsqueda semántica: Mejora de resultados de búsqueda al entender la intención detrás de las palabras.

¡Explorar WordNet es solo el comienzo! Continúa profundizando en estas técnicas, y verás cómo revolucionan el acercamiento al lenguaje humano.