Как рассчитать вектор разности в word2vec - PullRequest
0 голосов
/ 03 июля 2019

У меня есть двоичный файл word2vec, и я использую gensim для его загрузки.

Хотя в gensim есть функция для получения similarity между двумя словами, но нет функции для вычисления и возврата вектора разности.

Как я могу использовать два вектора и получить там разностный вектор?

А также я пытаюсь использовать эти разностные векторы как элемент классификации документов. Вычисление разностного вектора между каждым словом и каждым классом.Правильный ли это подход?

Например, если классы sport и politics

sport = [0.4,0.456,45,...] #wordvector of class
politics = [0.23,0.56...] #wordvector of class

И мое слово football

football = [0.2,0.6,0.45,...] #wordvector of football

Я хочувычислить разностный вектор

(sport - football) = [some vector] # this as a feature for classification

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Сами векторы поддерживают вычитание с помощью обычного оператора Python -, поэтому, если ваши загруженные слова-векторы находятся в переменной wv, это действительно так просто:

diff_vector = wv['sport'] - wv['football']

Затем вы можете попытаться найти другие векторы, ближайшие к новому вектору, с помощью:

wv.most_similar(positive=[diff_vector])

Поскольку в общем случае решения аналогий требуется сочетание положительных и отрицательных векторов, метод most_similar() даже позволяет вам предоставлять отрицательные примеры, поэтому вы также можете сделать различие и наиболее похожим в одном шаг:

wv.most_similar(positive=['sport'], negative=['football')

(Результаты могут немного отличаться от первого подхода из-за некоторого другого порядка нормализации единиц, который происходит внутри most_similar().)

0 голосов
/ 03 июля 2019

Как я могу использовать два вектора и получить там разностный вектор?

Ваше предчувствие простого вычитания двух векторов кажется правильным (источник: https://blog.galvanize.com/add-and-subtract-words-like-vectors-with-word2vec-2/). Вы можете использовать tenorflow, чтобы вычесть эти векторы слов, если я правильно помню, gensim использует tf.

А также я пытаюсь использовать эти разностные векторы как элемент классификации документов. Вычисление разностного вектора между каждым словом и каждым классом. Правильный ли это подход?

Я не знаю вашей цели, но я хотел бы изучить вашу собственную нейронную сеть, чтобы классифицировать слова / документы, я бы посмотрел на новый пакет идей, чтобы помочь вам в этом. https://github.com/zalandoresearch/flair/issues/787

...