EmbeddingBag
-
class torch.nn.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.EmbeddingBag.html