1

在进行训练时,我使用为训练集词汇中的单词挑选的预训练嵌入来初始化我的嵌入矩阵。

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 准确度)。模型在训练期间表现良好。这样做的“正确方法”是什么?

4

0 回答 0