使用Gensim加载预训练德语fastText模型遇AssertionError求助
加载Facebook德语fastText模型时出现AssertionError的原因与解决方法
问题场景
尝试加载预训练的德语fastText模型,计划用自有数据集微调,但加载时触发AssertionError。
使用代码
import gensim print("gensim", gensim.__version__) # 输出: gensim 4.3.1 bin_path = "cc.de.300.bin" model = gensim.models.fasttext.load_facebook_model(bin_path)
报错信息
AssertionError: expected (600000000,), got (306814511,)
完整报错栈
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) Input In [3], in <module> ----> 1 model = gensim.models.fasttext.load_facebook_model(bin_path) File /opt/conda/lib/python3.9/site-packages/gensim/models/fasttext.py:728, in load_facebook_model(path, encoding) 666 def load_facebook_model(path, encoding='utf-8'): 667 """Load the model from Facebook's native fasttext `.bin` output file. 668 669 Notes (...) 726 727 """ --> 728 return _load_fasttext_format(path, encoding=encoding, full_model=True) File /opt/conda/lib/python3.9/site-packages/gensim/models/fasttext.py:808, in _load_fasttext_format(model_file, encoding, full_model) 789 """Load the input-hidden weight matrix from Facebook's native fasttext `.bin` output files. 790 791 Parameters (...) 805 806 """ 807 with utils.open(model_file, 'rb') as fin: --> 808 m = gensim.models._fasttext_bin.load(fin, encoding=encoding, full_model=full_model) 810 model = FastText( 811 vector_size=m.dim, 812 window=m.ws, (...) 821 max_n=m.maxn, 822 ) 823 model.corpus_total_words = m.ntokens File /opt/conda/lib/python3.9/site-packages/gensim/models/_fasttext_bin.py:353, in load(fin, encoding, full_model) 351 hidden_output = None 352 else: --> 353 hidden_output = _load_matrix(fin, new_format=new_format) 354 assert fin.read() == b'', 'expected to reach EOF' 356 model.update(vectors_ngrams=vectors_ngrams, hidden_output=hidden_output) File /opt/conda/lib/python3.9/site-packages/gensim/models/_fasttext_bin.py:284, in _load_matrix(fin, new_format) 281 else: 282 matrix = np.fromfile(fin, _FLOAT_DTYPE, count) --> 284 assert matrix.shape == (count,), 'expected (%r,), got %r' % (count, matrix.shape) 285 matrix = matrix.reshape((num_vectors, dim)) 286 return matrix AssertionError: expected (600000000,), got (306814511,)
错误原因
这个错误的核心是模型文件不完整或损坏:
- 报错中的
600000000是预期读取的浮点数数量(对应完整模型的权重矩阵大小),但实际仅读到306814511,说明.bin文件存在数据缺失。 - 该模型的原始文件是压缩包格式,若下载中断、解压过程异常,都会导致生成的.bin文件不完整,Gensim读取时触发断言失败。
正确加载步骤
- 重新获取完整模型文件
- 确认下载的压缩包大小符合官方标准(约4.2GB),若文件损坏则重新下载,建议使用支持断点续传的工具。
- 完整解压压缩包
- 使用可靠的解压工具,比如命令行执行:
gzip -d cc.de.300.bin.gz - 解压完成后检查
.bin文件大小(约12GB),确保没有解压中断。
- 使用可靠的解压工具,比如命令行执行:
- 重新运行加载代码
文件验证完整后,再次执行原加载代码即可。
替代方案(无需微调场景)
如果仅需使用词向量功能,不需要完整模型进行微调,可以改用load_facebook_vectors方法,该方法仅加载词向量部分,文件体积更小,也能避免此类问题:
model = gensim.models.fasttext.load_facebook_vectors(bin_path)
内容的提问来源于stack exchange,提问作者Ginny
相关产品推荐
相关产品推荐

