python - 将词嵌入添加到 word2vec gensim 模型

标签 python nlp word2vec

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

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

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

我想要的是节省 RAM,因此可能对我有帮助的事情:

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

  • 提前致谢。

    最佳答案

    方法一:
    您可以使用 keyedvectors来自 gensim.models.keyedvectors .它们非常易于使用。

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

    方法二:
    如果您已经使用 gensim.models.Word2Vec 构建了模型你可以这样做。假设我想添加 token <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)
    

    关于python - 将词嵌入添加到 word2vec gensim 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43598212/

    相关文章:

    javascript - 给定一个索引位置,我如何拆分出该位置所在的句子?

    python - 如何在拆分字符串和数字之前避免包含字符串和数字的行?

    python - csh 标准输入到 Python 标准输入?

    python - 如何仅在字符串中连续时删除重复项?

    Python 创建同义词簇

    python - 有没有一种简单的方法可以告诉 SpaCy 在使用 .similarity 方法时忽略停用词?

    python - 在列表中调用 'del'

    Python - 数据编码向量到Word

    text - 如何使用单词的向量表示(从 Word2Vec 等获得)作为分类器的特征?

    machine-learning - 缺乏文本特征矢量化的想法(音乐流派)