Zacznij terazZacznij za darmo

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

Zobacz kurs

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()
Edytuj i uruchom kod