9.6. Kiến trúc Mã hoá - Giải mã¶
Kiến trúc mã hoá - giải mã (encoder-decoder architecture) là một khuôn mẫu thiết kế mạng nơ-ron. Kiến trúc này có 2 phần: bộ mã hoá và bộ giải mã, có thể thấy trong Fig. 9.6.1 Bộ mã hoá đóng vai trò mã hoá đầu vào thành trạng thái chứa vài tensor. Tiếp đó, trạng thái được truyền vào bộ giải mã để sinh đầu ra. Trong dịch máy, bộ mã hoá biến đổi một câu nguồn, ví dụ như “Hello world.”, thành trạng thái, chẳng hạn là một vector chứa thông tin ngữ nghĩa của câu đó. Sau đó bộ giải mã sử dụng trạng thái này để dịch câu sang ngôn ngữ đích, ví dụ sang tiếng Pháp “Bonjour le monde.”.
Fig. 9.6.1 Kiến trúc mã hoá - giải mã¶
Phần này trình bày một giao diện (interface) để lập trình kiến trúc mã hoá - giải mã.
9.6.1. Bộ mã hoá¶
Bộ mã hoá là một mạng nơ-ron thông thường, nhận đầu vào, ví dụ như một câu nguồn, và trả về đầu ra.
from mxnet.gluon import nn
# Saved in the d2l package for later use
class Encoder(nn.Block):
"""The base encoder interface for the encoder-decoder architecture."""
def __init__(self, **kwargs):
super(Encoder, self).__init__(**kwargs)
def forward(self, X, *args):
raise NotImplementedError
9.6.2. Bộ giải mã¶
Bộ giải mã có thêm phương thức init_state
nhằm phân tích đầu ra của
bộ mã hoá với những thông tin bổ sung (nếu có), như độ dài hợp lệ của
đầu vào, để đưa ra trạng thái cần thiết. Trong lan truyền xuôi, bộ giải
mã nhận hai đầu vào, ví dụ như một câu đích và trạng thái. Nó trả về đầu
ra với trạng thái nhiều khả năng đã thay đổi nếu bộ mã hoá chứa các tầng
RNN.
# Saved in the d2l package for later use
class Decoder(nn.Block):
"""The base decoder interface for the encoder-decoder architecture."""
def __init__(self, **kwargs):
super(Decoder, self).__init__(**kwargs)
def init_state(self, enc_outputs, *args):
raise NotImplementedError
def forward(self, X, state):
raise NotImplementedError
9.6.3. Mô hình¶
Mô hình mã hoá - giải mã bao gồm một bộ mã hoá và một bộ giải mã. Chúng ta lập trình phương thức truyền xuôi cho quá trình huấn luyện. Phương thức này nhận cả đầu vào bộ mã hoá và đầu vào bộ giải mã cùng các đối số bổ sung không bắt buộc. Mô hình tính đầu ra của bộ mã hoá để khởi tạo trạng thái bộ giải mã, sau đó trả về đầu ra của bộ giải mã.
# Saved in the d2l package for later use
class EncoderDecoder(nn.Block):
"""The base class for the encoder-decoder architecture."""
def __init__(self, encoder, decoder, **kwargs):
super(EncoderDecoder, self).__init__(**kwargs)
self.encoder = encoder
self.decoder = decoder
def forward(self, enc_X, dec_X, *args):
enc_outputs = self.encoder(enc_X, *args)
dec_state = self.decoder.init_state(enc_outputs, *args)
return self.decoder(dec_X, dec_state)
9.6.4. Tóm tắt¶
- Kiến trúc mã hoá - giải mã là một khuôn mẫu thiết kế mạng nơ-ron chủ yếu được sử dụng trong xử lý ngôn ngữ tự nhiên.
- Bộ mã hoá là một mạng (kết nối đầy đủ - FC, nơ-ron tích chập - CNN, nơ-ron hồi tiếp - RNN, …) nhận đầu vào và trả về một ánh xạ đặc trưng là một vector hay một tensor.
- Bộ giải mã là một mạng (thường giống kiến trúc mạng của bộ mã hoá) nhận vector đặc trưng từ bộ mã hoá và đưa ra kết quả gần khớp nhất với đầu vào thực tế hoặc đầu ra mong muốn.
9.6.5. Bài tập¶
- Ngoài dịch máy, bạn còn biết thêm những ứng dụng nào khác của kiến trúc mã hoá - giải mã không?
- Bạn có thể thiết kế một kiến trúc mã hoá - giải mã sâu không?
9.6.6. Thảo luận¶
9.6.7. Những người thực hiện¶
Bản dịch trong trang này được thực hiện bởi:
- Đoàn Võ Duy Thanh
- Nguyễn Thanh Hòa
- Lê Khắc Hồng Phúc
- Nguyễn Văn Cường
- Phạm Hồng Vinh