Word2Vec - 通过特定向量寻找单词

3

我训练了一个gensim Word2Vec模型。 假设我有一个向量,想找出它所代表的单词 - 最好的方法是什么?

也就是说,对于一个特定的向量:

vec = array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)

我想获取一个单词:

 'computer' = model.vec2word(vec)

2
可能是如何使用word2vec找到最接近向量的单词的重复问题。 - Veltzer Doron
1
你得到的不是它所代表的单词,而是最相似的单词。如果你已经给出了它的确切向量表示(距离=0),那么这些单词可能就是语料库中的单词。但是word2vec的整个理念是,你可以通过相关单词向量之间的距离来获取语料库中单词的表示,该距离表示语义/句法距离度量。 - Veltzer Doron
2个回答

2
Word-vectors是通过一个迭代的、近似的过程生成的,因此不应该被认为是完全正确的(尽管它们确实具有精确的坐标),只能在一定的容差范围内使用。因此,无法通过精确的单词-坐标查找来获取结果。相反,在gensim的Word2Vec和相关类中,可以使用most_similar()方法,按排名顺序给出与给定已知单词或向量坐标最接近的已知单词,并给出它们之间的余弦相似度。因此,如果您刚刚训练(或加载)了一个完整的Word2Vec模型到变量model中,您可以使用以下代码获取与您的向量最接近的单词:
vec = array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)
similars = model.wv.most_similar(positive=[vec])
print(similars)

如果你只想得到最接近的单词,那么它应该在 similars[0][0] 中(即排名最高的元组的第一个位置)。

0
现在可以通过 vocab.vectors.most_similar 来支持此功能。
import spacy
nlp = spacy.load('en_core_web_md')
word_vec = nlp(u"Test").vector
result = nlp.vocab.vectors.most_similar(word_vec.reshape((1, -1)))
print(nlp.vocab.strings[result[0][0,0]], result)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接