Comment puis-je obtenir une mesure de la similitude sémantique des mots?

20

Quelle est la meilleure façon de comprendre la similitude sémantique des mots? Word2Vec est correct, mais pas idéal:

# 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

Les méthodes Wordnet de NLTK semblent simplement abandonner:

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

Quelles sont les autres options?

Thomas Johnson
la source
1
Pouvez-vous dire pourquoi word2vec n'est pas idéal? Word2vec est conçu pour capturer la similitude sémantique des mots, alors pourquoi n'est-il pas idéal?
SHASHANK GUPTA
3
Oui, c'est pourquoi j'ai fourni les exemples dans la question. Pour réitérer: «chaud» et «froid» sont des antonymes, mais ils sont plus similaires (selon word2vec) que «chaud» et «chaud» qui sont beaucoup plus proches des synonymes. "Chaud" peut également signifier "populaire" (par exemple, un "élément chaud") mais encore une fois "chaud" et "froid" sont plus proches l'un de l'autre que "chaud et" populaire ". Par conséquent, word2vec n'est pas idéal car il marque des antonymes (qui sont des opposés sémantiques) comme plus similaires que des synonymes (qui sont sémantiquement équivalents)
Thomas Johnson

Réponses:

11

Word2vec ne capture pas la similitude basée sur des antonymes et des synonymes. Word2vec donnerait une similitude plus élevée si les deux mots ont le même contexte. Par exemple, le temps en Californie était _____. Le blanc pourrait être rempli à la fois par le chaud et le froid, d'où la similitude serait plus élevée. Ce concept est appelé relations paradigmatiques.

Si vous souhaitez capturer des relations telles que des hypernymes, des hyponymes, des synonymes, des antonymes, vous devrez utiliser n'importe quelle mesure de similarité basée sur Wordnet. Il existe de nombreuses mesures de similitude basées sur wordnet. Vous pouvez vérifier ce lien http://ws4jdemo.appspot.com/

Trideep Rath
la source
7

Dans Text Analytic Tools for Semantic Similarity , ils ont développé un algorithme afin de trouver la similitude entre 2 phrases. Mais si vous lisez attentivement, ils trouvent la similitude du mot dans une matrice et additionnent pour découvrir la similitude entre les phrases. Donc, il pourrait être utile de vérifier la similitude des mots.

Également dans SimLex-999: Évaluation des modèles sémantiques avec une estimation de similitude (authentique) , ils expliquent également la différence entre associationet similarityqui est probablement la raison de votre observation. Par exemple, du café et une tasse. Ils ne sont pas similaires mais ils sont associatifs. Le simple fait de considérer la similitude donnerait un résultat différent. Les auteurs proposent différents modèles pour les estimer.

Hima Varsha
la source
Lien brisé, "Outils d'analyse de texte pour la similitude sémantique".
xtian
2

Word2vec est un bon point de départ pour la plupart des scénarios. Il fait la sémantique de capture par voie de prédiction en utilisant la méthode CBOW. Il permet des traductions (comme exemple le plus répété que je peux mettre ici), V (King) - V (Queen) ~~ V (men) - V (women) et ainsi de suite.

Alors quel est le problème? Le problème réside dans l'ambiguïté du sens des mots. Chaque fois que le mot lui-même a deux sens différents dans deux contextes différents, le mot vecteur aura tendance à être vraiment éloigné de l'un ou l'autre contexte. Python ~ Boa (les deux serpents) et Python - Java (les deux langages de programmation) ..

Une alternative?

Dans le but très spécifique de "synonymes" si vous voulez, Wordnet serait l'endroit idéal. Il capture la relation explicite de deux mots plutôt qu'une relation implicite basée sur l'utilisation et les occurrences.

Wordnet est principalement conçu comme un dictionnaire - où word2vec est extrait par utilisation.

Dipan Mehta
la source
0

Dans une grammaire sans contexte, je pense qu'il est vraiment impossible de déterminer la proximité des mots. Ce que vous pouvez faire est d'utiliser des vecteurs de lexique, puis si un mot est proche de valeurs entre deux lexiques, la valeur doit être proche.

Josh
la source