Seq2seq là gì

Ở phần này, chúng ta cùng tìm hiểu về khái niệm Seq2seq thông qua một trong những ứng dụng chính là neural machine translation. Seq2seq là kỹ thuật chính cho việc giải quyết bài toán nên tập trung vào những từ nào của một câu trong dịch máy. Để bắt đầu, chúng ta cùng xem qua thế nào là neural machine translation và ưu nhược điểm của neural machine translation và Seq2seq.

Trong neural machine translation, chúng ra cần sử dụng bộ mã hóa – encoder và bộ giải mã – decoder để dịch từ ngôn ngữ này sang ngôn ngữ khác. Ví dụ ở bài này sẽ là từ tiếng Anh dịch sang tiếng Đức. Để làm điều này, chúng sẽ sử dụng hệ thống dịch máy có LSTM cho cả mã hóa và giải mã.

Mô hình Seq2Seq truyền thống được Google giới thiệu vào năm 2014 và bản thân nó đã tạo ra một sự đột phá lớn ở thời điểm đó. Về cơ bản, nó hoạt động bằng cách lấy một chuỗi các mục như từ và trả về một chuỗi khác. Cách nó thực hiện là ánh xạ các chuỗi có độ dài thay đổi vào một bộ nhớ có độ dài cố định. Tính năng này đã làm cho mô hình này trở thành một phần quan trọng cho dịch máy, cùng những ứng dụng khác. Các chuỗi đầu vào và chuỗi đầu ra không nhất thiết phải có độ dài phù hợp. Hãy nhớ lại vấn đề gradient biến mất trước đó trong series. Và các mô hình Seq2Seq LSTM và GRU thường được sử dụng để tránh các gradient biến mất. Một bộ giải mã mã hóa trông như thế này.

Chúng diễn ra ở hidden state – trạng thái ẩn và một chuỗi từ, chẳng hạn như một câu đơn lẻ. Bộ mã hóa thực hiện từng bước đầu vào, thu thập thông tin cho phần đầu vào đó, sau đó di chuyển nó về phía trước. Hình chữ nhật màu cam đại diện cho trạng thái ẩn cuối cùng của bộ mã hóa, cố gắng nắm bắt tất cả thông tin được thu thập từ mỗi bước đầu vào, trước khi cung cấp cho bộ giải mã. Trạng thái ẩn cuối cùng này cung cấp các trạng thái ban đầu để bộ giải mã bắt đầu dự đoán chuỗi.

Một hạn chế chính của mô hình Seq2Seq truyền thống, là nút cổ chai thông tin. Bạn có thể đã bắt đầu hình dung những gì có thể xảy ra trong trường hợp một câu dài. Khi các đầu vào riêng lẻ bắt đầu xếp chồng bên trong các trạng thái ẩn cuối cùng của bộ mã hóa, bởi vì Seq2Seq sử dụng bộ nhớ có độ dài cố định, các chuỗi dài hơn trở nên có vấn đề. Một vấn đề khác xuất hiện khi các bước nhập sau trong trình tự được coi trọng hơn. Mà bạn có thể xem minh họa ở đây, với từ cuối cùng của câu ‘today’. Tất cả điều này dẫn đến một mô hình hoạt động cực kỳ tốt cho các chuỗi ngắn hơn mà lại không tốt cho những câu dài hơn và phức tạp.

Điều này dẫn đến hiệu suất mô hình thấp hơn khi kích thước chuỗi tăng lên và dĩ nhiên là điều đó không tốt. Vì vậy, vấn đề với việc có một trạng thái ẩn bộ mã hóa có kích thước cố định là nó phải vật lộn để nén các chuỗi dài hơn. Và kết thúc là tự điều chỉnh và trừng phạt người giải mã, người mà chỉ muốn đưa ra một dự đoán tốt nhất có thể. Vậy câu hỏi đặt ra là làm thế nào ta có thể thực hiện tốt hơn với bộ giải mã?

Chúng ta có thể giữ từng vectơ từ với thông tin riêng lẻ này, thay vì cố gắng phá vỡ tất cả thành một vectơ lớn?

Nhưng mô hình này vẫn có những sai sót rõ ràng với bộ nhớ và bối cảnh. Làm thế nào chúng ta có thể xây dựng một mô hình hiệu quả về thời gian và bộ nhớ dự đoán chính xác từ một chuỗi dài? Điều này có thể thực hiện được nếu mô hình có cách chọn và tập trung vào các từ dễ hiểu nhất trong mỗi bước. Bạn có thể coi điều này giống như việc cung cấp cho mô hình một lớp mới để xử lý thông tin này. Nếu bạn cung cấp thông tin cụ thể cho từng từ đầu vào, bạn cung cấp cho mô hình một cách để tập trung sự chú ý của nó vào đúng nơi ở mỗi bước. Và từ sự tiến triển ngọt ngào đó, ở bài P4.3 tiếp theo, chúng ta sẽ cùng tìm hiểu tiếp một ý tưởng khái niệm về lớp mới này đang làm gì và tại sao.

Bây giờ bạn đã có cái nhìn tổng quan về dịch máy thần kinh và seq2seq và bạn có một ý tưởng sơ bộ về attention trông như thế nào. Bạn biết mô hình đang tập trung vào những từ nào khi dịch từ ngôn ngữ này sang ngôn ngữ khác rồi nhé!

Note: bài viết dựa theo series dạy NLP của Deeplearning AI với mục đích duy nhất là truyền tải kiến thức. Khóa học thực sự hay và mình đánh giá rất cao. Ngoài kiến thức, các lab thực hành giúp bạn có thêm kinh nghiệm thực tế. Hoàn thành khóa học sẽ có certificates nữa nhé!

rong bài viết này, người viết tóm tắt những kiến thức cơ bản của kỹ thuật attention được áp dụng trong mô hình seq2seq và giới thiệu một số nghiên cứu sử dụng kỹ thuật này trong xử lý ngôn ngữ tự nhiên (NLP) tại hội nghị ACL 2017. Về cơ bản, mô hình seq2seq được xây dựng dựa trên hai mạng neural truy hồi (Recurrent Neural Network) đóng vai trò là các bộ mã hóa, giải mã. Vì vậy người viết cũng mô tả khái quát về mạng neural truy hồi trong phần đầu của bài viết.

Giới thiệu

Trong rất nhiều các bài toán, chúng ta cần sinh ra một chuỗi đầu ra từ một chuỗi đầu vào cho trước. Ví dụ, một hệ thống dịch máy Anh – Việt sẽ sinh ra một câu dịch tiếng Việt (chuỗi các từ tiếng Việt) cho một câu tiếng Anh đầu vào; một hệ thống sinh hội thoại (dialogue system) tự động sinh ra câu trả lời cho câu hội thoại của người dùng. Gần đây, phương pháp sequence-to-sequence (hay tên gọi khác là encoder-decoder) ngày càng được ứng dụng nhiều hơn trong các bài toán trên, trong đó chúng ta cần học một mô hình sinh chuỗi các đầu ra từ chuỗi đầu vào cho trước.

Trong mô hình sequence-to-sequence (seq2seq), kỹ thuật attention là một kỹ thuật cho phép có thể học hiệu quả mô hình sinh cho những chuỗi có độ dài lớn và đã dành được sự quan tâm lớn của cộng đồng nghiên cứu. Hệ thống dịch máy tự động của Google, Google Translate hiện đang áp dụng mô hình seq2seq với kỹ thuật attention và cho chất lượng vượt trội so với những phương pháp trước kia. Tại hội nghị hàng đầu về xử lý ngôn ngữ tự nhiên ACL năm 2017, theo thống kê có khoảng 15 bài báo mà tiêu đề có chữ “attention” và tăng 6 bài so với hội nghị năm trước.

Trong bài viết này, người viết tóm tắt những kiến thức cơ bản của kỹ thuật attention được áp dụng trong mô hình seq2seq và giới thiệu một số nghiên cứu sử dụng kỹ thuật này trong xử lý ngôn ngữ tự nhiên (NLP) tại hội nghị ACL 2017. Về cơ bản, mô hình seq2seq được xây dựng dựa trên hai mạng neural truy hồi (Recurrent Neural Network) đóng vai trò là các bộ mã hóa, giải mã. Vì vậy người viết cũng mô tả khái quát về mạng neural truy hồi trong phần đầu của bài viết.

