Huấn luyện mô hình NMT

Machine Translation với Keras

Thushan Ganegedara

Data Scientist and Author

Ôn lại mô hình

  • GRU mã hóa
    • Nhận từ tiếng Anh
    • Xuất vector ngữ cảnh
  • GRU giải mã
    • Nhận vector ngữ cảnh
    • Xuất một chuỗi đầu ra GRU
  • Lớp Dự đoán của bộ giải mã
    • Nhận chuỗi đầu ra GRU
    • Xuất xác suất dự đoán cho từ tiếng Pháp

Machine Translation với Keras

Tối ưu tham số

  • Lớp GRU và Dense có tham số
  • Thường ký hiệu W (trọng số) và b (độ lệch) (khởi tạo ngẫu nhiên)
  • Chịu trách nhiệm biến đổi đầu vào thành đầu ra hữu ích
  • Được cập nhật để giảm loss bằng một bộ tối ưu
    • Loss: chênh lệch giữa:
      • Dự đoán (ví dụ: từ tiếng Pháp do mô hình sinh)
      • Nhãn thật (ví dụ: từ tiếng Pháp thực tế).
  • Khai báo khi biên dịch mô hình
nmt.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
Machine Translation với Keras

Huấn luyện mô hình

  • Vòng lặp huấn luyện
    for ei in range(n_epochs): # Duyệt một lượt dữ liệu
      for i in range(0,data_size,bsize): # Xử lý một batch
    
  • Lấy một batch train
      en_x = sents2seqs('source', en_text[i:i+bsize], onehot=True, reverse=True)
      de_y = sents2seqs('target', en_text[i:i+bsize], onehot=True)
    
  • Huấn luyện trên một batch
      nmt.train_on_batch(en_x, de_y)
    
  • Đánh giá mô hình
      res = nmt.evaluate(en_x, de_y, batch_size=bsize, verbose=0)
    
Machine Translation với Keras

Huấn luyện mô hình

  • Lấy loss và accuracy khi huấn luyện
      res = nmt.evaluate(en_x, de_y, batch_size=bsize, verbose=0)
      print("Epoch {} => Train Loss:{}, Train Acc: {}".format(
        ei+1,res[0], res[1]*100.0))
    
Epoch 1 => Train Loss:4.8036723136901855, Train Acc: 5.215999856591225
...
Epoch 1 => Train Loss:4.718592643737793, Train Acc: 47.0880001783371
...
Epoch 5 => Train Loss:2.8161656856536865, Train Acc: 56.40000104904175
Epoch 5 => Train Loss:2.527724266052246, Train Acc: 54.368001222610474
Epoch 5 => Train Loss:2.2689621448516846, Train Acc: 54.57599759101868
Epoch 5 => Train Loss:1.9934935569763184, Train Acc: 56.51199817657471
Epoch 5 => Train Loss:1.7581449747085571, Train Acc: 55.184000730514526
Epoch 5 => Train Loss:1.5613118410110474, Train Acc: 55.11999726295471
Machine Translation với Keras

Tránh overfitting

  • Chia dữ liệu thành hai phần
    • Tập huấn luyện – mô hình được huấn luyện trên đó
    • Tập kiểm định – theo dõi độ chính xác của mô hình
  • Khi độ chính xác kiểm định không tăng nữa, dừng huấn luyện.

Điểm overfitting

Machine Translation với Keras

Chia tập dữ liệu

  • Đặt kích thước tập train và tập valid

    train_size, valid_size = 800, 200
    
  • Xáo trộn ngẫu nhiên chỉ số dữ liệu

    inds = np.arange(len(en_text))
    np.random.shuffle(inds)
    
  • Lấy chỉ số train và valid

    train_inds = inds[:train_size]
    valid_inds = inds[train_size:train_size+valid_size]
    
Machine Translation với Keras

Chia tập dữ liệu

  • Tách dữ liệu:
    • Dữ liệu theo chỉ số train vào tập train
    • Dữ liệu theo chỉ số valid vào tập valid
tr_en = [en_text[ti] for ti in train_inds]
tr_fr = [fr_text[ti] for ti in train_inds]

v_en = [en_text[ti] for ti in valid_inds]
v_fr = [fr_text[ti] for ti in valid_inds]
Machine Translation với Keras

Huấn luyện kèm kiểm định

n_epochs, bsize = 5, 250
for ei in range(n_epochs):

for i in range(0,train_size,bsize): en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=True, pad_type='pre') de_y = sents2seqs('target', tr_fr[i:i+bsize], onehot=True) nmt.train_on_batch(en_x, de_y)
v_en_x = sents2seqs('source', v_en, onehot=True, pad_type='pre') v_de_y = sents2seqs('target', v_fr, onehot=True)
res = nmt.evaluate(v_en_x, v_de_y, batch_size=valid_size, verbose=0) print("Epoch: {} => Loss:{}, Val Acc: {}".format(ei+1,res[0], res[1]*100.0))
Epoch 1 => Train Loss:4.8036723136901855, Train Acc: 5.215999856591225
Machine Translation với Keras

Ayo berlatih!

Machine Translation với Keras

Preparing Video For Download...