Business Information Learning

  1. Trang chủ
  2. Lưu
  3. Thẻ
  4. Hỏi - Đáp

 
 
LeVanLoi'log, ⌚ 2021-05-27
***
☕ Nhàn đàm ICT: Machine Translation ≅
Tác giả: Lê Văn Lợi
Bài đã đăng trên diễn đàn ICT_VN (ict_vn@googlegroups.com).
Ngày đăng: 27-05-2021.
-
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ỹ).