You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gensim4加载阿拉伯语预训练Word2Vec模型KeyError问题及修正验证

阿拉伯语预训练Word2Vec文本分类代码确认问题

我尝试使用阿拉伯语预训练Word2Vec模型完成文本分类任务,初始代码如下:

unknownArray=[]

# load the whole embedding into memory
w2v_embeddings_index={}
w2v_model =KeyedVectors.load('/content/drive/MyDrive/PythonProjectsUtilities/full_grams_cbow_100_twitter/full_grams_cbow_100_twitter.mdl')
for word in w2v_model.wv:
  try:
   w2v_embeddings_index[word] = w2v_model.wv[word]
  except KeyError:
    unknownArray.append(word)
print('Loaded %s word vectors.' % len(w2v_embeddings_index))

# create a weight matrix for words in training docs
embedding_matrix = np.zeros((len(word_index) + 1 , embedding_vecor_length))
for word, i in t.word_index.items():
    embedding_vector = w2v_embeddings_index.get(word)
    if embedding_vector is not None:
        embedding_matrix[i] = embedding_vector
print('Embedding Matrix shape:', embedding_matrix.shape)

尽管添加了异常处理,仍持续触发KeyError。于是我修改代码,仅将数据集word_index中存在的词加入w2v_embeddings_index,修改后代码如下:

w2v_embeddings_index={}
embedding_matrix = np.zeros((len(word_index) + 1 , embedding_vecor_length))

w2v_model = KeyedVectors.load("/content/drive/MyDrive/PythonProjectsUtilities/full_grams_sg_100_twitter.mdl")
print(len(w2v_model.wv))
for word , i in word_index.items():
  if word in w2v_model.wv:
     w2v_embeddings_index[word] = w2v_model.wv[word]

print('Loaded %s word vectors.' % len(w2v_embeddings_index))


# create a weight matrix for words in training docs
for word, i in word_index.items():
    embedding_vector = w2v_embeddings_index.get(word)
    if embedding_vector is not None:
        embedding_matrix[i] = embedding_vector
print('Embedding Matrix shape:', embedding_matrix.shape)

我不确定修改后的代码是否正确,急需专家确认,任务需在明日交付。


代码正确性确认

  • 修改后的代码逻辑完全正确,有效解决了初始代码的问题:

    1. 初始代码遍历预训练模型的所有词时触发KeyError,大概率是模型加载或版本兼容导致的异常,你的修改直接聚焦于数据集实际存在的词,从根源避免了无效的词取值操作。
    2. 先筛选出预训练模型中存在的数据集词汇,再构建嵌入矩阵,逻辑通顺,能确保最终的embedding_matrix只填充有效词向量,未匹配到的词保持初始零向量,符合文本分类任务中嵌入层的常规处理逻辑。
  • 可优化的细节:

    • 无需单独维护w2v_embeddings_index字典,直接在构建嵌入矩阵时判断词汇是否存在,减少一次遍历操作,提升效率:
      embedding_matrix = np.zeros((len(word_index) + 1, embedding_vecor_length))
      w2v_model = KeyedVectors.load("/content/drive/MyDrive/PythonProjectsUtilities/full_grams_sg_100_twitter.mdl")
      
      for word, i in word_index.items():
          if word in w2v_model.wv:
              embedding_matrix[i] = w2v_model.wv[word]
      
      print('Embedding Matrix shape:', embedding_matrix.shape)
      
    • 注意到你两次加载的模型文件不同:初始是CBOW模型,修改后是Skip-Gram模型,若此为无意操作,需确认是否使用了任务目标对应的预训练模型。

内容的提问来源于stack exchange,提问作者Arwa Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:27:21