Bắt đầu ngayBắt đầu miễn phí

Tạo mô hình RNN có attention

Tại PyBooks, nhóm đang khám phá nhiều kiến trúc deep learning khác nhau. Sau khi nghiên cứu, bạn quyết định triển khai một RNN với cơ chế Attention để dự đoán từ tiếp theo trong câu. Bạn được cung cấp một bộ dữ liệu gồm các câu và một vocabulary được tạo từ đó.

Các gói sau đã được import sẵn: torch, nn.

Các biến sau đã được nạp sẵn:

  • vocabvocab_size: tập từ vựng và kích thước của nó
  • word_to_ixix_to_word: từ điển ánh xạ từ → chỉ số và chỉ số → từ
  • input_datatarget_data: dữ liệu đã chuyển đổi thành các cặp đầu vào–đầu ra
  • embedding_dimhidden_dim: kích thước cho embedding và trạng thái ẩn của RNN

Bạn có thể kiểm tra biến data trong bảng điều khiển để xem các câu ví dụ.

Bài tập này là một phần của khóa học

Deep Learning cho Văn bản với PyTorch

Xem khóa học

Hướng dẫn bài tập

  • Tạo một tầng embedding cho vocabulary với embedding_dim đã cho.
  • Áp dụng phép biến đổi tuyến tính lên đầu ra chuỗi của RNN để lấy attention score.
  • Lấy attention weight từ các score này.
  • Tính context vector như tổng có trọng số của các đầu ra RNN và các attention weight.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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")
Chỉnh sửa và Chạy Mã