word2vec - 通过特定向量查找单词
word2vec - find a word by a specific vector
我训练了一个 gensim Word2Vec 模型。
假设我有一个特定的向量,我想找到它代表的词 - 最好的方法是什么?
含义,对于特定向量:
vec = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
我想说一句话:
'computer' = model.vec2word(vec)
词向量是通过迭代的、近似的过程生成的——所以不应该被认为是精确的(即使它们确实有精确的坐标),只是 "useful within certain tolerances".
所以,没有查找精确坐标的精确词。相反,在 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]
(排名靠前的元组的第一个位置)。
现在通过 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)
我训练了一个 gensim Word2Vec 模型。 假设我有一个特定的向量,我想找到它代表的词 - 最好的方法是什么?
含义,对于特定向量:
vec = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
我想说一句话:
'computer' = model.vec2word(vec)
词向量是通过迭代的、近似的过程生成的——所以不应该被认为是精确的(即使它们确实有精确的坐标),只是 "useful within certain tolerances".
所以,没有查找精确坐标的精确词。相反,在 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]
(排名靠前的元组的第一个位置)。
现在通过 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)