我是NLP的新手,它如何找到2个句子之间的相似度,以及如何打印每个单词的分数。以及如何实现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))
答案 0 :(得分:1)
您可以训练模型并使用相似度函数来获取两个单词之间的余弦相似度。
这是一个简单的演示:
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%相似。
答案 1 :(得分:0)
在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
...但是,实际上最好是作为本地笔记本运行,因此您可以逐个单元逐步执行,然后自己尝试不同的变体,甚至可以改编它以使用您的数据。
达到该级别时,请注意:
这些模型需要的训练不仅仅是几个句子-因此,理想情况下,您要么要拥有(a)与您正在比较的域相同域的许多句子,以便该模型可以学习以下形式的单词这些背景; (b)从兼容语料库训练的模型,然后将其应用于您的语料外句子。
使用句子中所有单词向量的平均值只是为较长文本创建向量的一种相对简单的方法;还有许多其他更复杂的方法。与Word2Vec
非常相似的另一种选择是“段落向量”算法,该算法在gensim
中也可以作为类别Doc2Vec
使用。