【问题标题】:word2vec - find a word by a specific vectorword2vec - 通过特定向量查找单词
【发布时间】:2018-08-15 06:56:45
【问题描述】:

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

含义,对于特定的向量:

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

我要说一句话:

 'computer' = model.vec2word(vec)

【问题讨论】:

  • 你得到的不是它所代表的词,而是最相似的词。如果你给它精确的向量表示(距离=0),这些可以是语料库中的词。但是 word2vec 的整个想法是,您可以使用语义/句法距离度量来表示语料库中的单词,该度量由相关单词向量之间的距离表示。

标签: python-3.x nlp gensim word2vec


【解决方案1】:

词向量是通过一个迭代的、近似的过程生成的——所以不应该被认为是完全正确的(即使它们确实有精确的坐标),只是“在某些公差范围内有用”。

因此,没有精确字对精确坐标的查找。相反,在 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](排名最高的元组的第一个位置)中。

【讨论】:

    【解决方案2】:

    现在通过 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)
    

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 2015-08-15
      • 2016-06-06
      • 2015-12-21
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多