Embedding
-
class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, _freeze=False, device=None, dtype=None)[исходный код] -
Простая таблица поиска, в которой хранятся векторы эмбеддингов для словаря фиксированного размера.
Этот модуль часто используется для хранения эмбеддингов слов и их извлечения по индексам. На вход модулю подаётся список индексов, а на выходе возвращаются соответствующие эмбеддинги слов.
- Параметры:
-
- num_embeddings (int) – размер словаря эмбеддингов
- embedding_dim (int) – размерность каждого вектора эмбеддинга
-
padding_idx (int, необязательно) – Если указан, элементы в
padding_idxне участвуют в вычислении градиента; поэтому вектор эмбеддинга вpadding_idxне обновляется во время обучения, то есть остаётся фиксированным вектором «дополнения». Для вновь созданного экземпляра Embedding вектор эмбеддинга вpadding_idxпо умолчанию будет состоять из нулей, но его можно изменить, чтобы использовать другое значение в качестве вектора дополнения. -
max_norm (float, необязательно) – Если задано, каждый вектор эмбеддинга с нормой больше
max_normнормализуется так, чтобы его норма стала равнаmax_norm. -
norm_type (float, необязательно) – Показатель p для вычисляемой p-нормы, используемой с параметром
max_norm. По умолчанию2. -
scale_grad_by_freq (bool, необязательно) – Если задано, градиенты масштабируются обратно пропорционально частоте слов в мини-пакете. По умолчанию
False. -
sparse (bool, необязательно) – Если
True, градиент по матрицеweightбудет разреженным тензором. Дополнительные сведения о разреженных градиентах см. в разделе «Примечания».
- Переменные:
-
weight (Tensor) – обучаемые веса модуля формы (num_embeddings, embedding_dim), инициализированные из
- Форма:
-
- Вход: , IntTensor или LongTensor произвольной формы, содержащий извлекаемые индексы
- Выход: , где
*— форма входных данных, а
Примечание
Имейте в виду, что разреженные градиенты поддерживает лишь ограниченное число оптимизаторов: на данный момент это
optim.SGD(CUDAиCPU),optim.SparseAdam(CUDAиCPU) иoptim.Adagrad(CPU)Примечание
Если
max_normне равноNone, прямой методEmbeddingизменит тензорweightна месте. Поскольку тензоры, необходимые для вычисления градиентов, нельзя изменять на месте, перед вызовом прямого методаEmbeddingнеобходимо клонироватьEmbedding.weight, еслиmax_normне равноNone, прежде чем выполнять надEmbedding.weightдифференцируемую операцию. Например:n, d, m = 3, 5, 7 embedding = nn.Embedding(n, d, max_norm=1.0) W = torch.randn((m, d), requires_grad=True) idx = torch.tensor([1, 2]) a = ( embedding.weight.clone() @ W.t() ) # weight must be cloned for this to be differentiable b = embedding(idx) @ W.t() # modifies weight in-place out = a.unsqueeze(0) + b.unsqueeze(1) loss = out.sigmoid().prod() loss.backward()Примеры:
>>> # an Embedding module containing 10 tensors of size 3 >>> embedding = nn.Embedding(10, 3) >>> # a batch of 2 samples of 4 indices each >>> input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]]) >>> embedding(input) tensor([[[-0.0251, -1.6902, 0.7172], [-0.6431, 0.0748, 0.6969], [ 1.4970, 1.3448, -0.9685], [-0.3677, -2.7265, -0.1685]], [[ 1.4970, 1.3448, -0.9685], [ 0.4362, -0.4004, 0.9400], [-0.6431, 0.0748, 0.6969], [ 0.9124, -2.3616, 1.1151]]]) >>> # example with padding_idx >>> embedding = nn.Embedding(10, 3, padding_idx=0) >>> input = torch.LongTensor([[0, 2, 0, 5]]) >>> embedding(input) tensor([[[ 0.0000, 0.0000, 0.0000], [ 0.1535, -2.0309, 0.9315], [ 0.0000, 0.0000, 0.0000], [-0.1655, 0.9897, 0.0635]]]) >>> # example of changing `pad` vector >>> padding_idx = 0 >>> embedding = nn.Embedding(3, 3, padding_idx=padding_idx) >>> embedding.weight Parameter containing: tensor([[ 0.0000, 0.0000, 0.0000], [-0.7895, -0.7089, -0.0364], [ 0.6778, 0.5803, 0.2678]], requires_grad=True) >>> with torch.no_grad(): ... embedding.weight[padding_idx] = torch.ones(3) >>> embedding.weight Parameter containing: tensor([[ 1.0000, 1.0000, 1.0000], [-0.7895, -0.7089, -0.0364], [ 0.6778, 0.5803, 0.2678]], requires_grad=True)-
classmethod from_pretrained(embeddings, freeze=True, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False)[исходный код] -
Создаёт экземпляр Embedding из заданного двумерного FloatTensor.
- Параметры:
-
-
embeddings (Tensor) – FloatTensor, содержащий веса для Embedding. Первый размер передаётся в Embedding как
num_embeddings, второй — какembedding_dim. -
freeze (bool, необязательно) – Если
True, тензор не обновляется в процессе обучения. Эквивалентноembedding.weight.requires_grad = False. По умолчанию:True -
padding_idx (int, необязательно) – Если указан, элементы в
padding_idxне участвуют в вычислении градиента; поэтому вектор эмбеддинга вpadding_idxне обновляется во время обучения, то есть остаётся фиксированным вектором «дополнения». - max_norm (float, необязательно) – См. документацию по инициализации модуля.
-
norm_type (float, необязательно) – См. документацию по инициализации модуля. По умолчанию
2. -
scale_grad_by_freq (bool, необязательно) – См. документацию по инициализации модуля. По умолчанию
False. - sparse (bool, необязательно) – См. документацию по инициализации модуля.
-
embeddings (Tensor) – FloatTensor, содержащий веса для Embedding. Первый размер передаётся в Embedding как
Примеры:
>>> # FloatTensor containing pretrained weights >>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]]) >>> embedding = nn.Embedding.from_pretrained(weight) >>> # Get embeddings for index 1 >>> input = torch.LongTensor([1]) >>> embedding(input) tensor([[ 4.0000, 5.1000, 6.3000]])
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.Embedding.html