.. raw:: html
.. raw:: html
.. raw:: html
Kiến trúc Mã hoá - Giải mã
==========================
.. raw:: html
*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 :numref:`fig_encoder_decoder` 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.”.
.. raw:: html
.. _fig_encoder_decoder:
.. figure:: ../img/encoder-decoder.svg
Kiến trúc mã hoá - giải mã
.. raw:: html
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ã.
.. raw:: html
Bộ mã hoá
---------
.. raw:: html
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.
.. code:: python
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
.. raw:: html
Bộ giải mã
----------
.. raw:: html
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.
.. code:: python
# 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
.. raw:: html
.. raw:: html
.. raw:: html
Mô hình
-------
.. raw:: html
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ã.
.. code:: python
# 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)
.. raw:: html
Tóm tắt
-------
.. raw:: html
- 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.
.. raw:: html
Bài tập
-------
.. raw:: html
1. 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?
2. Bạn có thể thiết kế một kiến trúc mã hoá - giải mã sâu không?
.. raw:: html
.. raw:: html
Thảo luận
---------
- `Tiếng Anh `__
- `Tiếng Việt `__
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