如何使用Word2Vec生成句向量?调用Word2Vec的vectorize属性报错如何解决?
报错原因
- 核心问题:Gensim的Word2Vec类本身没有内置
vectorize方法,你调用了不存在的属性才触发了AttributeError。 - 隐藏问题:你传入Word2Vec的
sentences参数格式也大概率不符合要求,Word2Vec要求输入的语料是分词后的嵌套列表结构(每一条样本对应一个分词后的词语列表),如果df['plot']是未分词的字符串,训练出来的模型也无法正常使用。 - 版本兼容提示:如果你用的是Gensim 4.0及以上版本,原
size参数已经更名为vector_size,否则训练阶段也可能触发参数报错。
修复方案
Word2Vec原生输出的是单个词的向量,要得到整句向量,最通用的做法是将句子中所有有效词的词向量取平均值即可,自己实现对应逻辑就能解决问题。
修复后的完整代码
import pandas as pd from gensim.models import Word2Vec # 中文语料用结巴分词,英文语料可替换为nltk等对应分词工具 import jieba # 1. 读取数据+预处理分词 df = pd.read_csv('after stopwords.csv') # 如果你的plot列已经是分词后的列表格式,可跳过下面的分词步骤 df['plot_cut'] = df['plot'].apply(lambda x: jieba.lcut(str(x))) # 2. 训练Word2Vec模型 # Gensim 3.x版本把vector_size换成size即可 model = Word2Vec(sentences=df['plot_cut'], vector_size=100, window=10, min_count=3, workers=4, sg=0) word_vectors = model.wv # 取出训练好的词向量表 # 3. 自定义句子向量生成函数 def get_sentence_vector(sentence_cut): # 过滤掉不在词表中的低频词/未登录词 valid_words = [word for word in sentence_cut if word in word_vectors] if not valid_words: # 无有效词时返回全0向量 return [0]*100 # 所有有效词的向量取平均得到句子向量 return list(word_vectors[valid_words].mean(axis=0)) # 4. 批量生成句子向量 df['plot_vector'] = df['plot_cut'].apply(get_sentence_vector)
内容的提问来源于stack exchange,提问作者Muhammad Mehran
相关产品推荐
相关产品推荐

