Я хотел бы использовать предварительно обученные встраивания в моей архитектуре нейронной сети.Предварительно обученные вложения обучаются Gensim.Я нашел этот информативный ответ , который указывает, что мы можем загрузить предварительно обученные модели, например, так:
import gensim
from torch import nn
model = gensim.models.KeyedVectors.load_word2vec_format('path/to/file')
weights = torch.FloatTensor(model.vectors)
emb = nn.Embedding.from_pretrained(torch.FloatTensor(weights.vectors))
Это, кажется, работает правильно, также на 1.0.1.Мой вопрос в том, что я не совсем понимаю, что я должен подавать в такой слой, чтобы использовать его.Могу ли я просто накормить токены (сегментированное предложение)?Нужно ли мне сопоставление, например токен-индекс?
Я обнаружил, что вы можете получить доступ к вектору токена просто с помощью чего-то вроде
print(weights['the'])
# [-1.1206588e+00 1.1578362e+00 2.8765252e-01 -1.1759659e+00 ... ]
Что это значит для архитектуры RNN?Можем ли мы просто загрузить токены последовательностей пакетов?Например:
for seq_batch, y in batch_loader():
# seq_batch is a batch of sequences (tokenized sentences)
# e.g. [['i', 'like', 'cookies'],['it', 'is', 'raining'],['who', 'are', 'you']]
output, hidden = model(seq_batch, hidden)
Это не похоже на работу, поэтому я предполагаю, что вам нужно преобразовать токены в его индекс в окончательной модели word2vec.Это правда?Я обнаружил, что вы можете получить индексы слов, используя vocab
модели word2vec:
weights.vocab['world'].index
# 147
Так что в качестве входных данных для слоя Embedded я должен предоставить тензор int
для последовательностипредложения, которые состоят из последовательности слов?Пример использования с фиктивным загрузчиком данных (см. Пример выше) и фиктивным приветствием RNN.