Как найти оценку для предложения Сходство, используя Word2Vec - PullRequest
0 голосов
/ 29 июня 2019

Я новичок в НЛП, как найти сходство между двумя предложениями, а также как напечатать оценки каждого слова.А также как реализовать модель gensim word2Vec.

Попробуйте этот код: здесь мои два предложения:

sentence1="I am going to India"
sentence2=" I am going to Bharat"
from gensim.models import word2vec
import numpy as np


words1 = sentence1.split(' ')
words2 = sentence2.split(' ')

#The meaning of the sentence can be interpreted as the average of its words
sentence1_meaning = word2vec(words1[0])
count = 1
for w in words1[1:]:
    sentence1_meaning = np.add(sentence1_meaning, word2vec(w))
    count += 1
sentence1_meaning /= count

sentence2_meaning = word2vec(words2[0])
count = 1
for w in words2[1:]:
    sentence2_meaning = np.add(sentence2_meaning, word2vec(w))
    count += 1
sentence2_meaning /= count

#Similarity is the cosine between the vectors
similarity = np.dot(sentence1_meaning, sentence2_meaning)/(np.linalg.norm(sentence1_meaning)*np.linalg.norm(sentence2_meaning))

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Вы можете обучить модель и использовать функцию подобия, чтобы получить косинусное сходство между двумя словами.

Вот простая демонстрация:

from gensim.models import Word2Vec
from gensim.test.utils import common_texts

model = Word2Vec(common_texts, 
                 size = 500, 
                 window = 5, 
                 min_count = 1, 
                 workers = 4)

word_vectors = model.wv

word_vectors.similarity('computer', 'computer')

Вывод будет, конечно, 1.0, что указывает на 100% сходство.

0 голосов
/ 29 июня 2019

После вашего from gensim.models import word2vec, word2vec - это модуль Python - , а не функция, которую вы можете вызвать как word2vec(words1[0]) или word2vec(w).

Так что ваш код даже близко не подходит к этому правильно, и вы должны просмотреть документы / руководства, которые демонстрируют правильное использование класса gensim Word2Vec и поддерживающих методов, а затем имитировать их.

Как упоминает @ david-dale, в документах gensim есть базовое введение для Word2Vec:

https://radimrehurek.com/gensim/models/word2vec.html

Библиотека gensim также объединяет в своем каталоге docs/notebooks ряд ноутбуков Jupyter, демонстрирующих различные алгоритмы и методы. Блокнот word2vec.ipynb показывает базовое использование Word2Vec; Вы также можете просмотреть его через репозиторий исходного кода проекта по адресу ...

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb

... однако, действительно, лучше всего работать как локальная записная книжка, так что вы можете шаг за шагом проходить выполнение ячейки и пробовать разные варианты самостоятельно, возможно, даже адаптируя его для использования ваших данных.

Когда вы достигнете этого уровня, обратите внимание, что:

  • эти модели требуют гораздо большего, чем просто несколько предложений для обучения - поэтому в идеале вы должны иметь (а) много предложений из той же области, что и сравниваемые вами, чтобы модель могла выучить слова в эти контексты; (б) модель, подготовленную из совместимого корпуса, которую вы затем применяете к своим предложениям вне корпуса.

  • использование среднего значения всех слов-векторов в предложении является лишь одним относительно простым способом сделать вектор для более длинного текста; Есть много других более сложных способов. Одной альтернативой, очень похожей на Word2Vec, является алгоритм «Вектор абзаца», также доступный в gensim как класс Doc2Vec.

...