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?
nlp
word-embeddings
word2vec
nltk
Thomas Johnson
la source
la source
Réponses:
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/
la source
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
association
etsimilarity
qui 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.la source
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.
la source
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.
la source