Was ist der beste Weg, um die semantische Ähnlichkeit von Wörtern herauszufinden? Word2Vec ist okay, aber nicht 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
NLTKs Wordnet-Methoden scheinen einfach aufzugeben:
In [25]: print wn.synset('hot.a.01').path_similarity(wn.synset('warm.a.01'))
None
Was sind andere Möglichkeiten?
nlp
word-embeddings
word2vec
nltk
Thomas Johnson
quelle
quelle
Antworten:
Word2vec erfasst keine Ähnlichkeit basierend auf Antonyme und Synonyme. Word2vec würde eine höhere Ähnlichkeit ergeben, wenn die beiden Wörter einen ähnlichen Kontext haben. ZB war das Wetter in Kalifornien _____. Die Lücke könnte sowohl heiß als auch kalt gefüllt werden, daher wäre die Ähnlichkeit höher. Dieses Konzept nennt man paradigmatische Beziehungen.
Wenn Sie sich für die Erfassung von Beziehungen wie Hypernymen, Hyponymen, Synonymen und Antonymen interessieren, müssen Sie jedes wordnet-basierte Ähnlichkeitsmaß verwenden. Es gibt viele Ähnlichkeitsmaße, die auf wordnet basieren. Sie können diesen Link überprüfen http://ws4jdemo.appspot.com/
quelle
In Text Analytic Tools für semantische Ähnlichkeit haben sie einen Algorithmus entwickelt, um die Ähnlichkeit zwischen zwei Sätzen zu ermitteln. Wenn Sie jedoch genau lesen, finden Sie die Ähnlichkeit des Wortes in einer Matrix und addieren sie, um die Ähnlichkeit zwischen Sätzen zu ermitteln. Es könnte also ein Versuch sein, die Ähnlichkeit von Wörtern zu überprüfen.
Auch in SimLex-999: Auswertung semantischer Modelle mit (echter) Ähnlichkeitsschätzung erklären sie den Unterschied zwischen
association
undsimilarity
was wahrscheinlich auch der Grund für Ihre Beobachtung ist. Zum Beispiel Kaffee und eine Tasse. Sie sind nicht ähnlich, aber sie sind assoziativ. Wenn man also nur die Ähnlichkeit berücksichtigt, ergibt sich ein anderes Ergebnis. Die Autoren schlagen verschiedene Modelle vor, um diese einzuschätzen.quelle
Word2vec ist ein guter Ausgangspunkt für die meisten Szenarien. Es tut Capture Semantik anhand Vorhersage CBOW Methode. Es erlaubt Übersetzungen (wie ich es am meisten wiederholen kann), V (König) - V (Königin) ~~ V (Männer) - V (Frauen) und so weiter.
Was ist also das Problem? Das Problem liegt in der Mehrdeutigkeit des Wortsinns. Wenn das Wort selbst in zwei verschiedenen Kontexten zwei verschiedene Bedeutungen hat, ist der Wortvektor in der Regel von beiden Kontexten weit entfernt. Python ~ Boa (beide Schlangen) und Python - Java (beide Programmiersprachen).
Irgendeine Alternative?
Für den ganz bestimmten Zweck von "Synonymen" wäre Wordnet der ideale Ort. Es erfasst die explizite Beziehung von zwei Wörtern und nicht die implizite Beziehung, die auf der Verwendung und dem Vorkommen basiert.
Wordnet wird meistens als Wörterbuch erstellt - wobei word2vec durch Verwendung gewonnen wird.
quelle
In einer kontextfreien Grammatik halte ich es für unmöglich, die Nähe von Wörtern zu bestimmen. Was Sie tun können, ist die Verwendung von Lexikonvektoren. Wenn ein Wort in Werten zwischen zwei Lexika nahe beieinander liegt, sollte der Wert nahe beieinander liegen.
quelle