Mạng neural truy hồi

Mạng neural truy hồi (Recurrent Neural Network, viết tắt là RNN) được phát minh bởi John Hopfield năm 1982 [2]. Trong khoảng 5-6 năm gần đây, RNN được ứng dụng rộng rãi trong ngành NLP và thu được những thành tựu lớn. Mạng RNN mô hình hóa được bản chất của dữ liệu trong NLP (có đặc tính chuỗi và các thành phần như từ, cụm từ trong dữ liệu phụ thuộc lẫn nhau). Có thể nói việc áp dụng mạng RNN là một bước đột phá trong ngành NLP.

Mạng RNN nhận đầu vào là một chuỗi các vec-tơ x1, …, xn và trả ra đầu ra là một vector yn (số chiều của xi và yi không nhất thiết phải bằng nhau). Ví dụ một câu bao gồm nhiều từ, mỗi từ được biểu diễn bằng 1 vector (one-hot vec-tơ hoặc vec-tơ sinh ra bằng phương pháp word2vec). Quá trình sinh sử dụng một một đơn vị RNN, và đơn vị RNN này có bản chất là một hàm đệ quy để tính trạng thái đầu ra dựa vào trạng thái trước và đầu vào hiện tại. Mô tả toán học của mạng neural truy hồi như ở dưới đây:

yn=RNN(x(1:n);s0)

yi = 0(si)

si=R(x(i);si1)

Trong đó si là trạng thái của mạng RNN tại bước thời gian i.

Mạng RNN được minh họa như hình 1:

Hình 1. Minh họa mạng RNN, Θ là tham số của mô hình [1]

Mạng RNN được huấn luyện bằng cách duỗi thẳng (unroll) mạng RNN và áp dụng thuật toán lan truyền ngược (backpropagation) như trong thuật toán huấn luyện mạng neural truyền thẳng. Thuật toán huấn luyện mạng RNN được Werbos đưa ra năm 1990 và được đặt tên là “thuật toán lan truyền ngược theo thời gian” (backpropagation through time) [3]. Hình 2 minh họa mạng RNN khi được duỗi thẳng.

Hình 2. Minh họa mạng RNN khi duỗi thẳng, Θ là tham số của mô hình [1]

Mạng RNN đơn giản (Elman Network) có nhược điểm là kém hiệu quả trong việc xử lý những chuỗi dài do vấn đề đạo hàm bị triệt tiêu (vanishing gradients). Các cải tiến sau đó giải quyết vấn đề này dựa trên cơ chế cổng, tiêu biểu là kiến trúc Long-Short Term Memory (LSTM) [4] và Gated-Recurrent Unit (GRU) [5].

Mô hình sequence-to-sequence với kỹ thuật attention

Mô hình seq2seq cơ bản bao gồm hai mạng neural thành phần được gọi là mạng mã hóa (encoder) và mạng giải mã (decoder) để sinh ra chuỗi đầu ra t1:m từ một chuỗi đầu vào x1:n. Mạng neural encoder mã hóa chuỗi đầu vào thành một vector c có độ dài cố định. Mạng neural decoder sẽ lần lượt sinh từng từ trong chuỗi đầu ra dựa trên vector c và những từ được dự đoán trước đó cho tới khi gặp từ kết thúc câu. Trong mô hình seq2seq, chúng ta có thể sử dụng các kiến trúc mạng khác nhau cho thành phần encoder và decoder như RNN hay mạng neural convolutional. Trong bài viết này, người viết tập trung vào mô hình seq2seq sử dụng mạng RNN.

Hình vẽ 3 minh họa mô hình seq2seq trong ví dụ mô hình sinh hội thoại tự động. Mô hình trong hình vẽ sử dụng hai mạng neural LSTM cho thành phần encoder và decoder.

Hình 3. minh họa mô hình sequence-to-sequence. Nguồn ảnh: //github.com/farizrahman4u/seq2seq

Về mặt toán học, mô hình seq2seq được mô tả như sau.

Trước hết, thành phần RNN encoder sinh ra vector c với độ dài cố định từ một chuỗi các vector đầu vào: c=RNNenc(x1:n). Sau đó, thành phần RNN decoder sẽ sinh lần lượt từng từ cho chuỗi đầu ra theo mô hình sinh có điều kiện (conditional generation).

