Spec-Zone.ru › PyTorch 2.14

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), инициализированные из N(0,1)\mathcal{N}(0, 1)

Форма:
  • Вход: (∗)(*), IntTensor или LongTensor произвольной формы, содержащий извлекаемые индексы
  • Выход: (∗,H)(*, H), где * — форма входных данных, а H=embedding_dimH=\text{embedding\_dim}

Примечание

Имейте в виду, что разреженные градиенты поддерживает лишь ограниченное число оптимизаторов: на данный момент это 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, необязательно) – См. документацию по инициализации модуля.

Примеры:

>>> # 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API