Оглавление
1 — Использование nn.Embedding()
1 — Использование nn.Embedding()
import torch.nn as nn
embedding = nn.Embedding(num_embeddings = 10, embedding_dim = 256)
nn.Embedding() генерирует весовую матрицу веса формы (num_embeddings, embedding_dim), что означает генерацию векторов внедрения num_embeddings с размером embedding_dim;
Форма входных данных: (batch_size, Seq_len), пакет_size указывает количество выборок (количество предложений NLP), а Seq_len указывает длину последовательности (количество слов в каждом предложении);
Выходные данные nn.Embedding(input) имеют размер формы (batch_size, Seq_len, embedding_dim);
2 -- Индикация экземпляра:
① Код:
import torch
import torch.nn as nn
if __name__ == "__main__":
input = torch.randint(low = 0, high = 5, size = (2, 9))
input = torch.LongTensor(input)
embedding = nn.Embedding(num_embeddings=6, embedding_dim = 3)
output = embedding(input)
print("input.shape:", input.shape) # (2, 9) 2个句子,9个单词
print("embedding.shape:", embedding.weight.shape) # (6, 3)
print("output.shape", output.shape) # (2, 9, 3) 2个句子,9个单词,每个单词用一个3维的向量表示
print("input:", input)
print("embedding:", embedding.weight)
print("output:", output)
print("All Done !")
② Анализ:
Функция вывода = embedding(input) предназначена для представления каждого слова вектором размера embedding_dim, поэтому для входных данных (batch_size, Seq_len) выходные данные имеют размер тензора (batch_size, Seq_len, embedding_dim).
При выборе вектора размера embedding_dim для представления он выбирается в соответствии с данными каждого слова; например, на рисунке ниже представления данных двух слов в первом предложении равны 3 (обозначены красным прямоугольником). , и все соответствующие индексы равны. Если он равен 4, для представления должен быть выбран вектор внедрения, индекс которого равен 4 (обозначен зеленым полем , поэтому векторы внедрения двух слов в окончательном выводе являются то же самое (обозначено желтым прямоугольником ).
3 — Проблемы с вниманием
① Входные данные nn.Embedding() должны быть тензором типа LongTensor ;
② Во входных данных размер данных (крайняя разница) не может превышать размер num_embeddings при инициализации nn.Embedding(), то есть индекс, соответствующий данным, не может быть больше, чем num_embeddings;