webentwicklung-frage-antwort-db.com.de

Einbettung in Pytorch

Ich habe das PyTorch-Tutorial und ähnliche Fragen zu Stackoverflow geprüft.

Ich bin verwirrt; rückt die Einbettung in pytorch ( Embedding ) die ähnlichen Wörter näher zusammen? Und muss ich ihm nur alle Sätze geben? Oder ist es nur eine Nachschlagetabelle und ich muss das Modell codieren?

16
user1927468

Sie könnten nn.Embedding Als Nachschlagetabelle behandeln, in der der Schlüssel der Wortindex und der Wert der entsprechende Wortvektor ist. Vor der Verwendung sollten Sie jedoch die Größe der Nachschlagetabelle angeben und die Word-Vektoren selbst initialisieren. Es folgt ein Codebeispiel, das dies demonstriert.

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 Enthält einen Tensor der Dimension (vocab_size, vector_size), D. H. Der Größe des Vokabulars x der Dimension jeder Vektoreinbettung, und eine Methode, die die Suche durchführt.

Wenn Sie eine Einbettungsebene erstellen, wird der Tensor zufällig initialisiert. Es ist nur, wenn Sie es trainieren, wenn diese Ähnlichkeit zwischen ähnlichen Wörtern auftreten sollte. Es sei denn, Sie haben die Werte der Einbettung mit einem zuvor trainierten Modell wie GloVe oder Word2Vec überschrieben, aber das ist eine andere Geschichte.

Sobald Sie die Einbettungsebene definiert und das Vokabular definiert und codiert haben (d. H. Jedem Wort im Vokabular eine eindeutige Nummer zuweisen), können Sie die Instanz der Klasse nn.Embedding verwenden, um die entsprechende Einbettung zu erhalten.

Beispielsweise:

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

gibt die Einbettungsvektoren zurück, die dem Wort 3 und 4 in Ihrem Wortschatz entsprechen. Da noch kein Modell trainiert wurde, werden sie zufällig ausgewählt.

15
Escachator