Gensim升级后Word2Vec出现int无index及syn0不存在属性报错求助
Gensim 4.x Word2Vec两处AttributeError报错解决方案
报错原因排查
第一处报错
- Gensim 3.x版本中
wv.vocab返回字典的值为Vocab对象,可通过.index属性获取对应词的整数索引 - Gensim 4.x版本替换
wv.vocab为wv.key_to_index,该字典的值直接为int类型的索引值,无index属性,你修改后的列表推导式写法是正确的
第二处报错
- Gensim 4.x版本移除了KeyedVectors对象的
syn0属性,原存储词向量的syn0已重命名为vectors
修复后完整可用代码
# 此处为你已经修正的第一部分代码 word_vec_unpack = [(word, index) for word, index in \ word_vec.wv.key_to_index.items()] tokens, indexes = zip(*word_vec_unpack) # 仅修改syn0为vectors即可解决第二处报错 word_vec_df = pd.DataFrame(word_vec.wv.vectors[indexes, :], index=tokens) tokenized_array = np.array(tokenized) model_array = np.array([word_vec_df.loc[doc].mean(axis=0) for doc in tokenized_array]) model_df = pd.DataFrame(model_array) model_df["label"] = df_final["Classification"] display(model_df.head())
可选优化
不需要单独遍历key_to_index生成索引列表,可直接用word_vec.wv.vectors获取所有词向量,word_vec.wv.index_to_key获取按索引排序的词列表,代码可简化为:
word_vec_df = pd.DataFrame(word_vec.wv.vectors, index=word_vec.wv.index_to_key)
内容的提问来源于stack exchange,提问作者yinky
相关产品推荐
相关产品推荐

