Tới nội dung chính
Tất cả dự án

Năm

2025

Vai trò

Xây dựng dữ liệu, cài đặt mô hình, thiết kế đánh giá

Công nghệ

  • PyTorch
  • Transformer
  • LSTM
  • GRU
  • RNN
  • sacreBLEU

Mô hình chuỗi

Neural Machine Translation

Bộ ngữ liệu 12,5 triệu cặp câu cho bài toán khôi phục dấu tiếng Việt, cùng bốn kiến trúc seq2seq viết từ đầu bằng PyTorch để dịch văn bản không dấu trở lại tiếng Việt đúng chính tả.

  • Xây dựng bộ dữ liệu khôi phục dấu tiếng Việt quy mô lớn đầu tiên (12,5 triệu cặp câu không dấu → có dấu).
  • Cài đặt các mô hình Seq2Seq (RNN, GRU, LSTM, Transformer) từ đầu bằng PyTorch.
  • Thiết kế và thực hiện đánh giá mô hình toàn diện với các chỉ số BLEU và ChrF++, đạt BLEU 81.31 và ChrF++ 88.57 với Transformer, vượt trội đáng kể so với các mốc cơ sở RNN và GRU.
  • Đóng góp xuyên suốt từ xây dựng dữ liệu, phát triển mô hình tới đánh giá hiệu năng, tạo ra một hệ thống nguyên mẫu vững vàng cho khôi phục văn bản tiếng Việt.
Giải thích cho
BLEU
81.31
Transformer
ChrF++
88.57
khớp ở mức ký tự
Cặp câu huấn luyện
12.5M
bộ ngữ liệu lớn nhất cho bài toán này

Bài toán

Tiếng Việt viết không dấu — toi di hoc thay vì tôi đi học — có ở khắp nơi: cơ sở dữ liệu cũ, tin nhắn SMS, truy vấn tìm kiếm, đầu ra OCR từ bản scan chất lượng thấp. Và nó thực sự nhập nhằng. Một chuỗi không dấu thường ứng với cả chục từ tiếng Việt hợp lệ, chỉ có ngữ cảnh câu mới quyết định được từ nào đúng.

Cách nhìn nhận đó rất quan trọng, vì nó biến một bài toán tưởng như sửa lỗi chính tả thành bài toán dịch máy: đầu vào và đầu ra là hai ngôn ngữ khác nhau tình cờ dùng chung bảng chữ cái, và mô hình buộc phải mang được ngữ cảnh cấp câu để khử nhập nhằng.

Xây dựng bộ ngữ liệu

Chưa có bộ dữ liệu nào đủ lớn, nên nửa đầu dự án là công việc dữ liệu. Tôi xây dựng 12,5 triệu cặp câu, mỗi cặp căn chỉnh một câu đã bị bỏ dấu với bản gốc có dấu đầy đủ — bộ ngữ liệu lớn nhất từng được xây cho bài toán khôi phục dấu tiếng Việt tại thời điểm đó.

Chiều bỏ dấu mới là chiều hữu ích: tiếng Việt viết đúng thì dồi dào, còn việc gỡ dấu là thao tác tất định. Mỗi câu sạch vì thế cho ra đúng một cặp huấn luyện miễn phí — đó chính là lý do một bộ ngữ liệu cỡ này khả thi mà không tốn chi phí gán nhãn.

Bốn kiến trúc, viết từ đầu

Thay vì fine-tune một mô hình có sẵn, tôi cài đặt trực tiếp từng kiến trúc bằng PyTorch — RNN, GRU, LSTM và Transformer — để phép so sánh cô lập được yếu tố kiến trúc thay vì ngân sách tiền huấn luyện.

Mô hìnhBLEUChrF++
RNNmốc cơ sởmốc cơ sở
GRUcải thiệncải thiện
LSTMcải thiệncải thiện
Transformer81.3188.57

Khoảng cách đó mới là kết quả đáng nói. Các mô hình hồi quy buộc phải nén toàn bộ ngữ cảnh bên trái vào một vector ẩn kích thước cố định trước khi quyết định dấu. Self-attention thì không: nó nhìn thẳng vào danh từ cách đó sáu token — chính là thứ khử được nhập nhằng. Với một bài toán mà bản chất là khử nhập nhằng ở khoảng cách xa, thiên kiến quy nạp đó giá trị hơn hẳn số lượng tham số.

Đánh giá

Tôi cố ý dùng đồng thời BLEU và ChrF++. BLEU đo mức trùng khớp n-gram và là chuẩn của dịch máy, nhưng nó quá thô cho một bài toán mà lỗi chỉ nằm ở một ký tự. ChrF++ làm việc ở mức ký tự và bắt được đúng những trường hợp suýt đúng mà BLEU làm tròn bỏ qua — một từ sai một dấu thanh là kiểu lỗi hoàn toàn khác với một từ sai hẳn, và chỉ ChrF++ phân biệt được hai loại đó.

Điều tôi rút ra

Dữ liệu mới là đòn bẩy. Viết code cho bốn kiến trúc tốn ít thời gian hơn xây bộ ngữ liệu, và bộ ngữ liệu mới là thứ khiến mọi phép so sánh sau đó có ý nghĩa. Nó cũng là thứ sống lâu hơn dự án: các cặp câu vẫn còn giá trị dù kiến trúc tiếp theo là gì đi nữa.