Sequence to Sequence Model (Seq2seq) là một mô hình Deep Learning với mục đích tạo ra một output sequence từ một input sequence mà độ dài của 2 sequences này có thể khác nhau. Seq2seq được giới thiệu bởi nhóm nghiên cứu của Google vào năm 2014 trong bài báo Sequence to Sequence with Neural Networks. Mặc dù mục đích ban đầu của Model này là để áp dụng trong Machine Translation, tuy nhiên hiện nay Seq2seq cũng được áp dụng nhiều trong các hệ thống khác như Speech recognition, Text summarization, Image captioning,…

Seq2seq gồm 2 phần chính là Encoder và Decoder. Cả hai thành phần này đều được hình thành từ các mạng Neural Networks, trong đó Encoder có nhiệm vụ chuyển đổi dữ liệu đầu vào (input sequence) thành một representation với lower dimension còn Decoder có nhiệm vụ tạo ra output sequence từ representation của input sequence được tạo ra ở phần Encoder.

Sequence to Sequence Model in Machine Translation [1]

Tùy từng bài toán cụ thể mà Encoder và Decoder sử dụng các kỹ thuật Deep Learning khác nhau. Ví dụ như trong Machine Translation thì Encoder thường là LSTM, GRU hoặc Bi-directional RNN, còn trong Image Captioning thì Encoder lại là CNN.

Trong bài này, chúng ta sẽ lấy ví dụ minh họa là việc sử dụng Seq2seq trong Machine Translation. Tương tự như đã trình bày trong bài tutorial Xây dựng mô hình Text generation với RNN hoặc Phân loại bài viết với CNN, từ dữ liệu đầu vào là một sequence dưới dạng text, chúng ta sử dụng Embedding Layer để chuyển các từ này sang dạng Word Embedding rồi sử dụng RNN (thường là Bi-directional RNN) để tạo ra một representation của input sequence (trong hình trên là s).

Decoder cũng được tạo thành từ RNN và sử dụng output của Encoder làm dữ liệu đầu vào để tạo ra một output sequence. Tuy nhiên khác với Language Modeling (xem thêm tại bài tutorial Xây dựng mô hình Text generation với RNN), trong Machine Translation chúng ta phải chọn câu văn phù hợp nhất thay vì để RNN cell tạo ra từng từ một. Thông thường việc lựa chọn output sequence được thực hiện bởi các Search Algorithms với hai phương pháp chính sau:

– Greedy search : chọn từ có xác xuất cao nhất làm output của từng Cell. Ưu điểm của phương pháp này là có tốc độ nhanh, nhưng thường sẽ không tạo ra câu văn hợp lý nhất.

– Beam search: tại mỗi Decoding step, chúng ta chọn n-words (beam width) với xác xuất cao nhất. Ví dụ khi chúng ta chọn beam_width=3 thì tại mỗi Decoding step, ta sẽ giữ lại 3 từ có xác xuất cao nhất rồi lấy từng từ một làm đầu vào cho Decoding step tiếp theo. Cứ như thế lặp lại cho đến khi ta gặp <EOS> đánh dấu việc kết thúc câu (xem thêm tại đây).

Lưu ý:

– Chúng ta có thể coi Greedy search là một trường hợp của Beam search với việc sử dụng beam_width=1

– Khi tính toán xác xuất của output sequence trong Beam search, chúng ta sử dụng Log và tính trung bình cộng của các giá trị Log này. Điều này giúp giải quyết vấn đề gặp phải khi nhân nhiều giá trị xác xuất (thường là các số rất nhỏ) với nhau. Vì khi đó sẽ tạo ra số nhỏ đến mức mà Máy tính không thể phân biệt được.

– Khác với Breadth First Search và Depth First Search, Beam search không bảo đảm sẽ tìm được kết quả tốt nhất . Ngoài ra, khi giá trị beam_width càng lớn thì ta sẽ được kết quả với độ chính xác càng cao. Tuy nhiên, khi đó chúng ta sẽ tốn nhiều thời gian và tài nguyên để xử lý hơn.

Như vậy, chúng ta đã cùng tìm hiểu về mô hình hoạt động của Sequence to Sequence Model và lấy ví dụ minh họa về việc áp dụng Model này trong Machine Translation. Ở bài tutorial tiếp theo, chúng ta sẽ cùng tìm hiểu về Attention Mechanism – một kỹ thuật thường được dùng trong Sequence to Sequence Model để tăng độ chính xác của hệ thống khi xử lý input sequence có độ dài lớn.

 

[1] https://smerity.com/articles/2016/google_nmt_arch.html

Tháng Tư 8, 2019
ITechSeeker