Вложение в pytorch
Я проверил учебник по PyTorch и вопросы, подобные этому, в Stackoverflow.
Я путаюсь; делает встраивание в pytorch (Embedding) подобными словами ближе друг к другу? И мне просто нужно дать ему все предложения? Или это просто таблица поиска, и мне нужно код модели?
Ответы
Ответ 1
Вы можете рассматривать nn.Embedding
как таблицу поиска, где ключ - это индекс слова, а значение - соответствующий вектор слова. Однако перед его использованием вы должны указать размер таблицы поиска и самостоятельно инициализировать слова-векторы. Ниже приведен пример кода, демонстрирующий это.
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)
Ответ 2
nn.Embedding
содержит тензор размерности (vocab_size, vector_size)
, т.е. размер словаря x размерность каждого векторного вложения и метод, который выполняет поиск.
Когда вы создаете слой внедрения, тензор инициализируется случайным образом. Только когда вы тренируете его, когда должно появляться подобное сходство между похожими словами. Если вы не перезаписали значения встраивания с ранее обученной моделью, например GloVe или Word2Vec, но это другая история.
Таким образом, как только у вас будет определенный слой внедрения, и словарь, определенный и закодированный (т.е. Присвойте уникальный номер каждому слову в словаре), вы можете использовать экземпляр класса nn.Embedding, чтобы получить соответствующее вложение.
Например:
import torch
from torch import nn
embedding = nn.Embedding(1000,128)
embedding(torch.LongTensor([3,4]))
вернет векторы вложения, соответствующие слову 3 и 4 в вашем словаре. Поскольку никакая модель не была обучена, они будут случайными.