Загрузка векторов слов из класса Gensim в класс SpaCy Vectors - PullRequest
1 голос
/ 01 декабря 2019

Как видно из названия, я хотел бы загрузить пользовательские векторы слов, построенные из gensim в SpaCy Vector class.

Я нашел несколько других вопросов, когда люди успешно загрузили векторы в сам объект nlp, но у меня есть текущий проект, в котором я хотел бы иметь отдельный объект Vectors.

В частности, я использую BioWordVec для генерации векторов слов, которые сериализуют векторы, используя методы из gensim.models.Fastext.

. На конце gensim я:

  • вызов model.wv.save_word2vec_format(output/bin/path, binary=True)
  • сохранение модели -> model.save(path/to/model)

На стороне SpaCy:

  • Я могу использоватьfrom_disk или from_bytes методы для загрузки векторов слов
  • есть также метод from_glove, который ожидает файл vocab.txt и двоичный файл (который у меня уже есть двоичный файл

Ссылка на Векторы Документация

просто для справки, вот мой код для проверки процесса загрузки:

import spacy
from spacy.vectors import Vectors 

vecs = Vectors()
path = '/home/medmison690/pyprojects/BioWordVec/pubmed_mesh_test.bin'
dir_path = '/home/medmison690/Desktop/tuned_vecs'


vecs.from_disk(dir_path)


print(vecs.shape)

Я пробовал различные комбинацииfrom_disk и from_bytes безуспешно. Любая помощь или совет будет принята с благодарностью!

1 Ответ

0 голосов
/ 03 декабря 2019

К сожалению, в документах Spacy четко не указано, какие форматы используются различными функциями чтения, и не реализован импорт, явно основанный на формате, написанном исходным кодом Google word2vec.c.

Кажется, from_disk ожидает чего-то в собственном многофайловом формате Spacy. from_bytes может ожидать сырую версию векторов. Ни один из них не будет полезен для данных, сохраненных из gensim модели FastText.

from_glove может быть совместимым форматом. Вы можете попробовать использовать метод save_word2vec_format() с его необязательным аргументом fvocab (чтобы указать файл vocab.txt со словами), binary=True и имя файла в соответствии с соглашениями Spacy. Например, если у вас есть 300 пространственных векторов:

ft_model.wv.save_word2vec_format('vectors.300.f.bin', fvocab='vocab.txt', binary=True)

Затем посмотрите, работает ли этот каталог для Spacy's from_glove. (Я не уверен, что так и будет.)

В качестве альтернативы, вы можете использовать служебный класс gensim (например, KeyedVectors) для загрузки векторов в память, а затем вручную добавить каждый вектор, один-по-одному, в предварительно выделенный объект Spacy Vectors.

Обратите внимание, что, сохраняя векторы FastText на простой, только для векторов word2vec_format, вы потеряете все, что узнала модель о подсловах (именно это модели с поддержкой FastText используют для синтеза векторов для-словарные слова).

...