使用预训练的word2vector模型

时间:2020-07-24 06:25:57

标签: nlp lstm word2vec

我正在尝试使用预训练的word2vector模型来创建单词嵌入,但是当我试图从word2vec遗传模型创建权重矩阵时,出现以下错误:

代码:

import gensim
w2v_model = gensim.models.KeyedVectors.load_word2vec_format("/content/drive/My Drive/GoogleNews-vectors-negative300.bin.gz", binary=True)

vocab_size = len(tokenizer.word_index) + 1
print(vocab_size)
EMBEDDING_DIM=300
# Function to create weight matrix from word2vec gensim model
def get_weight_matrix(model, vocab):
    # total vocabulary size plus 0 for unknown words
    vocab_size = len(vocab) + 1
    # define weight matrix dimensions with all 0
    weight_matrix = np.zeros((vocab_size, EMBEDDING_DIM))
    # step vocab, store vectors using the Tokenizer's integer mapping
    for word, i in vocab.items():
        weight_matrix[i] = model[word]
    return weight_matrix

embedding_vectors = get_weight_matrix(w2v_model, tokenizer.word_index)

出现以下错误:

Error

1 个答案:

答案 0 :(得分:0)

请注意:粘贴完整的错误最好是格式化文本而不是文本图像。 (有关原因的完整列表,请参见Why not upload images of code/errors when asking a question?。)

但是关于您的问题:

如果遇到KeyError: word 'didnt' not in vocabulary错误,可以相信您所请求的单词不在您所请求的单词向量中。 (在这种情况下,Google在2012年左右训练并发布了GoogleNews个向量。)

您可以在查找之前进行检查-'didnt' in w2v_model,它将返回False,然后执行其他操作。或者,您可以使用Python try: ... catch: ...公式来实现它,但是当它发生时再做其他事情。

但是,如果您提供的model没有您希望的单词向量,那么代码应该做什么取决于您。

(注意:GoogleNews向量确实包含"didn't"的向量,其收缩带有。因此,在这种情况下,问题可能是标记化正在从收缩中去除这种内部标点符号,但Google在制作这些向量时不选择这样做。但是,除非您确定通过其他步骤确定永远不可能发生,否则您的代码应该准备好处理丢失的单词。)