Python 无法加载带有gensim FastText的模型

Python 无法加载带有gensim FastText的模型,python,numpy,gensim,Python,Numpy,Gensim,我在使用gensim.model.FastText.load()加载模型时遇到了麻烦 下面是我得到的一些代码和错误: from gensim.models import FastText class FastTextModel: def __init__(self, model_path, dim=300): self.dim = dim self.model = FastText.load(model_path).wv ... class Gene

我在使用gensim.model.FastText.load()加载模型时遇到了麻烦

下面是我得到的一些代码和错误:

from gensim.models import FastText

class FastTextModel:
    def __init__(self, model_path, dim=300):
        self.dim = dim
        self.model = FastText.load(model_path).wv

...

class GeneralModel:
    def __init__(self, config):
        if config["type"] == "fasttext":
            # path - path to model
            # dim -  dimension, here 300
            self.model = FastTextModel(config["path"], config["dim"])
我从GoogleDrive文件夹下载了一些模型,虽然它可能会以某种方式损坏.npy文件(因为它们很大),所以我分别下载了每个文件(该模型有7个文件),但这对我没有帮助

此外,我还了解到,有时这可能是由于“load”方法中的解压缩错误造成的,但我正在将已解压缩的文件传递给它,因此这对我也不起作用

我会感谢你的帮助

模型起源于何处?gensim
FastText.load()
方法仅适用于从gensim创建和保存的FastText模型(通过其
.save()
方法)。这种模型使用Python pickling和sibling
.npy
原始数组文件(用于存储大型数组)的组合,这些文件必须保存在一起

从Facebook最初的FastText实现中保存的模型是另一种格式,您可以使用
load\u Facebook\u model()
实用程序函数:

如果您只需要向量,就像您直接使用
.wv
属性一样,您也可以使用
load\u facebook\u vectors()
函数:


(另外,不确定为什么您将加载的模型包装在自己的
FastTextModel
类中,该类允许调用者指定维度。您不能更改加载模型的维度,因此只需从模型中读取现有的
vector_size
,而不是在外部指定它就更有意义了。)

非常感谢@gojomo,它提供了大量信息。我已经通过sftp(不是从Google Drive)从服务器上下载了带有.npy文件的模型,这为我解决了这个问题。啊哈,是的,可能最初一些支持文件由于下载中断而丢失或被截断,从而导致原始的
值错误:无法将大小为67239904的数组重塑为形状(4454446300)
。很高兴它现在起作用了!
  File "/project/preprocessing/pipeline.py", line 15, in __init__
    self.model_ru = GeneralModel(config["models"]["ru"])
  File "/project/models/nlp_models.py", line 101, in __init__
    self.model = FastTextModel(config["path"], config["dim"])
  File "/project/models/nlp_models.py", line 16, in __init__
    self.model = FastText.load(model_path).wv
  File "/usr/local/lib64/python3.6/site-packages/gensim/models/fasttext.py", line 936, in load
    model = super(FastText, cls).load(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/gensim/models/base_any2vec.py", line 1244, in load
    model = super(BaseWordEmbeddingsModel, cls).load(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/gensim/models/base_any2vec.py", line 603, in load
    return super(BaseAny2VecModel, cls).load(fname_or_handle, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/gensim/utils.py", line 423, in load
    obj._load_specials(fname, mmap, compress, subname)
  File "/usr/local/lib64/python3.6/site-packages/gensim/utils.py", line 453, in _load_specials
    getattr(self, attrib)._load_specials(cfname, mmap, compress, subname)
  File "/usr/local/lib64/python3.6/site-packages/gensim/utils.py", line 464, in _load_specials
    val = np.load(subname(fname, attrib), mmap_mode=mmap)
  File "/usr/local/lib64/python3.6/site-packages/numpy/lib/npyio.py", line 447, in load
    pickle_kwargs=pickle_kwargs)
  File "/usr/local/lib64/python3.6/site-packages/numpy/lib/format.py", line 738, in read_array
    array.shape = shape
ValueError: cannot reshape array of size 67239904 into shape (445446,300)