web-dev-qa-db-fra.com

Enrobage dans du pytorch

J'ai consulté le didacticiel PyTorch et des questions similaires à celui-ci sur Stackoverflow.

Je suis confus; est-ce que l’intégration dans pytorch ( Embedding ) rend les mots similaires plus proches les uns des autres? Et dois-je juste lui donner toutes les phrases? Ou est-ce juste une table de recherche et j'ai besoin de coder le modèle?

16
user1927468

Vous pourriez traiter nn.Embedding comme une table de correspondance où la clé est l’index Word et la valeur le vecteur Word correspondant. Cependant, avant de l'utiliser, vous devez spécifier la taille de la table de recherche et initialiser vous-même les vecteurs Word. Voici un exemple de code illustrant ceci.

import torch.nn as nn 

# vocab_size is the number of words in your train, val and test set
# vector_size is the dimension of the Word vectors you are using
embed = nn.Embedding(vocab_size, vector_size)

# intialize the Word vectors, pretrained_weights is a 
# numpy array of size (vocab_size, vector_size) and 
# pretrained_weights[i] retrieves the Word vector of
# i-th Word in the vocabulary
embed.weight.data.copy_(torch.fromnumpy(pretrained_weights))

# Then turn the Word index into actual Word vector
vocab = {"some": 0, "words": 1}
Word_indexes = [vocab[w] for w in ["some", "words"]] 
Word_vectors = embed(Word_indexes)
20
AveryLiu

nn.Embedding détient un tenseur de dimension (vocab_size, vector_size), c’est-à-dire de la taille du vocabulaire x la dimension de chaque vecteur incorporé, et d’une méthode de recherche.

Lorsque vous créez un calque d’intégration, le Tenseur est initialisé de manière aléatoire. Ce n'est que lorsque vous vous y entraînez que cette similitude entre des mots similaires doit apparaître. Sauf si vous avez écrasé les valeurs de l'intégration avec un modèle déjà formé, tel que GloVe ou Word2Vec, c'est une autre histoire.

Ainsi, une fois que vous avez défini la couche d’incorporation, ainsi que le vocabulaire défini et codé (c’est-à-dire, attribuez un numéro unique à chaque mot du vocabulaire), vous pouvez utiliser l’instance de la classe nn.Embedding pour obtenir l’incorporation correspondante.

Par exemple:

import torch
from torch import nn
embedding = nn.Embedding(1000,128)
embedding(torch.LongTensor([3,4]))

renverra les vecteurs d’incorporation correspondant aux mots 3 et 4 dans votre vocabulaire. Comme aucun modèle n'a été formé, ils seront aléatoires.

15
Escachator