FastText词向量映射报错:无法将(300,)形状广播至(16,)形状
解决FastText词向量与嵌入矩阵维度不匹配的ValueError
问题原因
错误提示could not broadcast input array from shape (300,) into shape (16,)直接说明维度不匹配:
- 你加载的僧伽罗语FastText预训练模型
cc.si.300.bin是300维的词向量 - 但你初始化
embeddings_matrix时用的embedding_dim设为了16,导致矩阵每行只能容纳16维数据,无法放入300维的词向量
修复步骤
- 对齐嵌入维度:将
embedding_dim设置为预训练模型的实际维度(300),最好直接通过模型获取,避免手动输入错误 - 移除无效判断:FastText的
get_word_vector()方法永远不会返回None,无需额外判断 - 重新初始化嵌入矩阵
修正后的代码
import fasttext import fasttext.util import numpy as np # 加载僧伽罗语预训练FastText模型 ft = fasttext.load_model("cc.si.300.bin") # 直接从模型获取词向量维度,确保一致性 embedding_dim = ft.get_dimension() # 初始化嵌入矩阵:(词汇表大小+1, 300) embeddings_matrix = np.zeros((vocab_size + 1, embedding_dim)) # 映射词汇到预训练向量 for word, i in word_index.items(): embedding_vector = ft.get_word_vector(word) embeddings_matrix[i] = embedding_vector
额外提示
如果你的LSTM模型确实需要16维的输入嵌入,不要强行把300维向量塞进16维矩阵。可以用PCA、t-SNE等降维方法将300维向量压缩到16维,但这会丢失部分语义信息,优先推荐使用预训练向量的原始300维维度来构建嵌入层。
内容的提问来源于stack exchange,提问作者Rusiru Wijethilake
相关产品推荐
相关产品推荐

