【问题标题】:Add word embedding to word2vec gensim model将词嵌入添加到 word2vec gensim 模型
【发布时间】:2017-09-21 17:34:49
【问题描述】:

我正在寻找一种将预训练的词向量动态添加到 word2vec gensim 模型的方法。

我在 txt(单词及其嵌入)中有一个预训练的 word2vec 模型,我需要获取特定语料库中的文档和新文档之间的 Word Mover 距离(例如通过gensim.models.Word2Vec.wmdistance)。

为了避免加载整个词汇表,我想只加载在语料库中找到的预训练模型单词的子集。但是,如果新文档中包含在语料库中找不到但在原始模型词汇表中的单词,则将它们添加到模型中,以便在计算中考虑它们。

我想要的是节省 RAM,所以可能的事情会帮助我:

  • 有没有办法将词向量直接添加到模型中?
  • 有没有办法从矩阵或其他对象加载到 gensim?我可以将该对象放在 RAM 中,并在将新单词加载到模型中之前将它们附加到它
  • 我不需要它在 gensim 上,所以如果你知道 WMD 的不同实现,它可以将向量作为输入来工作(尽管我在 Python 中确实需要它)

提前致谢。

【问题讨论】:

    标签: python nlp word2vec


    【解决方案1】:

    方法一:

    您可以只使用来自gensim.models.keyedvectorskeyedvectors。它们非常易于使用。

    from gensim.models.keyedvectors import WordEmbeddingsKeyedVectors
    
    w2v = WordEmbeddingsKeyedVectors(50) # 50 = vec length
    w2v.add(new_words, their_new_vecs)
    

    方法二:

    AND如果您已经使用gensim.models.Word2Vec 构建了模型,您可以这样做。假设我想用随机向量添加标记<UKN>

    model.wv["<UNK>"] = np.random.rand(100) # 100 is the vectors length
    

    完整的例子是这样的:

    import numpy as np
    import gensim.downloader as api
    from gensim.models import Word2Vec
    
    dataset = api.load("text8")  # load dataset as iterable
    model = Word2Vec(dataset)
    
    model.wv["<UNK>"] = np.random.rand(100)
    

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多