我正在尝试使用pytorch中的手套嵌入来在模型中使用。我有以下代码:
from torchtext.vocab import GloVe
import torch.nn
glove= GloVe()
my_embeddings = torch.nn.Embedding.from_pretrained(glove.vectors,freeze=True)
但是,我不明白如何从这个函数中获取特定单词的嵌入。my_embeddings
只接受pytorch索引而不是文本用途:
from torchtext.data import get_tokenizer
tokenizer = get_tokenizer("basic_english")
glove.get_vecs_by_tokens(tokenizer("Hello, How are you?"))
但随后我感到困惑,为什么我需要使用torch.nn.Embedding
在所有大多数教程建议我这样做?
2条答案
按热度按时间mwg9r5ms1#
我相信这是用
glove.stoi
完成的:hfwmuf9z2#
问得好!
以下是您可能希望手套向量位于
nn.Embedding
层中的一些原因:1.您需要微调手套提供的预先训练的嵌入权重;
1.您希望传递要嵌入到模型中的可训练索引批;
正如前面提到的,可以通过
glove.stoi[word_str]
传入单词串(标记)列表。但是您设置了
freeze=True
,所以,如果您不打算重新训练嵌入层,那么您最好使用: