IniziaInizia gratis

Addestrare e testare il modello Transformer

Con il modello TransformerEncoder pronto, il prossimo passo in PyBooks è addestrarlo su recensioni di esempio e valutarne le prestazioni. L’addestramento su queste recensioni aiuterà PyBooks a cogliere le tendenze di sentiment nel loro vasto archivio. Con un modello ben performante, PyBooks potrà poi automatizzare l’analisi del sentiment, offrendo ai lettori raccomandazioni e feedback più mirati.

I seguenti pacchetti sono già stati importati per te: torch, nn, optim.

Le istanze model della classe TransformerEncoder, token_embeddings, e gli insiemi di dati train_sentences, train_labels, test_sentences, test_labels sono pre-caricati per te.

Questo esercizio fa parte del corso

Deep Learning per il testo con PyTorch

Visualizza il corso

Istruzioni dell'esercizio

  • Nel ciclo di training, suddividi le frasi in token e impila le embedding.
  • Azzera i gradienti ed esegui il backward pass.
  • Nella funzione predict, disattiva i calcoli del gradiente e poi ottieni la previsione del sentiment.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

for epoch in range(5):  
    for sentence, label in zip(train_sentences, train_labels):
        # Split the sentences into tokens and stack the embeddings
        tokens = ____
        data = torch.____([token_embeddings[token] for token in ____], dim=1)
        output = model(data)
        loss = criterion(output, torch.tensor([label]))
        # Zero the gradients and perform a backward pass
        optimizer.____()
        loss.____()
        optimizer.step()
        print(f"Epoch {epoch}, Loss: {loss.item()}")

def predict(sentence):
    model.eval()
    # Deactivate the gradient computations and get the sentiment prediction.
    with torch.____():
        tokens = sentence.split()
        data = torch.stack([token_embeddings.get(token, torch.rand((1, 512))) for token in tokens], dim=1)
        output = model(data)
        predicted = torch.____(output, dim=1)
        return "Positive" if predicted.item() == 1 else "Negative"

sample_sentence = "This product can be better"
print(f"'{sample_sentence}' is {predict(sample_sentence)}")
Modifica ed esegui il codice