Загрузите квантованную модель fasttext (.ftz) и найдите слова

#python #gensim #word-embedding #fasttext

#python #gensim #встраивание слов #fasttext

Вопрос:

У меня есть предварительно подготовленный файл вложений, который был квантован в формате .ftz. Мне это нужно для поиска слов, поиска ближайших соседей. Но я не могу найти какие-либо инструменты, которые могут это сделать. FastText может загружать файл вложений, но не может найти ближайшего соседа, Gensim может искать ближайшего соседа, но не может загрузить модель…

Или я не нахожу правильную функцию?

Спасибо!

Комментарии:

1. Если я правильно понимаю, FastText от Facebook предлагает оптимизацию «квантования» только для моделей своего supervised режима, и Gensim в настоящее время не поддерживает работу с такими моделями. Итак: по крайней мере, в отношении Gensim вы просто сталкиваетесь с известным ограничением. (Gensim потенциально может легче поддерживать загрузку моделей word-vectors из supervised mode, чем поддержку контролируемого обучения… поэтому, если вы сообщаете о возникших ошибках, возможно, можно предложить обходной путь или способ экспорта векторов слов в формате, таком как обычный текстовый формат, который мог бы прочитать Gensim.)

2. @gojomo: вероятно, это должен быть ответ,

Ответ №1:

Модели FastText бывают двух видов:

  • неконтролируемые модели, которые создают вложения слов и могут находить похожие слова. Собственный пакет Facebook не поддерживает квантование для них.
  • контролируемые модели, которые используются для классификации текста и могут быть квантованы изначально, но обычно не создают значимых вложений слов.

Для сжатия неконтролируемых моделей я создал пакет compress-fasttext, который представляет собой оболочку вокруг Gensim, которая может уменьшить размер неконтролируемых моделей путем обрезки и квантования. Этот пост описывает это более подробно.

С помощью этого пакета вы можете искать похожие слова в небольших моделях следующим образом:

 import compress_fasttext
small_model = compress_fasttext.models.CompressedFastTextKeyedVectors.load(
    'https://github.com/avidale/compress-fasttext/releases/download/v0.0.4/cc.en.300.compressed.bin'
)
print(small_model.most_similar('Python'))
# [('PHP', 0.5253), ('.NET', 0.5027), ('Java', 0.4897),  ... ]
  

Конечно, это работает, только если модель была сжата с использованием того же пакета. Таким образом, вы можете сжать свою собственную неконтролируемую модель:

 import compress_fasttext
from gensim.models.fasttext import load_facebook_model
big_model = load_facebook_model('path-to-original-model').wv
small_model = compress_fasttext.prune_ft_freq(big_model, pq=True)
small_model.save('path-to-new-model')