如何解决NumPy中「设置数组元素为序列」的形状不均问题?
问题原因
这段代码报错是因为不同句子中,能在词向量模型中找到的单词数量不一致,导致生成的子数组长度参差不齐。numpy无法将这种不规则的序列转换为规整的多维数组,因此抛出ValueError。
解决方法
核心思路是对每个句子的词向量做聚合操作,得到固定维度的句向量,这样所有句子的结果维度一致,就能正常生成numpy数组。常用的聚合方式有均值、最大值、求和等,以下是具体实现:
均值聚合(最常用)
# 生成均值聚合的句向量 w2v_vect = np.array([ # 对句子中存在的词向量取均值 np.mean([w2v_model.wv[i] for i in ls if i in w2v_model.wv.index_to_key], axis=0) # 处理句子中无有效词向量的情况,生成全0向量 if [i for i in ls if i in w2v_model.wv.index_to_key] else np.zeros(w2v_model.vector_size) for ls in X_test ])
其他聚合方式示例
- 最大池化:把
np.mean替换为np.max - 求和聚合:把
np.mean替换为np.sum
注意事项
- 必须保证每个句子的聚合结果维度一致(和词向量维度相同),否则numpy仍会报错
- 如果不需要固定维度的句向量,仅需保留所有词向量,那么不要转换为numpy数组,直接用列表存储即可,但这种格式通常无法直接输入到后续机器学习模型中
内容的提问来源于stack exchange,提问作者Century Egg
相关产品推荐
相关产品推荐

