无法使用 gensim FastText 加载模型
Cannot load model with gensim FastText
我在使用 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"])
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)
我已经从 Google Drive 文件夹下载了模型,虽然它会以某种方式损坏 .npy 文件(因为它们很大),所以我下载了每个文件(有 7 个文件)型号)分开,但这对我没有帮助。
此外,我读到有时它可能是由于 'load' 方法中的解压缩错误引起的,但我将已经解压缩的文件传递给它,所以这对我也不起作用。
将不胜感激!
模型来自哪里? gensim FastText.load()
方法仅适用于从 gensim 创建和保存的 FastText 模型(通过其 .save()
方法)。此类模型使用 Python-pickling 和 .npy
原始数组文件(用于存储大型数组)的组合,这些文件必须放在一起。
从 Facebook 的原始 FastText 实现中保存的模型是一种不同的格式,您将使用 load_facebook_model()
实用函数:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
如果你只需要向量——就像你立即使用 .wv
属性 的情况一样——你也可以使用 load_facebook_vectors()
函数:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_vectors
(另外,不确定为什么你将加载的模型包装在你自己的 FastTextModel
class 中,它允许调用者指定维度。你不能更改加载的模型的维度模型,因此只从模型中读取现有的 vector_size
比在外部指定它更有意义。)
我在使用 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"])
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)
我已经从 Google Drive 文件夹下载了模型,虽然它会以某种方式损坏 .npy 文件(因为它们很大),所以我下载了每个文件(有 7 个文件)型号)分开,但这对我没有帮助。
此外,我读到有时它可能是由于 'load' 方法中的解压缩错误引起的,但我将已经解压缩的文件传递给它,所以这对我也不起作用。
将不胜感激!
模型来自哪里? gensim FastText.load()
方法仅适用于从 gensim 创建和保存的 FastText 模型(通过其 .save()
方法)。此类模型使用 Python-pickling 和 .npy
原始数组文件(用于存储大型数组)的组合,这些文件必须放在一起。
从 Facebook 的原始 FastText 实现中保存的模型是一种不同的格式,您将使用 load_facebook_model()
实用函数:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
如果你只需要向量——就像你立即使用 .wv
属性 的情况一样——你也可以使用 load_facebook_vectors()
函数:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_vectors
(另外,不确定为什么你将加载的模型包装在你自己的 FastTextModel
class 中,它允许调用者指定维度。你不能更改加载的模型的维度模型,因此只从模型中读取现有的 vector_size
比在外部指定它更有意义。)