PyTorch torch.nn.EmbeddingBag-Funktion
PyTorch torch.nn Referenzhandbuch
torch.nn.EmbeddingBagEs ist ein Embedding-Bag-Modul in PyTorch.
Es aggregiert mehrere Embedding-Vektoren zu einem einzigen Vektor und wird häufig für Textklassifikation und schnelle Verarbeitung verwendet.
Funktionsdefinition
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)
Parameter:
mode: Aggregationsmethode, optional'mean'、'sum'、'max'
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
import torch
import torch.nn as nn
# Embedding-Bag
ebag = nn.EmbeddingBag(1000, 128, mode='mean')
# Wortindizes
indices = torch.tensor([[1, 2, 3], [4, 5]])
# Offsets (geben die Grenzen jedes Satzes an)
offsets = torch.tensor([0, 3])
output = ebag(indices, offsets)
print("Eingabeform:", indices.shape)
print("Ausgabeform:", output.shape)
import torch.nn as nn
# Embedding-Bag
ebag = nn.EmbeddingBag(1000, 128, mode='mean')
# Wortindizes
indices = torch.tensor([[1, 2, 3], [4, 5]])
# Offsets (geben die Grenzen jedes Satzes an)
offsets = torch.tensor([0, 3])
output = ebag(indices, offsets)
print("Eingabeform:", indices.shape)
print("Ausgabeform:", output.shape)
Beispiel 2: Schnelle Textklassifizierung
Beispiel
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)
# Daten simulieren
text = torch.randint(0, 10000, (100,))
offset = torch.tensor([0, 30, 60, 100])
output = model(text, offset)
print("Ausgabeform:", 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)
# Daten simulieren
text = torch.randint(0, 10000, (100,))
offset = torch.tensor([0, 30, 60, 100])
output = model(text, offset)
print("Ausgabeform:", output.shape)
Beispiel 3: Verschiedene Aggregationsmethoden
Beispiel
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)
Anwendungsfälle
- Textklassifikation: FastText
- Bag-of-Words-Modell: Schnelle Aggregation
- Text in großem Maßstab: Effiziente Verarbeitung
Hinweis: Der Parameter offsets muss angegeben werden, um Satzgrenzen anzugeben.
Weitere Erweiterungen