Dịch máy dùng mạng nơ-ron

Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

David Cecchini

Data Scientist

Encoder và decoder

Kiến trúc Dịch máy dùng mạng nơ-ron. Gồm bộ mã hóa (encoder) cho ngôn ngữ đầu vào và bộ giải mã (decoder) cho ngôn ngữ đầu ra. Encoder học mô hình ngôn ngữ cho đầu vào, decoder học mô hình cho đầu ra. Trạng thái cuối của encoder được truyền sang decoder, decoder không có đầu vào khác.

Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Ví dụ encoder

# Khởi tạo mô hình
model = Sequential()

# Lớp Embedding cho ngôn ngữ đầu vào model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Thêm lớp LSTM model.add(LSTM(128))
# Lặp lại vector cuối model.add(RepeatVector(output_language_len))
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Ví dụ decoder

# Ngay sau encoder
model.add(LSTM(128, return_sequences=True))

# Thêm TimeDistributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Chuẩn bị dữ liệu

Chuẩn bị văn bản cho encoder/decoder. Với encoder, chuyển ngôn ngữ đầu vào thành chuỗi chỉ số; với decoder, làm tương tự cho ngôn ngữ đầu ra và one-hot hóa từng chỉ số

Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Chuẩn bị dữ liệu cho ngôn ngữ đầu vào

# Nhập mô-đun
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Sử dụng lớp Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# Văn bản thành chuỗi chỉ số X = tokenizer.texts_to_sequences(input_texts_list)
# Đệm chuỗi X = pad_sequences(X, maxlen=length, padding='post')
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Token hóa ngôn ngữ đầu ra

# Sử dụng lớp Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# Văn bản thành chuỗi chỉ số Y = tokenizer.texts_to_sequences(output_texts_list)
# Đệm chuỗi Y = pad_sequences(Y, maxlen=length, padding='post')
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

One-hot hóa ngôn ngữ đầu ra

# Tạo biến tạm
ylist = list()

# Lặp qua chuỗi chỉ số for sequence in Y:
# One-hot cho từng chỉ số trong câu hiện tại encoded = to_categorical(sequence, num_classes=vocab_size)
# Thêm giá trị one-hot vào danh sách ylist.append(encoded)
# Đổi sang np.array và reshape Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Lưu ý về huấn luyện và đánh giá

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

model.fit(X, Y, epochs=N)

Đánh giá:

  • Dùng BLEU
    • nltk.translate.bleu_score
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Ayo berlatih!

Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Preparing Video For Download...