Tworzenie modelu transformera
W PyBooks silnik rekomendacji, nad którym pracujesz, potrzebuje bardziej zaawansowanych możliwości analizy sentymentu recenzji użytkowników. Uważasz, że zastosowanie transformerów – nowoczesnej architektury sieci neuronowych – pomoże osiągnąć ten cel. Postanawiasz zbudować model transformera, który zakoduje sentyment zawarty w recenzjach i tym samym zapoczątkuje projekt.
Następujące pakiety zostały już zaimportowane: torch, nn, optim.
Dane wejściowe zawierają zdania takie jak: "I love this product", "This is terrible", "Could be better" …
oraz odpowiadające im binarne etykiety sentymentu, np.: 1, 0, 0, ...
Dane wejściowe zostały podzielone i przekonwertowane na osadzenia (embeddings) w następujących zmiennych:
train_sentences, train_labels, test_sentences, test_labels, token_embeddings
To ćwiczenie jest częścią kursu
Uczenie głębokie dla tekstu z PyTorch
Instrukcje do ćwiczenia
- Zainicjalizuj enkoder transformera.
- Zdefiniuj warstwę w pełni połączoną na podstawie liczby klas sentymentu.
- W metodzie forward przepuść dane wejściowe przez enkoder transformera, a następnie przez warstwę liniową.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
class TransformerEncoder(nn.Module):
def __init__(self, embed_size, heads, num_layers, dropout):
super(TransformerEncoder, self).__init__()
# Initialize the encoder
self.encoder = nn.____(
nn.____(d_model=embed_size, nhead=heads),
num_layers=num_layers)
# Define the fully connected layer
self.fc = nn.Linear(embed_size, ____)
def forward(self, x):
# Pass the input through the transformer encoder
x = self.____(x)
x = x.mean(dim=1)
return self.fc(x)
model = TransformerEncoder(embed_size=512, heads=8, num_layers=3, dropout=0.5)
optimizer = optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()