ÎncepețiÎncepe gratuit

Crearea unui model RNN cu atenție

La PyBooks, echipa explorează diverse arhitecturi de învățare profundă. După o serie de cercetări, decizi să implementezi un RNN cu mecanism de atenție (Attention) pentru a prezice următorul cuvânt dintr-o propoziție. Ai la dispoziție un set de date cu propoziții și un vocabular creat din acestea.

Următoarele pachete au fost importate pentru tine: torch, nn.

Următoarele elemente au fost preîncărcate:

  • vocab și vocab_size: setul de vocabular și dimensiunea sa
  • word_to_ix și ix_to_word: dicționare pentru maparea cuvânt-index și index-cuvânt
  • input_data și target_data: setul de date convertit în perechi intrare-ieșire
  • embedding_dim și hidden_dim: dimensiunile pentru încorporare (embedding) și starea ascunsă a RNN

Poți inspecta variabila data în consolă pentru a vedea propozițiile exemplu.

Acest exercițiu face parte din cursul

Deep Learning pentru text cu PyTorch

Vezi cursul

Instrucțiuni pentru exercițiu

  • Creează un strat de încorporare (embedding) pentru vocabular, folosind embedding_dim-ul dat.
  • Aplică o transformare liniară asupra ieșirii secvențiale a RNN pentru a obține scorurile de atenție.
  • Calculează ponderile de atenție pe baza scorurilor.
  • Calculează vectorul de context ca suma ponderată a ieșirilor RNN și a ponderilor de atenție.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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")
Editează și rulează codul