Spec-Zone.ru › PyTorch 2.14

Embedding

class torch.nn.modules.sparse.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, метод forward класса Embedding изменяет тензор weight на месте. Поскольку тензоры, необходимые для вычисления градиентов, нельзя изменять на месте, для выполнения дифференцируемой операции над Embedding.weight перед вызовом метода forward класса Embedding необходимо клонировать Embedding.weight, если max_norm не равно None. Например:

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.modules.sparse.Embedding.html

Spec-Zone.ru

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