p(tj+1=k|t̂ 1:j,c)=f(0(sj+1))

sj+1=R(sj,[t̂ j;c])

t̂ j ~ p(tj|t̂ 1:j1,c)

Ở đây, tj là bước thời gian thứ j trong chuỗi output. t̂ j là giá trị dự đoán tại bước thứ j và sj là các trạng thái ẩn.

Mô hình seq2seq cơ bản có nhược điểm là yêu cầu RNN decoder sử dụng toàn bộ thông tin mã hóa từ chuỗi đầu vào cho dù chuỗi đó dài hay ngắn. Thứ hai, RNN encoder cần phải mã hóa chuỗi đầu vào thành một vec-tơ duy nhất và có độ dài cố định. Ràng buộc này không thực sự hiệu quả vì trong thực tế, việc sinh ra từ tại một bước thời gian trong chuỗi đầu ra có khi phụ thuộc nhiều hơn vào một số những thành phần nhất định trong chuỗi đầu vào. Ví dụ, khi dịch một câu từ tiếng nước này sang tiếng nước khác, chúng ta thường quan tâm nhiều hơn đến ngữ cảnh xung quanh từ hiện tại so với các từ khác trong câu. Kỹ thuật attention được đưa ra để giải quyết vấn đề đó.

Kỹ thuật attention được đưa ra lần đầu vào năm 2014 bới Bahdanau và cộng sự [6] trong công trình nghiên cứu về dịch máy. Ở mức trừu tượng, kỹ thuật attention nới lỏng điều kiện rằng toàn bộ chuỗi đầu vào được mã hóa bằng một vector duy nhất. Thay vào đó các từ trong chuỗi đầu vào sẽ được RNN encoder mã hóa thành một dãy các vector. Sau đó RNN decoder áp dụng kỹ thuật attention mềm dẻo (soft attention) bằng cách lấy tổng có trọng số của dãy các vector mã hóa. Các trọng số trong mô hình này được tính bằng một mạng neural truyền thẳng. RNN encoder, RNN decoder và các tham số trong kỹ thuật attention được huấn luyện đồng thời từ dữ liệu. Hình vẽ 4, lấy từ bài báo gốc của tác giả Bahdanau và cộng sự minh họa cho ý tưởng soft attention trong dịch máy.

Hình 4. Minh họa mô hình seq2seq dùng attention trong bài toán dịch máy

Ngoài phương pháp soft attention, kỹ thuật attention còn có một số các kiểu attention khác khác như additive attention, multiplicative attention, self-attention, key-value attention (người viết để nguyên các thuật ngữ tiếng Anh vì chưa tìm ra tên tiếng Việt tương ứng.) Chi tiết về các phương pháp này, bạn đọc có thể đọc thêm tài liệu [7].

Kỹ thuật Attention được sử dụng nhiều nhất trong các nghiên cứu về dịch máy tự động bằng mô hình mạng neural. Như người viết đã đề cập trong phần mở đầu, hệ thống dịch máy Google Translate hiện tại sử dụng kỹ thuật này trong mô hình dịch máy của họ. Ngoài ra, kỹ thuật attention cũng được áp dụng trong mô hình sinh hội thoại, trả lời câu hỏi, tóm tắt văn bản,…

Các nghiên cứu áp dụng kỹ thuật attention tại hội nghị ACL 2017

Exploiting Argument Information to Improve Event Detection via Supervised Attention Mechanisms. (Liu và cộng sự)

Mục đích của bài toán phát hiện sự kiện là xác định những từ hoặc cụm từ mang sự kiện trong câu và phân lớp sự kiện đó vào một trong những lớp được định nghĩa sẵn. Ví dụ, trong câu ví dụ dưới đây, từ mang sự kiện là fire và sự kiện được xác định là End-Position.

 Ví dụ 1: Mohamad fired Anwar, his former protégé, in 1998

