使用预先训练的word2向量模型



我试图使用预训练的word2vector模型来创建单词嵌入,但当我试图从word2vec genism模型创建权重矩阵时,我遇到了以下错误:

代码:

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)

我得到以下错误:

错误

注意:将完整错误粘贴为格式化文本比粘贴为文本图像要好。(请参阅询问问题时为什么不上传代码/错误的图像?了解原因的完整列表。(

但关于你的问题:

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

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

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

(注意:GoogleNews向量中确实包含了"didn't"的向量,收缩及其内部撇号。因此,在这种情况下,问题可能是你的标记化正在从收缩中剥离这些内部标点符号,但谷歌在制作这些向量时选择了不这样做。但在任何情况下,你的代码都应该准备好处理缺失的单词,除非你通过er永远不会发生的步骤。(

最新更新