Встраивание в pytorch - PullRequest
       37

Встраивание в pytorch

0 голосов
/ 07 июня 2018

Я проверил учебник по PyTorch и вопросы, подобные этому, в Stackoverflow.

Я запутался;Разве вложение в pytorch ( Embedding ) делает похожие слова ближе друг к другу?И мне просто нужно дать ему все предложения?Или это просто таблица поиска, и мне нужно код модели?

Ответы [ 2 ]

0 голосов
/ 03 августа 2018

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 в вашем словаре.Поскольку ни одна модель не была обучена, они будут случайными.

0 голосов
/ 27 июня 2018

Вы можете рассматривать 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)
...