Bài toán phát hiện sự kiện có thể được mô hình hóa thành bài toán phân lớp, trong đó mỗi từ trong câu sẽ được biểu diễn bằng một vec-tơ đặc trưng dựa trên các từ xung quanh từ đó. Các nghiên cứu trước về phát hiện sự kiện không tận dụng hiệu quả thông tin về đối (argument) của sự kiện. Bài báo đưa ra một cách khai thác các thông tin argument trong dữ liệu training để tăng độ chính xác của bài toán xác định sự kiện. Trong ví dụ 1, cụm từ former protégé đóng vai trò chỉ vị trí làm việc (position) và thông tin đó sẽ giúp phân lớp từ fired vào lớp sự kiện End-Position chính xác hơn (thay vì phân lớp vào sự kiện Attack). Tác giả đề xuất kỹ thuật attention trong đó dữ liệu huấn luyện cho attention được sinh ra dựa vào tập dữ liệu huấn luyện của đối số. Quá trình huấn luyện bộ phân lớp sự kiện và mô hình attention được thực hiện đồng thời.

Domain Attention with an Ensemble of Experts (Young-Bum Kim và cộng sự.)

Vấn đề quan trọng trong bài toán thích nghi miền (domain adaptation) trong một bài toán NLP là làm sao để tận dụng những miền ứng dụng có nhiều dữ liệu huấn luyện để tăng độ chính xác của hệ thống NLP trên miền ứng dụng có ít dữ liệu. Những mô hình đã huấn luyện từ dữ liệu huấn luyện của những miền ứng dụng đã có được coi là các “chuyên gia” (expert). Bài báo đưa ra phương pháp tận dụng phản hồi từ K chuyên gia trong K miền ứng dụng để tăng độ chính xác cho hệ thống NLP của domain thứ K+1 với dữ liệu huấn luyện nhỏ. Tác giả đánh giá phương pháp đưa ra trong hai bài toán cơ bản trong thành phần hiểu ngôn ngữ nói (Spoken Language Understanding) là: xác định ý định người dùng (intent classification) và trích xuất thông tin (Slot Filling).

Về cơ bản, một mô hình đơn lẻ trong một miền ứng dụng bao gồm tầng embedding (dựa trên kí tự và từ) và tầng LSTM hai chiều (BiLSTM) để sinh ra biểu diễn đặc trưng cho một câu hội thoại gồm  kí tự. Biểu diễn đặc trưng đó sẽ được sử dụng để xác định ý định người dùng và trích xuất thông tin. Hình vẽ 4 (lấy ra từ bài báo) minh họa cho mô hình trong một miền ứng dụng.

Hình 5. Minh họa một mô hình đơn lẻ cho bài toán phân loại ý định người dùng và slot filling

Phương pháp thích nghi miền được trình bày trong bài báo sử dụng kỹ thuật attention để kết hợp biểu diễn đặc trưng được sinh ra bởi K chuyên gia trong K miền ứng dụng đã có và chuyên gia trong miền ứng dụng thứ K+1 để tạo thành biểu diễn đặc trưng của một câu trong miền ứng dụng K+1. Điểm đặc sắc trong bài báo là tác giả đã giới thiệu kỹ thuật attention có chọn lọc (selective attention) trong đó thay vì tính toán vector attention của toàn bộ K chuyên gia, tác giả chỉ sử dụng K’ < K chuyên gia cho kết quả dự đoán với độ tin cậy cao nhất.

A Nested Attention Neural Hybrid Model for Grammatical Error Correction (Jianshu Ji và cộng sự)

Một trong những bước tiến trong bài toán sửa lỗi ngữ pháp là việc áp dụng mô hình dịch máy cho đơn ngôn ngữ, trong đó chúng ta sẽ “dịch” một câu sai ngữ pháp thành câu đúng ngữ pháp. Gần đây, mô hình seq2seq đang là mô hình “áp đảo” trong dịch máy nên việc áp dụng mô hình seq2seq trong bài toán sửa lỗi ngữ pháp là một cách tiếp cận khá “tự nhiên.” Tác giả Jianshu Ji và cộng sự đã áp dụng mô hình seq2seq với kỹ thuật attention cho bài toán sửa lỗi ngữ pháp. Hình vẽ 6 lấy ra từ bài báo gốc của tác giả minh họa kiến trúc của mô hình sửa lỗi ngữ pháp.

Hình 6. Minh họa mô hình seq2seq với attention lồng nhau cho bài toán sửa lỗi ngữ pháp

