Хранение и загрузка spaCy-документов, содержащих векторы слов - PullRequest
0 голосов
/ 09 июля 2020

У меня есть куча документов, которые я хочу обработать с помощью spaCy. Когда я загружаю модель lg, векторы слов будут генерироваться для каждого обрабатываемого документа. Я хочу сохранить всю эту информацию на диск, чтобы потом восстановить ее. Причина в том, что я выполняю попарное сходство.

Итак, вот что я делаю, чтобы сохранить их

import spacy
nlp = spacy.load('en_core_web_lg')
doc = nlp(my_text)
doc.to_disk(my_file)

И вот что я делаю, чтобы восстановить

import spacy
nlp = spacy.load('en_core_web_lg')
idoc = Doc(Vocab()).from_disk(os.path.join(saved_docs, all_docs[i]))
jdoc = Doc(Vocab()).from_disk(os.path.join(saved_docs, all_docs[j]))
print(idoc.similarity(jdoc))

Это дает:

ModelsWarning: [W007] В используемой вами модели нет загруженных векторов слов, поэтому результат метода Do c .similarity будет основан на теггере , синтаксический анализатор и NER, которые могут не дать полезного суждения о сходстве. Это может произойти, если вы используете одну из небольших моделей, например en_core_web_sm, которые не поставляются с векторами слов и используют только контекстно-зависимые тензоры. Вы всегда можете добавить свои собственные векторы слов или использовать вместо этого одну из более крупных моделей, если они доступны.

как если бы векторы слов не пережили процесс to_disk / from_disk.

Что как правильно сохранить эту информацию?

1 Ответ

0 голосов
/ 09 июля 2020

Я нашел способ, не знаю, самый ли он эффективный. Но, очевидно, функция to_disk() не работала так, как я хотел.

import spacy
nlp = spacy.load('en_core_web_lg')
doc = nlp(my_text)
doc.to_disk(my_doc_file)
doc.vocab.to_disk(my_doc_dir)

И

import spacy
nlp = spacy.load('en_core_web_lg')
idoc = Doc(Vocab()).from_disk(my_doc_i_file)
idoc.vocab.from_disk(my_doc_i_dir)
jdoc = Doc(Vocab()).from_disk(my_doc_j_file)
jdoc.vocab.from_disk(my_doc_j_dir)
print(idoc.similarity(jdoc))

Векторы слов (если они есть) хранятся в отдельном токене объекты, такие как doc [0] .vector, дадут векторы слов для первого токена. Простой вызов to_disk для объекта Do c не заполняет эти векторы слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...