¿Cómo calculo la distancia de la ruta más corta (geodésica) entre dos adjetivos en WordNet usando Python NLTK?

El cálculo de la similitud semántica entre dos synsets en WordNet se puede hacer fácilmente con varias medidas de similitud incorporadas, tales como:

synset1.path_similarity(synset2) 

synset1.lch_similarity(synset2) , similitud de Leacock-Chodorow

synset1.wup_similarity(synset2) , Wu-Palmer Similarity

(como se ve aquí)

Sin embargo, todos estos explotan las relaciones taxonómicas de WordNet, que son relaciones para sustantivos y verbos. Los adjetivos y los adverbios se relacionan a través de la sinonimia, la antonimia y los sinónimos. ¿Cómo se puede medir la distancia (número de saltos) entre dos adjetivos?

Intenté path_similarity() , pero como se esperaba, devuelve 'None' :

 from nltk.corpus import wordnet as wn x = wn.synset('good.a.01') y = wn.synset('bad.a.01') print(wn.path_similarity(x,y)) 

Si hay alguna forma de calcular la distancia entre un adjetivo y otro, se lo agradecería mucho.

No hay una manera fácil de obtener similitud entre palabras que no son sustantivos / verbos.

Como se señaló, la semejanza de sustantivos / verbos se extrae fácilmente de

 >>> from nltk.corpus import wordnet as wn >>> dog = wn.synset('dog.n.1') >>> cat = wn.synset('cat.n.1') >>> car = wn.synset('car.n.1') >>> wn.path_similarity(dog, cat) 0.2 >>> wn.path_similarity(dog, car) 0.07692307692307693 >>> wn.wup_similarity(dog, cat) 0.8571428571428571 >>> wn.wup_similarity(dog, car) 0.4 >>> wn.lch_similarity(dog, car) 1.072636802264849 >>> wn.lch_similarity(dog, cat) 2.0281482472922856 

Para el adjetivo es difícil, por lo que necesitarías construir tu propio dispositivo de similitud de texto. La forma más fácil es usar el modelo de espacio vectorial, básicamente, todas las palabras están representadas por un número de números de punto flotante, por ejemplo,

 >>> import numpy as np >>> blue = np.array([0.2, 0.2, 0.3]) >>> red = np.array([0.1, 0.2, 0.3]) >>> pink = np.array([0.1001, 0.221, 0.321]) >>> car = np.array([0.6, 0.9, 0.5]) >>> def cosine(x,y): ... return np.dot(x,y) / (np.linalg.norm(x) * np.linalg.norm(y)) ... >>> cosine(pink, red) 0.99971271929384864 >>> cosine(pink, blue) 0.96756147991512709 >>> cosine(blue, red) 0.97230558532824662 >>> cosine(blue, car) 0.91589118863996888 >>> cosine(red, car) 0.87469454283170045 >>> cosine(pink, car) 0.87482313596223782 

Para entrenar un montón de vectores para algo como pink = np.array([0.1001, 0.221, 0.321]) , deberías probar google para

  • Indización semántica latente / Análisis semántico latente
  • Bolsa de palabras
  • Modelo de espacio vectorial semántica.
  • Word2Vec, Doc2Vec, Wiki2Vec
  • Redes neuronales
  • similitud de coseno lenguaje natural semántica

También puede probar algunas bibliotecas / software de estante como:

Además del modelo de espacio vectorial, puede probar un modelo gráfico que coloca palabras en un gráfico y usa algo como pagerank para recorrer el gráfico y darle una medida de similitud.

Ver también:

  • ¿Comparar similitud de términos / expresiones usando NLTK?
  • Compruebe si dos palabras están relacionadas entre sí
  • ¿Cómo determinar las jerarquías / relaciones semánticas en el uso de NLTK?
  • ¿Existe un algoritmo que diga la similitud semántica de dos frases?
  • Algoritmos de paridad semántica – python

En el artículo de Kamps et al. (2004) , definieron una gráfica de palabras como nodos a los que se conectan los nodos si dos palabras son sinónimos. Luego definieron el camino más corto entre dos palabras como su distancia geodésica . Según tengo entendido, no hay peso en los bordes, lo que significa que básicamente puedes contar el número de bordes cuando quieres encontrar el camino más corto.

El papel:

Kamps, Jaap, et al. “Uso de WordNet para medir las orientaciones semánticas de los adjetivos”. LREC. Vol. 4. 2004.

Pero lo que realmente buscan es una medida para la orientación semántica . Depende de su aplicación para elegir la mejor medida en consecuencia. Un conjunto de medidas de similitud que recientemente logró una gran atención se basa en la hipótesis de distribución . Estos métodos de aprendizaje automático basados ​​en el uso de palabras en documentos grandes crean medidas de similitud geométrica (p. Ej., Similitud de coseno). Pero estos métodos están desconectados conceptualmente de las medidas de distancia de WordNet.

Sin embargo, existen algunos trabajos para utilizar el brillo de WordNet y las definiciones en los conjuntos de sinte como ejemplos de contexto para aprender modelos estadísticos de palabras como Patwardhan y Pedersen (2006) . Pero, en general, estos modelos no son adecuados para encontrar orientaciones sentimentales sin supervisión de positividad o negatividad.