Как работает сходство в SpaCy? - PullRequest
0 голосов
/ 29 октября 2018

Я попробовал один, например,

«Положительный» и «Отрицательный», они не похожи друг на друга, вместо этого они противоположны, но, тем не менее, SpaCy дает мне сходство 81% для них.

вот мой код,

import spacy

nlp = spacy.load('en_core_web_lg')
word1 = nlp(u'negative')
word2 = nlp(u'positive') 
word1_word2 = word1.similarity(word2)

print(word1_word2)

1 Ответ

0 голосов
/ 29 октября 2018

Как правило, подобия слов, подобные этим, вычисляются с использованием косинусного сходства между соответствующими им векторами слов. Слова, часто используемые в одних и тех же контекстах, оказываются в одинаковых местах в векторном пространстве, при условии, что слова, которые используются одинаково, означают похожие вещи. Например, Король и Королева могут быть похожими, и Король и Человек могут быть похожими, но Королева и Человек должны быть немного менее похожими (хотя они все еще оба относятся к «людям», и они оба являются существительными, так что они, вероятно, все же быть более похожим, чем, скажем, Man and Combusted).

Вы хотите, чтобы эти слова («Позитивные» и «Негативные») были отрицательными по отношению друг к другу (косинусное сходство -1), но они похожи, потому что они почти точно такие же слова, за исключением того, что одно является отрицанием другой. Глобальное семантическое векторное пространство включает в себя гораздо больше идей, чем просто отрицание, и поэтому эти два слова оказываются очень похожими в других отношениях. Что вы можете сделать, так это вычислить их средний вектор, тогда Positive -> average = - (Negative -> average), и этот вектор разности Positive -> average (или, точнее, "Positive" - ("Positive" - "Negative") / 2) будет приближать идею отрицания, которая вас особенно интересует. затем можно добавить этот вектор в другие случаи, чтобы отрицать их тоже, например, "Yes" + ("Negative" - "Positive") ~= "No"

Все, что нужно сказать, эффект, который вы наблюдаете, не является ошибкой Spacy, и вы не избежите этого, используя Gensim или Sklearn, это связано с природой того, что означает «сходство» в этом контексте. Если вам нужны более понятные, разработанные человеком семантические отношения между словами, подумайте о том, чтобы взглянуть на WordNet, который создан вручную и с большей вероятностью явно будет иметь какое-то отношение «отрицание» между вашими двумя словами.

...