Каков наилучший способ выяснить семантическое сходство слов? Word2Vec хорошо, но не идеально:
# 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
Методы Wordnet в NLTK, похоже, просто сдаются:
In [25]: print wn.synset('hot.a.01').path_similarity(wn.synset('warm.a.01'))
None
Какие есть другие варианты?
nlp
word-embeddings
word2vec
nltk
Томас Джонсон
источник
источник
Ответы:
Word2vec не отражает сходство, основанное на антонимах и синонимах. Word2vec даст более высокое сходство, если два слова имеют одинаковый контекст. Например, погода в Калифорнии была _____. Бланк может быть заполнен как горячим, так и холодным, поэтому сходство будет выше. Эта концепция называется парадигматическими отношениями.
Если вы заинтересованы в фиксации отношений, таких как гиперонимы, гипонимы, синонимы, антоним, вам придется использовать любую меру сходства, основанную на Wordnet. Есть много мер сходства, основанных на Wordnet. Вы можете проверить эту ссылку http://ws4jdemo.appspot.com/
источник
В инструментах анализа текста для семантического сходства они разработали алгоритм, чтобы найти сходство между двумя предложениями. Но если вы читаете внимательно, они находят сходство слова в матрице и суммируют вместе, чтобы выяснить сходство между предложениями. Таким образом, это может быть попытка проверить сходство слов.
Также в SimLex-999: Оценка семантических моделей с (Подлинной) оценкой сходства , они объясняют разницу между ними
association
и,similarity
вероятно, также являются причиной вашего наблюдения. Например, кофе и чашка. Они не похожи, но они ассоциативны. Так что просто рассмотрение сходства даст другой результат. Авторы предлагают различные модели для их оценки.источник
Word2vec является хорошей отправной точкой для большинства сценариев. Это делает захват семантику путем прогнозирования с использованием метода CBOW. Это позволяет переводы (как наиболее повторяющийся пример, который я могу привести здесь снова), V (Король) - V (Королева) ~~ V (мужчины) - V (женщины) и так далее.
Так в чем проблема? Проблема заключается в неоднозначности смысла слова. Всякий раз, когда само слово имеет два разных значения в двух разных контекстах, слово вектор будет иметь тенденцию быть действительно вне любого контекста. Python ~ Boa (оба змеи) и Python - Java (оба языка программирования).
Любая альтернатива?
Для очень конкретной цели «синонимы», если вы хотите, Wordnet будет идеальным местом. Он фиксирует явную связь двух слов, а не неявную связь, основанную на использовании и вхождениях.
Wordnet в основном создается как словарь, где word2vec добывается при использовании.
источник
В грамматике без контекста, я думаю, что это действительно отчасти невозможно определить близость слов. То, что вы можете сделать, это использовать векторы лексикона, а затем, если слово близко к значениям между двумя лексиконами, значение должно быть близко.
источник