Función PyTorch torch.nn.EmbeddingBag
Manual de referencia de PyTorch torch.nn
torch.nn.EmbeddingBagEs el módulo de bolsa de embeddings en PyTorch.
Agrega múltiples vectores de embedding en un solo vector, comúnmente utilizado para clasificación de texto y procesamiento rápido.
Definición de la función
torch.nn.EmbeddingBag(num_embeddings, embedding_dim, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, include_last_offset=False)
Parámetros:
mode: método de agregación, opcional'mean'、'sum'、'max'
Ejemplos de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
# Bolsa de embeddings
ebag = nn.EmbeddingBag(1000, 128, mode='mean')
# Índice de palabras
indices = torch.tensor([[1, 2, 3], [4, 5]])
# Desplazamientos (indican los límites de cada oración)
offsets = torch.tensor([0, 3])
output = ebag(indices, offsets)
print(Forma de entrada:, indices.shape)
print(Forma de salida:, output.shape)
import torch.nn as nn
# Bolsa de embeddings
ebag = nn.EmbeddingBag(1000, 128, mode='mean')
# Índice de palabras
indices = torch.tensor([[1, 2, 3], [4, 5]])
# Desplazamientos (indican los límites de cada oración)
offsets = torch.tensor([0, 3])
output = ebag(indices, offsets)
print(Forma de entrada:, indices.shape)
print(Forma de salida:, output.shape)
Ejemplo 2: Clasificación rápida de texto
Ejemplo
import torch
import torch.nn as nn
class FastText(nn.Module):
def __init__(self, vocab_size, embed_dim, num_classes):
super(FastText, self).__init__()
self.embedding = nn.EmbeddingBag(vocab_size, embed_dim, mode='mean')
self.fc = nn.Linear(embed_dim, num_classes)
def forward(self, text, offset):
x = self.embedding(text, offset)
return self.fc(x)
model = FastText(10000, 128, 2)
# Datos simulados
text = torch.randint(0, 10000, (100,))
offset = torch.tensor([0, 30, 60, 100])
output = model(text, offset)
print(Forma de salida:, output.shape)
import torch.nn as nn
class FastText(nn.Module):
def __init__(self, vocab_size, embed_dim, num_classes):
super(FastText, self).__init__()
self.embedding = nn.EmbeddingBag(vocab_size, embed_dim, mode='mean')
self.fc = nn.Linear(embed_dim, num_classes)
def forward(self, text, offset):
x = self.embedding(text, offset)
return self.fc(x)
model = FastText(10000, 128, 2)
# Datos simulados
text = torch.randint(0, 10000, (100,))
offset = torch.tensor([0, 30, 60, 100])
output = model(text, offset)
print(Forma de salida:, output.shape)
Ejemplo 3: Diferentes métodos de agregación
Ejemplo
import torch
import torch.nn as nn
for mode in ['mean', 'sum', 'max']:
ebag = nn.EmbeddingBag(100, 32, mode=mode)
indices = torch.tensor([1, 2, 3, 4])
offsets = torch.tensor([0, 2])
out = ebag(indices, offsets)
print(f"{mode}:", out.shape)
import torch.nn as nn
for mode in ['mean', 'sum', 'max']:
ebag = nn.EmbeddingBag(100, 32, mode=mode)
indices = torch.tensor([1, 2, 3, 4])
offsets = torch.tensor([0, 2])
out = ebag(indices, offsets)
print(f"{mode}:", out.shape)
Casos de uso
- Clasificación de texto: FastText
- Modelo de bolsa de palabras: agregación rápida
- Textos a gran escala: procesamiento eficiente
Nota: se debe proporcionar el parámetro offsets para indicar los límites de las oraciones.
Otras extensiones