¿Cómo puedo obtener una medida de la similitud semántica de las palabras?

20

¿Cuál es la mejor manera de descubrir la similitud semántica de las palabras? Word2Vec está bien, pero no es ideal:

# Using the 840B word Common Crawl GloVe vectors with gensim:

# 'hot' is closer to 'cold' than 'warm'
In [7]: model.similarity('hot', 'cold')
Out[7]: 0.59720456121072973

In [8]: model.similarity('hot', 'warm')
Out[8]: 0.56784095376659627

# Cold is much closer to 'hot' than 'popular'
In [9]: model.similarity('hot', 'popular')
Out[9]: 0.33708479049537632

Los métodos de Wordnet de NLTK parecen simplemente rendirse:

In [25]: print wn.synset('hot.a.01').path_similarity(wn.synset('warm.a.01'))
None

¿Cuáles son otras opciones?

Thomas Johnson
fuente
1
¿Puedes decir por qué word2vec no es ideal? Word2vec está diseñado para capturar la semejanza semántica de las palabras, entonces ¿por qué no es ideal?
SHASHANK GUPTA
3
Sí, por eso proporcioné los ejemplos en la pregunta. Para reiterar: 'hot' y 'cold' son antónimos, pero son más similares (según word2vec) que 'hot' y 'warm', que están mucho más cerca de los sinónimos. 'Caliente' también puede significar 'popular' (p. Ej., Un "elemento caliente") pero nuevamente "caliente" y "frío" están más cerca uno del otro que "caliente y" popular ". Así que word2vec no es ideal porque califica antónimos (que son opuestos semánticos) como más similares que los sinónimos (que son semánticamente equivalentes)
Thomas Johnson

Respuestas:

11

Word2vec no captura similitudes basadas en antónimos y sinónimos. Word2vec daría una mayor similitud si las dos palabras tienen el contexto similar. Por ejemplo, el clima en California fue _____. El espacio en blanco podría llenarse con calor y frío, por lo tanto, la similitud sería mayor. Este concepto se llama relaciones paradigmáticas.

Si está interesado en capturar relaciones como hipernimos, hipónimos, sinónimos y antónimos, deberá usar cualquier medida de similitud basada en Wordnet. Existen muchas medidas de similitud basadas en Wordnet. Puede consultar este enlace http://ws4jdemo.appspot.com/

Trideep Rath
fuente
7

En Text Analytic Tools for Semantic Similarity , desarrollaron un algoritmo para encontrar la similitud entre 2 oraciones. Pero si lees atentamente, encuentran la similitud de la palabra en una matriz y la suman para descubrir la similitud entre oraciones. Por lo tanto, podría ser una oportunidad para verificar la similitud de palabras.

También en SimLex-999: Evaluación de modelos semánticos con estimación de similitud (genuina) , explican la diferencia entre associationy similaritycuál es probablemente la razón de su observación también. Por ejemplo, café y una taza. No son similares pero son asociativos. Entonces, solo considerar la similitud daría un resultado diferente. Los autores sugieren varios modelos para estimarlos.

Hima Varsha
fuente
Enlace roto, "Herramientas de análisis de texto para similitud semántica".
xtian
2

Word2vec es un buen punto de partida para la mayoría de los escenarios. Se hace la semántica de captura a modo de predicción utilizando el método CBOW. Permite traducciones (como el ejemplo más repetido que puedo poner aquí de nuevo), V (Rey) - V (Reina) ~~ V (hombres) - V (mujeres) y así sucesivamente.

Entonces, ¿cuál es el problema? El problema radica en la ambigüedad del sentido de las palabras. Siempre que la palabra en sí tenga dos significados diferentes en dos contextos diferentes, la palabra vector tenderá a estar realmente lejos de cualquiera de los contextos. Python ~ Boa (ambas serpientes) y Python - Java (ambos lenguajes de programación).

Alguna alternativa?

Para el propósito muy específico de "sinónimos" si desea Wordnet sería el lugar ideal. Captura la relación explícita de dos palabras en lugar de la relación implícita basada en el uso y las ocurrencias.

Wordnet está principalmente diseñado como un diccionario, donde word2vec se extrae por el uso.

Dipan Mehta
fuente
0

En una gramática libre de contexto, creo que es realmente imposible determinar la cercanía de las palabras. Lo que puede hacer es usar vectores de léxico y luego, si una palabra tiene valores cercanos entre dos léxicos, entonces el valor debe estar cerca.

Josh
fuente