EmbeddingBag
-
class torch.nn.modules.sparse.EmbeddingBag(num_embeddings, embedding_dim, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, _weight=None, include_last_offset=False, padding_idx=None, device=None, dtype=None)[источник] -
Вычисляет суммы или средние значения для «пакетов» эмбеддингов, не создавая промежуточные эмбеддинги.
Для пакетов постоянной длины, без
per_sample_weights, без индексов, равныхpadding_idx, и при двумерных входных данных этот класс- с
mode="sum"эквивалентенEmbedding, за которым следуетtorch.sum(dim=1), - с
mode="mean"эквивалентенEmbedding, за которым следуетtorch.mean(dim=1), - с
mode="max"эквивалентенEmbedding, за которым следуетtorch.max(dim=1).
Однако
EmbeddingBagзначительно эффективнее по времени и памяти, чем цепочка этих операций.EmbeddingBag также поддерживает передачу весов для каждого образца в качестве аргумента прямого прохода. Это масштабирует выходные данные Embedding перед выполнением взвешенного сокращения, заданного параметром
mode. Если переданper_sample_weights, поддерживается толькоmode—"sum", который вычисляет взвешенную сумму согласноper_sample_weights.- Параметры:
-
- num_embeddings (int) – размер словаря эмбеддингов
- embedding_dim (int) – размерность каждого вектора эмбеддинга
-
max_norm (float, необязательно) – если задан, каждый вектор эмбеддинга с нормой больше
max_normперенормируется так, чтобы его норма стала равнаmax_norm. -
norm_type (float, необязательно) – p в p-норме, вычисляемой для параметра
max_norm. Значение по умолчанию —2. -
scale_grad_by_freq (bool, необязательно) – если задан, градиенты будут масштабироваться на величину, обратную частоте слов в мини-пакете. Значение по умолчанию —
False. Примечание: этот параметр не поддерживается, еслиmode="max". -
mode (str, необязательно) –
"sum","mean"или"max". Определяет способ сокращения пакета."sum"вычисляет взвешенную сумму с учетомper_sample_weights."mean"вычисляет среднее значение элементов пакета, а"max"— максимальное значение для каждого пакета. Значение по умолчанию:"mean" -
sparse (bool, необязательно) – если
True, градиент по отношению к матрицеweightбудет разреженным тензором. Дополнительные сведения о разреженных градиентах см. в разделе «Примечания». Примечание: этот параметр не поддерживается, еслиmode="max". -
include_last_offset (bool, необязательно) – если
True, размер offsets равен количеству пакетов + 1. Последний элемент — это размер входных данных или конечная позиция последнего пакета (последовательности). Это соответствует формату CSR. Игнорируется, если входные данные двумерные. Значение по умолчанию —False. -
padding_idx (int, необязательно) – если задан, элементы с индексом
padding_idxне влияют на градиент; поэтому вектор эмбеддинга с индексомpadding_idxне обновляется во время обучения, то есть остается фиксированным вектором заполнения. Для вновь созданного EmbeddingBag вектор эмбеддинга с индексомpadding_idxпо умолчанию состоит из нулей, но его можно заменить другим значением, используемым в качестве вектора заполнения. Обратите внимание, что вектор эмбеддинга с индексомpadding_idxисключается из операции сокращения.
- Переменные:
-
weight (Tensor) – обучаемые веса модуля формы
(num_embeddings, embedding_dim), инициализированные из .
Примеры:
>>> # an EmbeddingBag module containing 10 tensors of size 3 >>> embedding_sum = nn.EmbeddingBag(10, 3, mode='sum') >>> # a batch of 2 samples of 4 indices each >>> input = torch.tensor([1, 2, 4, 5, 4, 3, 2, 9], dtype=torch.long) >>> offsets = torch.tensor([0, 4], dtype=torch.long) >>> embedding_sum(input, offsets) tensor([[-0.8861, -5.4350, -0.0523], [ 1.1306, -2.5798, -1.0044]]) >>> # Example with padding_idx >>> embedding_sum = nn.EmbeddingBag(10, 3, mode='sum', padding_idx=2) >>> input = torch.tensor([2, 2, 2, 2, 4, 3, 2, 9], dtype=torch.long) >>> offsets = torch.tensor([0, 4], dtype=torch.long) >>> embedding_sum(input, offsets) tensor([[ 0.0000, 0.0000, 0.0000], [-0.7082, 3.2145, -2.6251]]) >>> # An EmbeddingBag can be loaded from an Embedding like so >>> embedding = nn.Embedding(10, 3, padding_idx=2) >>> embedding_sum = nn.EmbeddingBag.from_pretrained( embedding.weight, padding_idx=embedding.padding_idx, mode='sum')-
forward(input, offsets=None, per_sample_weights=None)[источник] -
Прямой проход EmbeddingBag.
- Параметры:
-
- input (Tensor) – тензор, содержащий пакеты индексов матрицы эмбеддингов.
-
offsets (Tensor, необязательно) – используется только, если
inputодномерный.offsetsзадает начальную позицию каждого пакета (последовательности) вinput. -
per_sample_weights (Tensor, необязательно) – тензор весов типа float/double либо None, указывающий, что все веса следует считать равными
1. Если задан,per_sample_weightsдолжен иметь ту же форму, что и input, и рассматривается как имеющий те жеoffsets, если они не являютсяNone. Поддерживается только дляmode='sum'.
- Возвращает:
-
Выходной тензор формы
(B, embedding_dim). - Тип возвращаемого значения:
Примечание
Несколько замечаний о
inputиoffsets:-
inputиoffsetsдолжны иметь одинаковый тип: int или long - Если
input— двумерный тензор формы(B, N), он рассматривается какBпакетов (последовательностей) фиксированной длиныN, и возвращаетBзначений, агрегированных способом, зависящим отmode. В этом случаеoffsetsигнорируется и должен быть равенNone. - Если
input— одномерный тензор формы(N), он рассматривается как конкатенация нескольких пакетов (последовательностей).offsetsдолжен быть одномерным тензором, содержащим начальные позиции каждого пакета вinput. Поэтому дляoffsetsформы(B)тензорinputбудет рассматриваться как содержащийBпакетов. Для пустых пакетов (то есть имеющих нулевую длину) возвращаются векторы, заполненные нулями.
-
classmethod from_pretrained(embeddings, freeze=True, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, include_last_offset=False, padding_idx=None)[источник] -
Создает экземпляр EmbeddingBag из заданного двумерного FloatTensor.
- Параметры:
-
- embeddings (Tensor) – FloatTensor, содержащий веса EmbeddingBag. Первое измерение передается в EmbeddingBag как «num_embeddings», второе — как «embedding_dim».
-
freeze (bool, необязательно) – если
True, тензор не обновляется в процессе обучения. Эквивалентноembeddingbag.weight.requires_grad = False. Значение по умолчанию:True -
max_norm (float, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию:
None -
norm_type (float, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию —
2. -
scale_grad_by_freq (bool, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию —
False. -
mode (str, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию:
"mean" -
sparse (bool, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию:
False. -
include_last_offset (bool, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию:
False. -
padding_idx (int, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию:
None.
- Тип возвращаемого значения:
Примеры:
>>> # FloatTensor containing pretrained weights >>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]]) >>> embeddingbag = nn.EmbeddingBag.from_pretrained(weight) >>> # Get embeddings for index 1 >>> input = torch.LongTensor([[1, 0]]) >>> embeddingbag(input) tensor([[ 2.5000, 3.7000, 4.6500]])
- с
© 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.EmbeddingBag.html