Het Transformer-model trainen en testen
Nu het TransformerEncoder-model klaarstaat, is de volgende stap bij PyBooks om het model te trainen op voorbeeldreviews en de prestaties te evalueren. Training op deze voorbeeldreviews helpt PyBooks de sentimenttrends in hun grote verzameling beter te begrijpen. Met een goed presterend model kan PyBooks vervolgens sentimentanalyse automatiseren, zodat lezers waardevolle aanbevelingen en feedback krijgen.
De volgende pakketten zijn al voor je geïmporteerd: torch, nn, optim.
De model-instantie van de klasse TransformerEncoder, token_embeddings en de train_sentences, train_labels, test_sentences, test_labels zijn alvast voor je geladen.
Deze oefening maakt deel uit van de cursus
Deep Learning voor tekst met PyTorch
Oefeninstructies
- Splits in de trainingslus de zinnen in tokens en stapel de embeddings.
- Zet de gradiënten op nul en voer een backward pass uit.
- Deactiveer in de functie
predictde gradiëntberekeningen en haal daarna de sentimentvoorspelling op.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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)}")