Začněte nyníZačněte zdarma

Vytvoření RNN modelu s mechanismem pozornosti

Tým v PyBooks prozkoumává různé architektury deep learningu. Po důkladném výzkumu se rozhodneš implementovat RNN s mechanismem pozornosti (Attention) pro predikci dalšího slova ve větě. K dispozici máš dataset s větami a slovníkem vytvořeným z nich.

Následující balíčky jsou již naimportované: torch, nn.

Následující proměnné jsou předpřipraveny:

  • vocab a vocab_size: sada slovníku a jeho velikost
  • word_to_ix a ix_to_word: slovníky pro mapování slov na indexy a indexů na slova
  • input_data a target_data: dataset převedený na dvojice vstup–výstup
  • embedding_dim a hidden_dim: rozměry pro embedding a skrytý stav RNN

V konzoli si můžeš prohlédnout proměnnou data s ukázkovými větami.

Toto cvičení je součástí kurzu

Deep Learning for Text with PyTorch

Zobrazit kurz

Pokyny k cvičení

  • Vytvoř vrstvu embeddingů pro slovník s daným rozměrem embedding_dim.
  • Aplikuj lineární transformaci na sekvenční výstup RNN, abys získal/a skóre pozornosti.
  • Ze skóre pozornosti získej váhy pozornosti.
  • Vypočítej kontextový vektor jako vážený součet výstupů RNN a vah pozornosti.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

class RNNWithAttentionModel(nn.Module):
    def __init__(self):
        super(RNNWithAttentionModel, self).__init__()
        # Create an embedding layer for the vocabulary
        self.embeddings = nn.____(vocab_size, embedding_dim)
        self.rnn = nn.RNN(embedding_dim, hidden_dim, batch_first=True)
        # Apply a linear transformation to get the attention scores
        self.attention = nn.____(____, 1)
        self.fc = nn.____(hidden_dim, vocab_size)
    def forward(self, x):
        x = self.embeddings(x)
        out, _ = self.rnn(x)
        #  Get the attention weights
        attn_weights = torch.nn.functional.____(self.____(out).____(2), dim=1)
        # Compute the context vector 
        context = torch.sum(____.____(2) * out, dim=1)
        out = self.fc(context)
        return out
      
attention_model = RNNWithAttentionModel()
optimizer = torch.optim.Adam(attention_model.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()
print("Model Instantiated")
Upravit a spustit kód