Gensim 4.3.0中Word2Vec无infer_vector属性,求替代句向量生成方法
问题
环境信息
Name: gensim Version: 4.3.0 Summary: Python framework for fast Vector Space Modelling Home-page: http://radimrehurek.com/gensim Author: Radim Rehurek Author-email: me@radimr
报错情况
使用Word2Vec将句子转换为向量时,调用infer_vector方法触发以下错误:
AttributeError: 'Word2Vec' object has no attribute 'infer_vector'
现有代码
# 输入:clean_data[:3] # 输出: # [['good'], # ['nice'], # ['its', # 'ok', # 'but', # 'still', # 'not', # 'work', # 'some', # 'times', # 'please', # 'upgrade', # 'a', # 'valuable', # 'process']] from gensim.models import Word2Vec model= Word2Vec(clean_data, vector_size=100, min_count=2, sg=1) model.train(clean_data,total_examples=model.corpus_count,epochs=model.epochs) # 触发报错的代码行 model.infer_vector(['its','ok','but','still','not','work','some','times','please','upgrade','a','valuable','process'])
要求必须使用Word2Vec,请问有没有其他方法可将句子转换为向量?
解决方案
Gensim 4.x版本中Word2Vec类已移除infer_vector方法,以下是两种基于Word2Vec模型的句子向量化替代方案:
手动计算词向量平均值:遍历句子中的词,过滤掉模型未收录的词后取向量均值
def get_sentence_vector(sentence, word2vec_model, vec_size): valid_vecs = [] for word in sentence: if word in word2vec_model.wv: valid_vecs.append(word2vec_model.wv[word]) # 若所有词都未被收录,返回零向量 return sum(valid_vecs) / len(valid_vecs) if valid_vecs else [0.0]*vec_size # 调用示例 target_sentence = ['its','ok','but','still','not','work','some','times','please','upgrade','a','valuable','process'] sentence_vec = get_sentence_vector(target_sentence, model, 100)使用
KeyedVectors内置方法:model.wv(即KeyedVectors实例)提供了现成的get_mean_vector方法,自动处理未收录词target_sentence = ['its','ok','but','still','not','work','some','times','please','upgrade','a','valuable','process'] sentence_vec = model.wv.get_mean_vector(target_sentence)
额外提示
- 你的代码中
model.train调用是冗余的:初始化Word2Vec时已自动完成训练,重复训练会导致模型参数不必要的迭代更新。 - 当前设置
min_count=2会过滤掉出现次数不足2次的词(比如示例中的good、nice),如果需要这类词参与计算,建议调整该参数。
内容的提问来源于stack exchange,提问作者user41968
相关产品推荐
相关产品推荐

