Phác họa bài post:
ⓐ Dịch máy
theo quy tắc (Rule-based machine translation)
ⓑ Dịch máy
theo câu mẫu (Example-based Machine Translation)
ⓒ Dịch máy sử
dụng thống kê (Statistical Machine Translation - SMT)
ⓓ Dịch máy bằng
mạng nơ-ron (Neural Machine Translation)
ⓔ Dịch máy còn
gì chưa ổn?
-
Từ “Machine
Translation” có thể dịch thành “dịch máy”. Ý của tôi ở đây là “máy dịch” văn bản
trong ngôn ngữ này sang văn bản trong ngôn ngữ khác. Nghĩa là “máy” đóng vai là
người phiên dịch, người biên dịch. Trong thời gian gần đây có rất nhiều phần mềm
“dịch máy” nhưng hồi xưa, tôi tin có nhiều anh/chị trên diễn đàn này cũng giống
như tôi, phần mềm dịch máy chỉ nằm trong giấc mơ. Phần nhàn đàm hôm nay, xin
phép anh/chị “lạm bàn” về câu chuyện này.
ⓐ Dịch máy theo quy tắc (Rule-based machine translation)
Ý tưởng đầu
tiên của các nhà khoa học là bắt chước phong cách của một người “thông ngôn”:
·
Một
cuốn từ điển ngôn ngữ nguồn – ngôn ngữ đích (ví dụ: Anh – Việt)
·
Các
bộ quy tắc ngôn ngữ (nguồn và đích)
Chỉ cần thế
thôi! Đúng thế, vì nếu lập trình được đầy đủ quy tắc và có từ điển thì đúng là
hoàn toàn có thể dịch bằng máy được. Về mặt lý thuyết là thế. Tất nhiên là phải
có việc tách từ, rồi xác định chủ ngữ, vị ngữ, ngôi, số ít, số nhiều, …
Đại diện cho
trường phái này (thời xưa) có Systran (https://translate.systran.net/) và
PROMPT (https://www.online-translator.com/). Đấy là tôi nói thời xưa, chứ các link
mà tôi dẫn ra là đều dịch bằng NMT (dịch máy bằng mạng nơ-ron). Tức là họ đã áp
dụng công nghệ mới nhất – thời nay.
---
Cùng ý tưởng với
cách tiếp cận này có Dịch máy trực tiếp (Direct Machine Translation), Dịch
máy qua chuyển giao (Transfer-based Machine Translation) và Dịch máy qua
liên ngữ (Interlingua).
① Dịch máy trực tiếp (Direct Machine Translation)
Đoạn
văn bản trong ngôn ngữ nguồn được tách ra thành một chuỗi các từ; dịch các từ
này ra ngôn ngữ đích, chỉnh chính tả, số ít số nhiều và chúng ta được một bản dịch
sang ngôn ngữ đích. Nếu ngôn ngữ đích là tiếng mẹ đẻ thì ít nhiều chúng ta cũng
đoán được ý.
≅
② Dịch máy qua chuyển giao (Transfer-based Machine
Translation)
Cách
tiếp cận này gồm 3 bước:
Bước
1: Chuyển đổi văn bản ngôn ngữ nguồn thành một biểu diễn trừu tượng hướng ngôn
ngữ. Ví dụ cấu trúc cây cú pháp (syntax-based trees). Chú ý rằng cấu
trúc này mang đặc tính của từng ngôn ngữ. Ví dụ, cấu trúc cây cú pháp của tiếng
Việt khác với cấu trúc cây cú pháp của tiếng Anh.
Bước
2: Chuyển biểu diễn trong ngôn ngữ nguồn sang biểu diễn tương tự trong ngôn ngữ
đích.
Bước
3: Chuyển từ biểu diễn (ngôn ngữ đích) thành đoạn văn bản dịch trong ngôn ngữ
đích.
---
Một
cách trực quan:
{văn
bản nguồn} → {biểu diễn nguồn}
→ {biểu diễn đích} → {văn bản đích}
≅
③ Dịch máy qua liên ngữ (Interlingua)
Trong
phần dịch máy qua chuyển giao, chúng ta thấy mỗi một ngôn ngữ có cách biểu diễn
riêng biệt. Bây giờ chúng ta tưởng tượng có một cách biểu diễn chung cho tất cả
các ngôn ngữ – vì vậy có tên là Interlinga – điểm giao chung của tất cả các
ngôn ngữ. Tôi tạm dịch là liên ngữ - liên kết tất cả các ngôn ngữ thành một điểm
chung. Ba bước ở trên chỉ còn 2 bước:
{văn
bản nguồn} → {biểu diễn
interlingua} → {văn bản
đích}
Có
vẻ như interlingua rất lý tưởng. Nhưng thưa anh/chị, chưa ai tìm được
interlingua cả!
Điểm yếu nghiêm
trọng của dịch máy theo quy tắc, là dịch các câu bất quy tắc. (Đã là bất quy tắc
thì làm sao mà dùng quy tắc để dịch được, đúng không ạ?! 😊) Mà vấn đề bất quy tắc thì ngôn ngữ nào
cũng có. Còn chưa kể trường hợp từ đa nghĩa (cùng một từ nhưng lúc thì nghĩa
này, lúc thì nghĩa khác).
≅
ⓑ Dịch máy theo câu mẫu (Example-based Machine Translation)
Ý tưởng dịch
theo câu mẫu rất dung dị. Ví dụ, máy dịch câu:
Cái ô này bao nhiêu? → How much is this umbrella?
Tương tự như dịch
câu:
Cái máy ảnh này bao nhiêu? → How much is this camera?
Có mẫu chung là:
X này bao nhiêu? → How much is this X?
---
Bây giờ chúng
ta tưởng tượng là nếu chúng ta có bản dịch tất cả các mẫu câu thì việc dịch máy
trở nên vô cùng đơn giản. Tất nhiên, trở ngại lớn nhất là làm sao mà chúng ta
có đủ bản dịch tất cả các mẫu câu đó.
⚠ Trên
thực tế, cách tiếp cận này không khả thi vì số mẫu câu gần như vô tận.
---
💡 Tuy vậy, đây là một ý tưởng đột phá! Vì sao vậy? Vì như
chúng ta nhận thấy, máy không cần biết đến các quy tắc ngôn ngữ, cũng không cần
biết đến cú pháp, chỉ cần có kho ngữ liệu đủ là được. Kho ngữ liệu là mẫu các bản
dịch từ ngôn ngữ nguồn sang ngôn ngữ đích.
≅
ⓒ Dịch máy sử dụng thống kê (Statistical Machine Translation - SMT)
Vào đầu những
năm 1990, IBM giới thiệu một máy dịch tự động chỉ dựa vào các văn bản đã được dịch
sẵn từ trước. Cái máy đó chả biết gì về cú pháp cũng chả có kiến thức gì như một
nhà ngôn ngữ học cả.
💡 Nghĩ kỹ thì thấy cỗ máy dịch về thực chất là chuyển đổi một
“chuỗi từ” trong ngôn ngữ nguồn sang một “chuỗi từ” trong ngôn ngữ đích. Và ý
tưởng của IBM là “học” các bản dịch đã có sẵn. Nếu các bản dịch có chất lượng
cao thì máy cũng có “cơ hội” để đạt được chất lượng cao nếu máy “học tốt” và “học
nhiều”! Tư duy của cách tiếp cận này là: nếu các chuyên gia hàng đầu về dịch
thuật đã dịch như vậy thì máy cũng sẽ bắt chước đến từng câu, từng chữ! 😊 Tư duy tuy đơn giản mà hay! Phải xem
đây là ý tưởng đột phá.
Thế nguồn các bản
dịch lấy ở đâu? Có một nơi mà nguồn các bản dịch có khá nhiều và chất lượng rất
cao: đó là các kỷ yếu của Liên hiệp quốc (United Nations). Tất cả các
thành viên của Liên hiệp quốc phải có bản dịch ra ngôn ngữ của nước mình. Ngoài
nguồn từ UN, người ta có thể lấy các kỷ yếu ở cấp thấp hơn như châu lục, vùng,
kỷ yếu của văn bản các hiệp định song phương, các bài viết song ngữ trên các
báo điện tử, …
SMT hoạt động
như thế nào?
·
Người
ta chuẩn bị một kho ngữ liệu song ngữ gồm các bản dịch từ ngôn ngữ nguồn sang
ngôn ngữ đích (ví dụ Việt – Anh);
·
Máy
được huấn luyện (training) để học cách dịch từ kho ngữ liệu này;
·
Sau
khi máy học xong, chúng ta chỉ cần đưa văn bản trong ngôn ngữ nguồn (vd. Tiếng
Việt) là đầu vào thì máy sẽ cho ra văn bản đích là bản dịch ra ngôn ngữ đích
(vd. Tiếng Anh).
Chú ý rằng kho
ngữ liệu càng lớn thì máy sẽ có chất lượng dịch càng tốt – với điều kiện là tất
cả các bản dịch đều có chất lượng cao. Đơn vị dịch của kho ngữ liệu là câu.
Nghĩa là văn bản dịch thường là tổ hợp của các câu dịch.
SMT “tiến hóa”
từ “dịch từng từ một” (Word-based SMT) lên “dịch cắt đoạn cụm từ” (Phrase-based
SMT). Tôi xin tóm lược như sau:
① Dịch máy “từng từ một” (Word-based SMT)
Ý
tưởng khá đơn giản: tách câu thành tổ hợp các từ và dịch từng từ một. Ví dụ,
chúng ta tra từ điển và dịch từ “nhà” sang tiếng Anh thì được từ “home”. (Còn
có một số tùy chọn khác nữa.) Câu hỏi đặt ra là máy làm sao nó biết dịch như thế?
Câu trả lời đơn giản là: lúc đầu máy không hề biết! SMT không sử dụng từ điển.
Cách
của SMT là đọc hàng triệu câu dịch và làm thống kê. Cứ câu nào trong bản nguồn
có từ “nhà” thì thống kê tất cả các từ có trong bản dịch. Ví dụ, trong 10.000 lần
xuất hiện từ “nhà” trong bản nguồn, trong bản dịch người ta thu được kết quả thống
kê như sau:
·
Từ
“home” xuất hiện 6.000 lần;
·
Từ
“house” xuất hiện 2.000 lần;
·
Từ
“dormitory” xuất hiện 100 lần;
·
…
Như
vậy, xác suất xuất hiện từ “home” = Pnhà(home) = 6.000/10.000 = 0.6.
Do
bản dịch từ “nhà” thành từ “home” có xác suất lớn nhất nên máy sẽ chọn “home”
là kết quả! Đại ý là thế, còn nhiều chi tiết nữa nhưng chúng ta khỏi cần đi
sâu.
IBM
đưa ra 5 mô hình, chúng ta cùng lược qua.
Mô
hình 1 (túi từ: bag of words)
Mô
hình này được gọi là “túi từ” (bag of words) vì cách dịch của mô hình
này là:
{túi
từ nguồn} → {túi từ đích}
Mô
hình này không tính đến thứ tự của từ trong câu. Nghĩa là một “mớ từ” trong
ngôn ngữ nguồn được dịch thành một “mớ từ” trong ngôn ngữ đích. Dĩ nhiên, mô
hình này không dùng được trong thực tế.
Mô
hình 2 (xử lý vấn đề thứ tự từ trong câu – word order)
Từ
mô hình 1, chúng ta thu được bản dịch là một “túi từ”. Bây giờ máy phải sắp xếp
chúng theo đúng thứ tự. Cách mà người ta xác định thứ tự từ trong câu là sử dụng
các phép toán về xác suất thống kê bằng mô hình ước lượng (Estimating Model).
Khá nhức đầu, tôi khuyến cáo bỏ qua. 😊
Mô
hình 3 (thêm “hệ số từ sinh” – fertility)
Khi
dịch, người ta nhận thấy một từ ở ngôn ngữ nguồn có thể dịch thành một hoặc nhiều
từ ở bản đích (hoặc bị triệt tiêu ở bản đích). Ví dụ:
{đây
là nhà đẹp} → {this is a house beautiful}
Chú
ý từ “nhà” được dịch thành “a house”. Vậy từ “nhà” có “hệ số từ sinh” (fertility)
= 2.
Mô
hình 4 (thêm “dóng từ” – word alignment)
Dóng
từ (word alignment) là vấn đề căn bản trong SMT: từ ở bản nguồn tương ứng
với từ ở bản đích. Ví dụ:
{đây
là nhà đẹp} → {this is a beautiful house}
Từ
“đây” dóng với từ “this”, từ “là” dóng với từ “is”, từ “nhà” dóng với “house”,
từ “đẹp” dóng với từ “beautiful”.
Mô
hình 5 (gỡ rối – bug fixes)
Mô
hình 5 là bản sửa lỗi của mô hình 4.
Mô
hình dịch từng từ một tuy có ý tưởng đột phá song không giải quyết được một số
vấn đề cơ bản như giống (gender) hay từ đa nghĩa.
② Mô hình n-gram
Một
cách nôm na: mô hình n-gram là hình thức tách chuỗi thành các đoạn gồm n
phần tử liền nhau – lợp (ngói) n tấm. Ví dụ, giả thiết chúng ta có chuỗi
a, b, c, d, e, f. Cách tách thành mô hình 3-gram:
“a”,
“ab”, “abc”, “bcd”, “cde”, “def”, “ef”, “f”.
Nếu
chúng ta xem mỗi phần tử là một từ thì tách từ chính là mô hình 1-gram
hay còn gọi là unigram. Mô hình 2-gram có tên gọi là bigram/digram.
Mô hình 3-gram có tên gọi là trigram.
③ Đo chất lượng bản dịch: thước đo BLEU (BiLingual Evaluation
Understudy)
Trước
khi bàn đến phần dịch máy theo cụm từ, chúng ta đặt vấn đề đánh giá chất lượng
bản dịch. Và việc đánh giá này cũng phải được thực hiện bằng máy – nghĩa là tự
động chứ không phải mỗi lần đánh giá lại phải lập hội đồng gồm 7 hoặc 9 vị. Tốn
nguồn lực, chậm mà chưa chắc đã khách quan! 😊
-
Thưa
anh/chị, việc này rất quan trọng trong việc thúc đẩy các ý tưởng về dịch máy.
Hàng năm, có rất nhiều các nghiên cứu về vấn đề này. Để đánh giá được ý tưởng
thì không thể chỉ căn cứ vào bài báo, mà phải căn cứ vào kết quả thực nghiệm của
phần mềm thể hiện ý tưởng.
-
Năm
2002, Kishore Papineni et al. đã công bố một thước đo có tên là BLEU mà về sau
được cộng đồng sử dụng một cách rộng rãi. Bài báo đấy ở đây:
BLEU: a Method for Automatic Evaluation of Machine
Translation
Nguyên
lý đánh giá của BLEU là bản dịch nào càng sát với bản dịch của chuyên gia dịch
thuật chuyên nghiệp thì càng tốt. Thước đo này có 2 thành phần:
·
Kho
ngữ liệu chứa bản dịch chuẩn, tốt nhất – điểm tuyệt đối (100%). Bản dịch này là
của các chuyên gia dịch thuật. Chú ý rằng số bản tham chiếu có thể nhiều chứ
không nhất thiết chỉ duy nhất một tham chiếu.
·
Một
thước đo bằng số, đo độ tương tự của bản đang dịch so với bản “chuẩn” ở trên –
điểm từ 0% đến 100%.
Tham
khảo bài báo, anh/chị sẽ nhận thấy là họ tách bản dịch thành 4-gram và tính
tỷ lệ trùng các tách đoạn bản dịch so với bản chuẩn. Đơn giản mà hiệu quả!
Các
bài báo, khi đề cập đến điểm BLEU họ thường chỉ cho con số, ví dụ 34.5. Điều đó
có nghĩa là họ đạt được điểm 34,5%.
④ Dịch máy “từng cụm từ một” (Phrase-based SMT)
Dịch
“từng cụm từ một” (Phrase-based SMT) thừa kế toàn bộ các phương pháp của
dịch tách từng từ một (Word-based SMT) – chỉ có một điểm khác: tách câu
theo mô hình n-gram, chứ không phải tách từng từ (1-gram). Nói
cách khác, đơn vị “hạt nhân” lần này là đoạn n từ đi liền nhau. Từ chỗ
“dịch từng từ một”, chúng ta chuyển thành “dịch từng cụm từ một”. Thay vì thống
kê dịch “từ → từ”, chúng ta thống kê dịch “cụm từ → cụm từ”. Tất nhiên, mức độ
tính toán sẽ tăng lên. Tuy nhiên, vào thời điểm hiện nay, độ phức tạp tính toán
không còn là vấn đề lớn như thời xưa.
Bằng
trực quan, chúng ta nhận thấy là trong ngôn ngữ, không phải từ nào cũng ghép được
với bất kỳ từ nào khác. Chỉ có một số lượng nhỏ các cặp từ đi liền nhau là có
nghĩa. Tương tự như vậy, không phải tổ hợp 3 từ nào cũng có thể ghép được với
nhau. Rất nhiều tổ hợp vô nghĩa – tức là, trong thực tế chả ai nói hoặc viết
theo các tổ hợp đó bao giờ. Như vậy, cụm từ phổ biến sẽ xuất hiện nhiều trong
các bản dịch song ngữ. Ngược lại, các cụm từ khác, rất ít hoặc không bao giờ xuất
hiện trong các bản dịch. Vì SMT dịch theo thống kê xác suất nên kết quả là bản
dịch sẽ cho kết quả xuất hiện nhiều các cụm từ phổ biến, hay dùng (vì có xác suất
lớn hơn).
Vì
vậy, nhờ sử dụng mô hình n-gram mà SMT có chất lượng các bản dịch tốt
hơn hẳn.
Ngày
28/04/2006, Google cho ra mắt phần mềm dịch máy SMT. Bài báo đấy ở đây.
Chắc
nhiều anh/chị trên diễn đàn này, cũng giống như tôi, rất háo hức và “thần phục”
phần mềm dịch máy của Google. Các đoạn văn mang tính ngoại giao quốc tế thì
Google dịch cực hay. Tuy nhiên, khi tôi dịch một vài câu thông thường thì phần
mềm này dịch khá lủng củng, thậm chí có vài trường hợp vô nghĩa. Hồi đó tôi
chưa rõ lý do. Sau này khi tìm hiểu thêm thì hóa ra lý do là do phần mềm này được
huấn luyện từ các “học liệu” lấy từ các bản dịch ở Liên hợp quốc!
≅
ⓓ Dịch máy bằng mạng nơ-ron (Neural Machine Translation)
Dịch máy bằng mạng
nơ-ron (Neural Machine Translation - NMT) đứng trên vai của dịch máy “từng
cụm từ một” (Phrase-based SMT). Nghĩa là NMT chạy tiếp sức từ Phrase-based
SMT. Do đó, NMT không có phát kiến mới. Tuy nhiên, NMT có cách tiếp cận
khác biệt. Đại ý, có thể khái quát như sau:
{câu nguồn} → [context] → {câu
đích}
Nghĩa là:
Bước 1: Câu
nguồn được “mã hóa” thành context. Có thể hiểu context là một
cách mã hóa các đặc tính (feature) của câu nguồn. Context không
có gì bí hiểm cả: dưới góc độ của dân lập trình thì context là một
vector hoặc ma trận số thực!
Bước 2: Phát
sinh ra câu đích từ việc giải mã context!
Trước khi có thể
dịch được, người ta phải huấn luyện (training) mạng nơ-ron. Dữ liệu dùng
để huấn luyện được lấy từ kho ngữ liệu song ngữ (là các bản song ngữ đã được dịch).
SMT huấn luyện bằng cách thống kê từ, cụm từ. Còn NMT huấn luyện mạng nơ-ron
theo cách của Machine Learning:
nguyên liệu đầu vào là câu nguồn, câu đích (không tách thành cụm từ). Mạng
nơ-ron “học” dịch qua các cặp này và “chiết xuất” ra context!
-
Cách tiếp cận
này làm chúng ta nhớ lại cách tiếp cận của dịch qua liên ngữ:
{câu nguồn}
→ {biểu diễn interlingua}
→ {câu đích}.
Biểu diễn
qua interlinga trong
trường hợp này chính là context.
-
Dưới góc độ truyền
tin, chúng ta có thể hiểu dịch máy là bộ encoder-decoder: đầu vào (câu
nguồn) được mã hóa (encode), và đầu ra (câu đích) là kết quả của giải mã
(decode).
-
Tôi xin lược
qua sự tiến hóa của NMT theo thời gian, căn cứ vào thời gian xuất hiện các bài
báo khoa học. Anh/chị nào ngại đi sâu vào chi tiết kỹ thuật, xin bỏ qua phần
sau.
① Mô hình Seq2Seq (Sequence-to-Sequence)
Theo
quan sát của tôi thì bài báo đầu tiên đề xuất mô hình chuyển đổi một chuỗi từ
này (câu nguồn) thành một chuỗi từ khác (câu đích) là bài
này (đăng tháng 6/2014).
Cả đầu vào và đầu ra họ đều sử dụng mạng RNN (RNN: Recurrent Neural Networks
– tạm dịch là mạng Nơ-ron tái phát). Chúng ta có thể hiểu RNN là mạng nơ-ron tuần
tự cũng được. Ví dụ, nếu dịch chuỗi {a, b, c, d} thành chuỗi {x, y, z} và context
là vector có 5 phần tử, một cách trực quan, chúng ta có thể hình dung như sau:
|
ⓐ→ⓑ→ⓒ→ⓓ→ |
[0.1, -1.9, 0.7, 1.2, -0.5] |
→ⓧ→ⓨ→ⓩ |
|
Encoder (RNN) |
Context (vector) |
Decoder (RNN) |
Trong
mô hình trên, context được tạo ra từ lớp ẩn (hidden layer) của Encoder
RNN!
Thế
người ta tạo câu đích bằng cách nào? Do sử dụng RNN nên decoder tạo câu
đích “từng từ một”. Từ tiếp theo là kết quả của hàm số có tham số là context, lớp ẩn và dãy các từ đã sinh ra
trước đó. Giả thiết câu đích có n từ, ký hiệu là y1, y2,
…, yn thì decoder sẽ tạo ra đầu tiên là {y1}, tiếp
đến {y1, y2}, tiếp đến {y1, y2, y3},
… và cuối cùng là {y1, y2, …, yn}.
-
Đến
tháng 9/2014, một bài báo khác đề xuất mô hình tương tự.
|
ⓓ→ⓒ→ⓑ→ⓐ→ |
[0.1, -1.9, 0.7, 1.2, -0.5] |
→ⓧ→ⓨ→ⓩ |
|
Encoder (LSTM) |
Context (vector) |
Decoder (LSTM) |
Trong
đề xuất này, họ thay RNN bằng LSTM (Long Short-Term Memory). LSTM là một
dạng đặc biệt của RNN. Họ sử dụng LSTM 4 lớp và đảo thứ tự chuỗi đầu vào (xem
hình minh họa ở trên). Context trong trường hợp này được phát sinh từ lớp
ẩn cuối của LSTM.
Theo
bài báo, chưa cần tinh chỉnh, đề xuất của họ đã cho chất lượng dịch tốt hơn
SMT! Nghĩa là điểm BLEU của họ cao hơn điểm BLEU của SMT.
② Mô hình Seq2Seq kết hợp với Attention
Cũng
trong khoảng thời gian này, có một đề
xuất kết hợp mô hình
Seq2Seq với một cơ chế có tên gọi là Attention (tạm dịch là cơ chế chú
ý).
|
ⓐ→ⓑ→ⓒ→ⓓ ⓐ←ⓑ←ⓒ←ⓓ |
[[0.85, 0.05, 0.02, 0.00] [0.01, 0.90, 0.90, 0.02] [0.01, 0.02, 0.01, 0.90]] |
→ⓧ→ⓨ→ⓩ |
|
Encoder (BiRNN) |
Context (matrix nxm) |
Decoder (RNN) |
Qua
hình vẽ minh họa ở trên:
Encoder: là
mạng RNN 2 chiều (BiRNN). Nghĩa là: đầu vào là tổ hợp của chuỗi xuôi (đúng thứ
tự câu nguồn) ghép với chuỗi ngược (đảo thứ tự câu nguồn). (Xem minh họa ở
trên.)
Context: là
một ma trận nxm trong đó n là số từ của {câu đích} và m
là số từ của {câu nguồn}. Mỗi một từ trong câu đích sử dụng một vector context
riêng. Tuy là vector context riêng nhưng đó là kết quả mã hóa của toàn bộ
câu nguồn!
Decoder: là
mạng RNN.
-
Điểm
đáng chú ý của mô hình này là: ngoài việc “suy diễn” ra từ đích (trong câu
đích), người ta còn dóng (align) {từ đích} ↔ {từ nguồn}.
Cơ
chế Attention là một đột phá trong Machine
Learning. (Cơ chế Attention còn được ứng dụng sang nhiều lĩnh vực
khác của Machine Learning).
-
💡 Luận bàn thêm về cách tạo ra cơ chế “Attention”. Để
hiểu được chính xác, mời anh/chị đọc bài báo tôi đã dẫn ở trên. Ở đây tôi chỉ
diễn đạt vấn đề một cách nôm na. Ý tưởng của “Attention” là mỗi từ đích
chỉ “chú ý” đến một số từ của câu nguồn. Biết thế, nhưng làm cách nào để biết
được “từ” được chú ý là “từ” nào? Nếu anh/chị nhớ lại cách mà Word2Vec đo độ “similarity”
của các từ thì lần này “Attention” tìm cách đo “mối tương quan” của từ
đích với tất cả các từ nguồn. Ví dụ, khi huấn luyện mạng, trong 100 lần xuất hiện
từ đích “x” thì từ nguồn “a” xuất hiện 85 lần, từ nguồn “b” xuất hiện 10 lần, từ
nguồn “c” xuất hiện 5 lần, còn từ nguồn “d” không xuất hiện lần nào. Căn cứ vào
mối tương quan này người ta sẽ dóng từ đích “x” với từ nguồn “a”. Logic, đúng
không ạ?! Vì sao? Vì từ đích “x” rõ ràng là “chú ý” đến từ nguồn “a” nhiều nhất
(vì “mối tương quan” là 85/100 lớn nhất so với 10/100, 5/100, 0/100).
Câu
hỏi tiếp theo được đặt ra là: làm thế nào để đo được “mối tương quan” như đề cập
ở trên? Cách mà người ta thực hiện là: đưa ra công thức tính trọng số mối tương
quan, lấy các trọng số này từ việc huấn luyện một mô hình khác, cùng huấn luyện
đồng thời, đặt bên cạnh bộ Encoder-Decoder và được đặt tên là “alignment
model” (tạm dịch là mô hình dóng hàng).
Vậy
“alignment model” có gì đặc biệt không? Mô hình này là một mạng nơ-ron
thông thường (feed-forward network), có duy nhất 1 lớp ẩn, lấy softmax
là hàm đầu ra – có thể hiểu là cách đánh giá “mối tương quan” của “từ đầu ra” (output
word) so với với tất cả các “từ đầu vào” (input word). Sau đó, bộ Encoder-Decoder
sẽ dóng (align) “từ đầu ra” với “từ đầu vào” nào tương ứng với giá trị softmax
lớn nhất.
-
③ Mô hình GNMT của Google
Một
trong những vấn đề của NMT là từ vựng (vocabulary). Vấn đề là, khi huấn
luyện người ta thu được một lượng từ vựng từ các kho ngữ liệu song ngữ (bitext).
Như vậy, lượng từ vựng đó là do kho ngữ liệu cung cấp, gọi là từ vựng “phổ
thông”. NMT sẽ ứng xử thế nào khi gặp một từ không nằm trong kho từ vựng đã biết
(OOV: out-of-vocabulary)? Để đưa vào ứng dụng thực tế, phải có một cách
nào đó ứng xử trường hợp này.
Một
trường hợp nữa tương tự như OOV, là câu nguồn chứa “tên riêng”, “con số” và “ngày
tháng năm”. Làm thế nào để dịch “tên riêng”, “con số”, “ngày tháng năm” từ câu
nguồn sang câu đích? Sao chép y nguyên từ nguồn sang đích chăng? Không hẳn là ổn.
Ví dụ chúng ta thường dịch France → Pháp, Moscow → Mạc Tư Khoa. Như vậy, tên
riêng vẫn phải dịch, không đơn thuần sao chép sang. Ví dụ nữa: số trong tiếng
Anh là 32,500 - trong tiếng Việt chúng ta lại ghi là 32.500. Vậy là con số,
trong một số trường hợp, vẫn phải dịch. Ngày tháng cũng vậy. Trong tiếng Anh (Mỹ)
nếu họ đề 9/11 thì chúng ta hiểu đó là ngày 11 tháng 9.
Ngày
27/09/2016, Google ra thông báo về phần mềm dịch máy trên nền tảng NMT có tên gọi
là GNMT: Google Neural Machine Translation system. Thông báo đấy ở đây (trước đó Google đã đăng bài
báo khoa học về vấn đề
này). Như vậy, 10 năm sau khi ứng dụng SMT, Google đã thay dịch máy bằng NMT.
Theo
bài báo của Google, thì công nghệ dịch của GNMT dựa trên ý tưởng chính là phối
hợp EncoderRNN-DecoderRNN với cơ chế Attention. Cơ chế Attention gần như giữ nguyên bản gốc,
còn Encoder và Decoder thì được tăng cường bằng cách tăng số lớp LSTM thành 8,
sử dụng GPU + tính toán song song.
-
Để
đối phó với vấn đề OOV, Google đã chọn cách chia từ thành từng mảnh bé hơn (wordpiece).
Như vậy, “từ” không còn là đơn vị bé nhất mà các “mảnh từ” mới là đơn vị bé nhất.
Chú ý rằng cách tách từ thành “mảnh từ” khác với cách tách từ thành tổ hợp của
các ký tự. Nếu người ta tổ hợp đủ tất cả các “mảnh từ” có thể có, thì sẽ không
xảy ra trường hợp OOV.
-
Cũng
phải nói thêm, để ra được GNMT, Google đã tổ hợp rất nhiều công trình nghiên cứu
trước đó. Trên đây tôi chỉ điểm sơ lược vài điểm tôi cho là “hấp dẫn” 😊.
-
💡 Mô hình “Transformer”. Đến tháng 6/2017, Vaswani
et al đề xuất một mô hình mới có tên là “Transformer” (Attention Is All You Need). Mô hình này chỉ dùng cơ chế “Attention”,
không dùng mạng RNN. Thay vì cho từng từ của câu nguồn lần lượt qua RNN (cần đến
n nhịp nếu câu nguồn có n từ), mô hình này mã hóa toàn bộ các từ
của câu nguồn thành 1 véc-tơ kèm với việc mã hóa thứ tự của từng từ và chỉ cần
một nhịp là “Transformer” nhận hết toàn bộ câu nguồn (đầu vào). Tương tự
như vậy, chỉ với một nhịp, “Transformer” cho kết quả đầu ra: toàn bộ các
từ của câu đích kèm với mã hóa số thứ tự của từng từ trong câu. Với cách làm
này mô hình rút ngắn thời gian huấn luyện cũng như rút ngắn thời gian cho kết
quả đầu ra. “Transformer” còn có nhiều chi tiết tổng quát hóa cơ chế “Attention”
nhưng tôi xin phép không đi sâu. Theo bài báo, với cùng tập dữ liệu thử nghiệm như
các mô hình khác, “Transformer” cho kết quả chấm điểm BLEU tốt nhất.
-
║ Ngoài lề:
mô hình “Transformer” có ảnh hưởng khá lớn trong Machine Learning.
-
Vậy
Google có cập nhật theo mô hình “Transformer” không? Tôi thấy vào tháng
6/2020, Google có bài nói đến việc cập nhật GNMT. Trong bài này, họ nhận thấy “Transformer”
có phần mã hóa đầu vào (Encoder) tốt hơn nhưng phần giải mã (Decoder)
thì không tốt hơn bộ giải mã của RNN. Vì vậy, họ chỉ tích hợp phần mã hóa đầu
vào (Encoder) của “Transformer”, còn phần giải mã (Decoder)
thì họ giữ nguyên mô hình RNN.
-
Cũng xin nói rõ
thêm với anh/chị, vì tôi “mê” Google nên tôi thường lấy Google ra làm ví dụ, và
thậm chí là “thước đo” các tiến bộ trong dịch máy. Trên thực tế còn nhiều các
“đại ca” khác về dịch máy. Lấy ví dụ như Bing của Microsoft. Hình như Bing sử dụng
cùng công nghệ với Google Translate thì phải. Bây giờ mời anh/chị đưa văn bản
vào phần tiếng Anh là “Nguyen Ngoc Binh” và anh/chị dịch ra tiếng Việt thì cả
Google Translate và Bing Translator đều cho kết quả là “Nguyễn Ngọc Bình” với đầy
đủ dấu tiếng Việt. Kể ra các phần mềm này thông minh đấy chứ nhỉ!? 😊 (Cũng phải xin lỗi anh Nguyễn Ngọc Bình
về ví dụ này 🤷 – vì anh là chủ diễn đàn này nên tôi mới dám mạo muội vậy.)
-
Để có một danh
sách đầy đủ các website dịch máy trực tuyến thì chỉ cần mở Google Search và
click … Và anh/chị có thể ngạc nhiên là sao có nhiều phần mềm dịch máy đến như
vậy.
Thế mới thấy
tác dụng của văn hóa mở (openess) và khoảng cách giữa nghiên cứu (research)
và ứng dụng thực tế (application) được rút ngắn đến kinh ngạc.
≅
ⓔ Dịch máy còn gì chưa ổn?
Dịch máy đạt đến
như NMT có vẻ như “rất tuyệt vời”. Câu hỏi đặt ra là “máy dịch” liệu có thể đạt
hoặc vượt “người dịch”? Câu trả lời ngắn là “Không”. Câu trả lời ngắn, thận trọng
hơn là “Chưa”.
Trước khi trả lời
dài hơn, chúng ta cùng điểm lại cái “trí tuệ” của SMT và NMT nằm ở đâu? “Trí tuệ”
của SMT lẫn NMT đều nằm ở kho ngữ liệu song ngữ bitext. Ai tạo ra kho ngữ
liệu song ngữ bitext: con người – các thông dịch viên, biên dịch viên
chuyên nghiệp.
Câu trả lời
dài: máy dịch chưa đáng tin cậy (100%), chưa dịch theo bối cảnh và máy dịch
chưa có hiểu biết thường thức.
① Độ tin cậy (reliability)
Câu
hỏi của độ tin cậy là: dịch thế đã đúng chưa? Cả SMT lẫn NMT đều “không chắc”
câu dịch đúng hay không đúng. Nghĩa là trong trường hợp dịch sai thì máy cũng
không biết là mình đã dịch sai. Có 2 điểm “không chắc”:
+
Máy chỉ xác định kết quả dựa trên xác suất. Ví dụ kết quả có xác suất 99% là
đúng. Chuyện gì xảy ra nếu kết quả rơi vào 1% còn lại?
+
Chúng ta không thể khẳng định kho ngữ liệu chứa 100% câu dịch đúng. (Sai sót là
chuyện thường tình của con người.) Mà máy dịch phải dựa vào kho ngữ liệu này
nên độ tin cậy của dịch máy phải dựa vào độ tin cậy của kho ngữ liệu.
-
② Đặt trong bối cảnh (context)
Chú
ý rằng, cả SMT lẫn NMT đều “dịch từng câu một”. Nghĩa là, câu sau không hề có bất
cứ một mối liên hệ nào với các câu trước đó.
-
Gần
đây xuất hiện một số nghiên cứu đặt câu dịch trong context của toàn bộ tài liệu. Tuy nhiên, hình như các nghiên cứu
này chưa đưa được vào thực tế.
-
③ Hiểu biết thường thức (common sense)
“Hiểu
biết thường thức” ở đây là kiến thức “đa số đều biết” nhưng không nằm trong văn
bản của tài liệu nguồn. Tôi xin lấy một ví dụ: giới trẻ biết “metal” là một
dòng nhạc rốc, vì vậy nên nếu trong tiếng Anh câu “I’m a huge metal fan!”
có thể hiểu là “Tôi là người rất hâm mộ dòng nhạc metal!”. Tuy nhiên, nếu
chúng ta dịch câu đó bằng Google Translate thì được “Tôi là một người hâm mộ
kim loại lớn!” Còn nếu chúng ta dịch bằng Bing Translator thì được “Tôi
là một fan hâm mộ kim loại khổng lồ!”. 😊
Chứng tỏ vẫn là “máy”, đúng không anh/chị?
≅
Đấy là tôi đàm
luận cho hết nhẽ thế thôi, chứ NMT là “tuyệt” rồi. Bài nhàn đàm này hơi dài,
tôi xin phép nhờ chú thỏ (được vẽ chỉ bằng ký tự Unicode) tặng anh/chị một
tách cà phê “ảo”. Tất nhiên, anh/chị phải nhâm nhi cà phê thật!
(\_/)
(
•_•)
/
>☕
PS. Nếu anh/chị đọc các bài báo liên quan
đến chủ đề này thì anh/chị sẽ thấy sự xuất hiện khá thường xuyên hai địa chỉ
email người Việt (hoặc gốc Việt). Đó là:
qvl@google.com:
đây là email của anh Lê Viết Quốc. Anh Lê Viết Quốc quê ở Hương Thủy, tỉnh Thừa
Thiên – Huế, tốt nghiệp Quốc học Huế, học đại học ở ANU (Australian National
University), Australia, lấy bằng tiến sĩ ở trường ĐH Stanford (Mỹ). Anh Lê Viết
Quốc là một trong những thành viên đầu tiên của Google Brain, bên cạnh các nhân
vật lừng danh như Jeff Dean hay Andrew Ng.
thangluong@google.com: đây là email của anh Lương Minh Thắng.
Anh Lương Minh Thắng tốt nghiệp THPT trong nước, học khoa học máy tính ở ĐH Quốc
gia Singapore (National University of Singapore), lấy bằng tiến sĩ ở trường ĐH
Stanford (Mỹ).
Không có nhận xét nào:
Đăng nhận xét