Не удается загрузить модель с помощью gensim FastText - PullRequest
0 голосов
/ 21 февраля 2020

Я столкнулся с проблемой при загрузке модели с помощью 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', но я передаю в него уже разархивированные файлы, так что это также не работает для я.

Буду благодарен за помощь!

1 Ответ

0 голосов
/ 24 февраля 2020

Откуда появились модели? Метод gensim FastText.load() предназначен только для моделей FastText, созданных и сохраненных из gensim (с помощью метода .save()). В таких моделях используется комбинация Python -выборов и одноуровневых .npy файлов необработанных массивов (для хранения больших массивов), которые должны храниться вместе.

Модели, сохраненные из оригинальной реализации FastText в Facebook, имеют другой формат, для которого вы бы использовали служебную функцию 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, который позволяет вызывающей стороне указывать размерность. Вы не можете изменить размерность загруженной модели, так что было бы больше смысла просто читать существующий vector_size из модели, а не указывать его снаружи.)

...