Một vấn đề trong dịch máy đó là làm sao để dịch những từ không nằm trong từ điển (thuật ngữ tiếng Anh là out-of-vocabulary words hay OOV words). Các từ này thường được thay bằng kí tự UNK. Một số nghiên cứu trong dịch máy kết hợp mô hình seq2seq dựa trên kĩ thuật nhúng ở mức từ (word embedding) và seq2seq dựa trên kĩ thuật nhúng ở mức kí tự (character embedding) để cải tiến việc dịch những từ OOV. Nhưng khác với dịch máy, trong bài toán sửa lỗi ngữ pháp một số từ OOV có thể được giữ nguyên hoặc chỉ bị sai một vài kí tự. Tác giả bài báo đã xử lý vấn đề này bằng hai giải pháp:

  • Đưa ra phương pháp mã hóa lai giữa vector nhúng ở mức từ (word embedding) và mức kí tự (character embedding)
  • Kỹ thuật attention lồng nhau ở bước giải mã (decoder). Trong kỹ thuật này, đầu ra của các từ OOV ở bước mã hóa sẽ được tính dựa trên tích của xác suất của từ UNK theo mô hình ở mức từ và xác suất của chuỗi kí tự theo mô hình ở mức kí tự.

 Learning attention for historical text normalization by learning to pronounce (Bollmann và cộng sự.)

Một vấn đề quan trọng khi xử lý các văn bản lịch sử là chuẩn hóa những từ ngữ trong các văn bản lịch sử về cách viết hiện đại. Tác giả áp dụng mô hình seq2seq cơ bản với LSTM encoder và LSTM decoder. Điểm mới trong bài báo là tác giả đã áp dụng kiến trúc học đa nhiệm (multi-task learning) trong mô hình seq2seq. Trong đó, bài toán chuẩn hóa văn bản lịch sử là bài toán chính, và bài toán bổ trợ (auxiliary task) là bài toán học mô hình phát âm từ chữ viết sang cách đọc (grapheme-to-phoneme). Việc học đa nhiệm trong mô hình seq2seq được thực hiện bằng cách thêm một bộ phân lớp trong tầng đầu ra của mạng. Tác giả so sánh kiến trúc học đa nhiệm với mô hình seq2seq dùng attention. Kết quả cho thấy kiến trúc học đa nhiệm cũng có thể học được cách tập trung (attend) một cách hiệu quả tương tự như kỹ thuật attention và việc kết học giữa học đa nhiệm với attention không tăng độ chính xác của hệ thống.

Lời kết

Kỹ thuật attention trong mô hình seq2seq đã và đang được áp dụng rộng rãi trong ngành NLP và cho kết quả tốt trong nhiều bài toán, đặc biệt là trong dịch máy. Tuy nhiên, kỹ thuật này không phải là một phương pháp “vạn năng” để có thể áp dụng một cách máy móc. Bài báo của Bollmann và cộng sự là một trường hợp mà việc áp dụng attention trong mô hình học đa nhiệm (multi-task learning) không có hiệu quả. Chính vì vậy, để áp dụng attention tốt, chúng ta cần hiểu rõ bản chất bài toán và áp dụng kỹ thuật attention thích hợp.

  • Yoav Goldberg. “Neural Network Methods for Natural Language Processing”. Synthesis Lectures on Human Language Technologies, 2017.
  • //en.wikipedia.org/wiki/Hopfield_network
  • Werbos, P.J. (1990). Backpropagation Through Time: What It Does and How to Do It.
  • Hochreiter, S., & Schmidhuber, J. (1997). Long Short-Term Memory. Neural computation, 9 8, 1735-80.
  • Bahdanau, D., Bougares, F., Bengio, Y., Cho, K., Gülçehre, Ç., Merrienboer, B.V., & Schwenk, H. (2014). Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation. EMNLP.
  • Bahdanau, D., Bengio, Y., & Cho, K. (2014). Neural Machine Translation by Jointly Learning to Align and Translate. CoRR, abs/1409.0473. //arxiv.org/abs/1409.0473.
  • Sebastian Ruder. Deep Learning for NLP Best Practices. //ruder.io/deep-learning-nlp-best-practices/index.html.

Phạm Quang Nhật Minh – Ban công nghệ tập đoàn FPT (FTI)

Video liên quan

Chủ đề