Je voulais juste faire part de mes constatations sur le chargement d'un gensim intégration avec des PyTorch.
Solution pour PyTorch 0.4.0
et plus récent:
D' v0.4.0
il y a une nouvelle fonction from_pretrained()
qui rend le chargement d'une incorporation très à l'aise.
Voici un exemple tiré de la documentation.
>> # 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)
Le poids de gensim peut facilement être obtenue par:
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('path/to/file')
weights = torch.FloatTensor(model.vectors) # formerly syn0, which is soon deprecated
Solution pour PyTorch version 0.3.1
et plus:
J'utilise la version 0.3.1
et from_pretrained()
n'est pas disponible dans cette version.
Donc j'ai créé mon propre from_pretrained
donc je peux aussi l'utiliser avec 0.3.1
.
Code pour from_pretrained
pour PyTorch versions 0.3.1
ou plus bas:
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
L'incorporation peut être chargé alors comme cela:
embedding = from_pretrained(weights)
J'espère que cela est utile pour quelqu'un.