我已经创建了一个神经网络来进行情感分析,使用双向GloVe层和预先训练好的嵌入。
在培训期间,我注意到具有冻结嵌入权的nn.Embedding
层使用了GloVe的整个词汇表:
(实例化模型对象的输出) (embedding): Embedding(400000, 50, padding_idx=0)
还介绍了nn.Embedding层的结构:
self.embedding = nn.Embedding.from_pretrained(embedding_matrix, freeze=True, padding_idx=self.padding_idx)
,其中embedding_matrix = glove_vectors.vectors
对象和glove_vectors = torchtext.vocab.GloVe(name='6B', dim=50)
400,000是glove_vectors对象的形状(总共意味着40万个预先训练过的单词).
然后我注意到LSTM神经网络的训练每小时大约需要3到5分钟。这对15万可训练参数来说太长了。我想知道这是否与整个嵌入矩阵的使用有关40万字,或者因为双向LSTM方法,这是正常的。
是否值得从只存在于我句子中的单词中创建GloVe嵌入矩阵的最小化版本,还是使用整个GloVe嵌入矩阵不影响培训性能?
发布于 2023-01-12 01:19:38
由于体系结构的复杂性,长时记忆(LSTM)可能需要很长的时间来训练。
如果你认为嵌入空间的大小也减慢了训练的速度,你可以只使用最频繁出现的单词来减少词汇量。由于您使用的是PyTorch,所以可以在torchtext.vocab.GloVe类中使用max_vectors
参数来实现这一点,该参数限制了加载集的大小。
https://datascience.stackexchange.com/questions/117670
复制相似问题