blu*_*nox 26 python embedding neural-network gensim pytorch
我想将带有gensim的预训练word2vec嵌入到PyTorch嵌入层中.
所以我的问题是,如何将gensim加载的嵌入权重加到PyTorch嵌入层中.
提前致谢!
blu*_*nox 36
我只是想报告关于使用PyTorch加载gensim嵌入的研究结果.
从0.4.0这里有一个新功能v0.4.0,使加载嵌入非常舒适.以下是文档中的示例.
>> # FloatTensor containing pretrained weights
>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
>> embedding = nn.Embedding.from_pretrained(weight)
>> # Get embeddings for index 1
>> input = torch.LongTensor([1])
>> embedding(input)
Run Code Online (Sandbox Code Playgroud)
gensim的权重可以通过以下方式轻松获得:
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('path/to/file')
weights = torch.FloatTensor(model.vectors) # formerly syn0, which is soon deprecated
Run Code Online (Sandbox Code Playgroud)
但是我使用的是版本from_pretrained(),0.3.1在此版本中不可用.
因此我创建了自己的,0.3.1所以我也可以使用它from_pretrained().
from_pretrainedPyTorch版本0.3.1或更低版本的代码:
def from_pretrained(embeddings, freeze=True):
assert embeddings.dim() == 2, \
'Embeddings parameter is expected to be 2-dimensional'
rows, cols = embeddings.shape
embedding = torch.nn.Embedding(num_embeddings=rows, embedding_dim=cols)
embedding.weight = torch.nn.Parameter(embeddings)
embedding.weight.requires_grad = not freeze
return embedding
Run Code Online (Sandbox Code Playgroud)
嵌入可以加载,就像这样:
embedding = from_pretrained(weights)
Run Code Online (Sandbox Code Playgroud)
我希望这对某人有帮助.
| 归档时间: |
|
| 查看次数: |
15072 次 |
| 最近记录: |