Расширение словарного запаса при развертывании - PullRequest
0 голосов
/ 09 октября 2018

При выполнении обучения я инициализирую свою матрицу встраивания, используя предварительно обученные вложения, выбранные для слов в словаре обучающего набора.

import torchtext as tt
contexts = tt.data.Field(lower=True, sequential=True, tokenize=tokenizer, use_vocab=True)
contexts.build_vocab(data, vectors="fasttext.en.300d",
                         vectors_cache=config["vectors_cache"])

В моей модели я передаю contexts.vocab в качестве параметра и инициализирую вложения:

embedding_dim = vocab.vectors.shape[1]
self.embeddings = nn.Embedding(len(vocab), embedding_dim)
self.embeddings.weight.data.copy_(vocab.vectors)
self.embeddings.weight.requires_grad=False

Я тренирую свою модель и во время обучения сохраняю ее «лучшее» состояние с помощью torch.save(model, f).

Затем я хочу протестировать / создать демо для модели в отдельном файле для оценки.Я загружаю модель через torch.load.Как расширить матрицу встраивания, чтобы она содержала тестовую лексику?Я пытался заменить встраиваемую матрицу

# data is TabularDataset with test data
contexts.build_vocab(data, vectors="fasttext.en.300d",
                     vectors_cache=config["vectors_cache"])

model.embeddings = torch.nn.Embedding(len(contexts.vocab), contexts.vocab.vectors.shape[1])
model.embeddings.weight.data.copy_(contexts.vocab.vectors)
model.embeddings.weight.requires_grad = False

Но результаты ужасны (почти с 0 точностью).Модель работала хорошо во время тренировок.Каков «правильный» способ сделать это?

...