GIỚI THIỆU
Giới thiệu đề tài
Ngày nay, tính năng phát hiện và sửa lỗi chính tả có mặt trong hầu hết các ứng dụng liên quan đến văn bản, từ máy tính cho đến các thiết bị di động Khi nhập một từ không chính xác, hệ thống sẽ phát hiện lỗi, có thể đó là lỗi chính tả hoặc từ không phù hợp ngữ cảnh Sau đó, hệ thống tự động sửa bằng một từ khác hoặc đề xuất một danh sách các từ có thể thay thế
Bài toán phát hiện và sữa lổi chính tả trước đây đã có nhiều đề xuất giải quyết bằng các phương pháp dựa vào bản chất ngôn ngữ Tuy nhiên, do sự phức tạp của ngôn ngữ tự nhiên, sự nhập nhằng nghĩa của từ và cụm từ, sự phụ thuộc cú pháp và ngữ nghĩa của các từ vào ngữ cảnh, nên các phương pháp nêu trên còn hạn chế về tính chính xác Đối với tiếng Việt lỗi chính tả càng phức tạp hơn do cách đọc một số chữ, âm tiết gần giống nhau, ví dụ sai dấu, chữ x hay s, ch hay tr, l hay n Ngôn ngữ nói ở các vùng miền khác nhau làm phát sinh nhiều lỗi chính tả trong văn viết Bảng 1.1 cho thấy sự đa dạng các loại lỗi khác nhau trong tiếng Việt về từ vựng Do đó cần phải có một mô hình phát hiện và sửa lỗi chính tả tốt hơn các phương pháp dựa trên ngôn ngữ
Bảng 1.1: Một số lỗi chính tả tiếng Việt [34]
Lỗi trùng ký tự chuung chung
Lỗi do dùng kiểu gõ VNI chu7ng chúng
Bỏ dấu không đúng chỗ qũy quỹ
Thêm ký tự kông không
LỖI CHÍNH TẢ Giọng Bắc
Bắt đầu với ch/tr chăn chối trăn trối Bắt đầu với x/s năng xuất năng suất Bắt đầu với gi/d giang giở dang dở
Bắt đầu với d/gi/v dang danh vang danh Bắt đầu với qu/h/u quy quyền uy quyền
Phụ âm cuối c/t hờn mác hờn mát
Phụ âm cuối n/ng khốn cùn khốn cùng Phụ âm cuối i/y trình bài trình bày
Vần uo/u buồi nguồi bùi ngùi
Vần iê/uyê tiệt tình tuyệt tình
Vần iê/i đương kiêm đương kim
Dấu hỏi/ngã vui vẽ vui vẻ
Vần ă/â chăm bẳm châm bẩm
Các phương pháp truyền thống dùng các bộ phân lớp (Text Classifiers) để sinh ra câu đúng từ câu sai chính tả, ví dụ mô hình n-gram [16] hoặc mô hình Conditional Random Fields (CRF) [2] Việc sử dụng phương pháp dịch máy dựa trên thống kê (Statistical Machine Translation - SMT) cũng mang lại kết quả khả quan do ngày càng nhiều các kho ngữ liệu (corpus) được gán nhãn thủ công có chất lượng Tuy nhiên, nhược điểm lớn của các phương pháp trên là khó giải quyết vấn đề khi từ không có trong từ điển (out of the vocabulary - OOV) do mô hình ngôn ngữ chưa linh hoạt ở các mức độ chi tiết khác nhau, ví dụ mức ký tự và từ
Hiện nay mạng nơron nhân tạo (ANN) [17] được ứng dụng rất nhiều trong xử lý ngôn ngữ tự nhiên, bởi nó cho kết quả khá tốt, đặc biệt là lớp bài toán ánh xạ các cặp "câu" (sequences), ví dụ dịch máy (ánh xạ một câu từ ngôn ngữ này sang ngôn ngữ khác) hay sữa lỗi chính tả (ánh xạ từ câu sai chính tả sang câu đúng) , do ANN có khả năng biểu diễn các đặc trưng của dữ liệu và tận dụng thông tin ngữ cảnh tốt hơn các phương pháp đã nêu Đối với mạng rơ ron truyền thẳng đơn giãn (Multi-Layer Perceptron- MLP), tất cả đầu vào và đầu ra là độc lập với nhau Tức là chúng không liên kết thành chuỗi với nhau, vì thế không phù hợp trong nhiều bài toán xử lý ngôn ngữ tự nhiên Ví dụ, nếu muốn dự đoán từ tiếp theo có thể xuất hiện trong câu thì ta
3 cũng cần phải biết các từ trước đó xuất hiện lần lượt thế nào Mạng nơ ron hồi quy (Recurrent Neural Network - RNN)[8] ra đời để khắc phục hạn chế đó Ý tưởng chính của RNN là sử dụng chuỗi các thông tin liên kết tuần tự với nhau Chúng thực hiện cùng một tác vụ cho tất cả các phần tử của một chuỗi với đầu ra phụ thuộc vào các phép tính trước đó Nói cách khác, RNN có khả năng nhớ các thông tin đã xử lý
Trong lĩnh vực xử lý ngôn ngữ tự nhiên (Natural Language Processing- NLP), đã ghi nhận được nhiều thành công của RNN khi xử lý nhiều vấn đề khác nhau, trong đó mô hình phổ biến nhất được sử dụng của RNN là LSTM (Long Short-Term Memory) [12], nó thể hiện được sự ưu việt ở điểm có thể nhớ được nhiều bước hơn mô hình RNN truyền thố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 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 [23] 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 đặc biệt 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
Chúng ta biết rằng RNN là lớp mô hình tốt trong dịch máy vì ghi nhận được sự phụ thuộc thời gian của các từ trong câu Tuy nhiên các nghiên cứu mới về kiến trúc Transformer[37] và mô hình BERT[39] đã chỉ ra rằng chỉ với cơ chế attention mà không cần đến RNN đã có thể cải thiện được kết quả của các tác vụ dịch máy và nhiều tác vụ khác
Từ những vấn đề nêu trên, chúng tôi chọn đề tài: “Bắt lỗi chính tả bằng phương pháp Transformer” để làm luận văn tốt nghiệp, nhằm áp dụng kỹ thuật dịch máy vào bài toán bắt lỗi chính tả (dịch từ câu sai chính tả sang câu đúng chính tả) và phát triển để ứng dụng thử nghiệm cho tiếng Việt
Mục tiêu của đề tài
Trên cơ sở những thành công của các công trình nghiên cứu, áp dụng kỹ thuật mạng nơ-ron vào xử lý ngôn ngữ tự nhiên (Natural Language Processing
- NLP), luận văn nghiên cứu đề xuất mô hình học sâu ứng dụng cho phát hiện và sửa lỗi chính tả Luận văn tập trung vào nghiên cứu các mô hình Sequence- to-Sequence kết hợp kỹ thuật Attention để giải quyết bài toán trên, nhằm áp dụng và phát triển để ứng dụng thử nghiệm cho tiếng Việt.
Ý nghĩa của đề tài
Bài toán phát hiện và sữa lỗi chính đã được nghiên cứu, áp dụng nhiều kỹ thuật cho tiếng Anh và bắt đầu có những nghiên cứu áp dụng các kỹ thuật này cho tiếng Hán Tuy nhiên, đối với tiếng Việt thì gặp nhiều thách thức hơn vì lỗi chính tả trong tiếng Việt rất phức tạp do đặc trưng là tiếng đơn âm, có thanh điệu và ngôn ngữ vùng miền cũng khác nhau cho nên kỹ thuật xử lý sẽ phức tạp hơn so với tiếng Anh Hiện nay tuy đã có các kho ngữ liệu tiếng Việt được chuẩn hóa và công bố Nhưng theo hiểu biết của tác giả cho đến nay chưa có kho ngữ liệu phục vụ cho bắt lỗi chính tả tiếng Việt Vì vậy, việc nghiên cứu của đề tài mang lại ý nghĩa thực tiễn và khoa học
1.3.1 Ý nghĩa thực tiễn Đề cương luận văn đề xuất được một số giải pháp ứng dụng mô hình học sâu Sequence-to-Sequence kết hợp kỹ thuật Attention có thể áp dụng trong thực tiễn để giải quyết bài toán phát hiện và sửa lỗi chính tả, phát triển để ứng dụng thử nghiệm cho tiếng Việt
Luận văn đóng góp phương pháp bắt lỗi chính tả sử dụng mô hình
Sequence-to-Sequence kết hợp kỹ thuật Attention cho vấn đề bắt lổi chính tả tiếng Việt Ngoài ra luận văn cũng đề xuất các giải thuật, phương pháp thu thập và tiền xử lý dữ liệu văn bản tiếng Việt có lỗi chính tả làm cơ sở cho các nghiên cứu bắt lỗi chính tả cho tiếng Việt trong tương lai
Phạm vi của đề tài
Trong khuôn khổ của luận văn, tác giả giới hạn nghiên cứu phương pháp phát hiện và sửa các loại lỗi chính tả cơ bản trong tiếng Việt theo hướng học sâu (Deep Learning-DL) sử dụng mô hình Sequence-to-Sequence kết hợp kỹ thuật Attention Dữ liệu huấn luyện và kiểm tra cho mô hình được tự động sinh ra từ văn bản đúng chính tả Đầu vào hệ thống là văn bản tiếng Việt chuẩn unicode có thể sai chính tả ở nhiều vị trí, đầu ra là văn bản đúng chính tả hoặc danh sách các câu đúng chính tả đề xuất.
Bố cục luận văn
Luận văn có 5 chương Chương 1 giới thiệu khái quát về đề tài Chương
2 giới thiệu các công trình nghiên cứu liên quan, các hướng giải quyết cho bài toán phát hiện và sửa lỗi chính tả Chương 3 cung cấp một số cơ sở lý thuyết đặt nền móng cho các mô hình được đề xuất trong chương 4 Chương 5 là các kết quả thực nghiệm các chỉ tiêu đánh giá, kết quả đánh giá của các phương pháp và phân tích, nhận xét các kết quả đó Cuối cùng là phần kết luận về luận văn và trình bày hướng phát triển trong tương lai
CÔNG TRÌNH LIÊN QUAN
Phương pháp phát hiện lỗi chính tả
Trong hầu hết các hệ thống, trước khi thực hiện bất kỳ thao tác tự động sửa lỗi hay đề xuất từ thay thế đều thực hiện bước trích xuất các từ có khả năng không chính xác của chuổi đầu vào Hai kỹ thuật phổ biến được dùng để phát hiện lỗi chính tả trong văn bản là tra cứu từ điển và phân tích n-gram
2.1.1 Phương pháp tra cứu từ điển
Tra cứu từ điển là một trong những kỹ thuật cơ bản được sử dụng để so sánh các chuỗi đầu vào với các mục trong kho ngữ liệu Từ điển phải chứa tất cả các biến thể của các từ và cần được cập nhật thường xuyên Nếu không tìm thấy một từ trong từ điển, sẽ được hiểu từ đó có khả năng bị lỗi chính tả Thách thức của phương pháp này là cần phải giảm kích thước lưu trữ và cải thiện hiệu suất tìm kiếm, bằng cách phân tích hình thái và thuật toán khớp mẫu (ví dụ: băm, cây tìm kiếm )
2.1.2 Phương pháp phân tích n-gram
N-gram là mô hình thống kê P(w1w2…wm), cho phép ước lượng xác suất cho một chuỗi m phần tử (ký tự hoặc từ) cho phép dự đoán khả năng một chuỗi từ xuất hiện trong ngôn ngữ đó
Theo công thức xác suất có điều kiện: P(AB) = P(B|A) * P(A), thì ta dễ dàng suy ra được
Theo công thức này thì bài toán tính xác suất của mỗi chuỗi từ quy về bài toán tính xác suất của một từ với điều kiện biết các từ trước nó Trong thực tế, dựa vào giả thuyết Markov người ta chỉ tính xác suất của một từ dựa vào nhiều
7 nhất N từ xuất hiện liền trước nó, và thông thường N=1,2,3,4 Vì vậy phương pháp này có tên gọi mô hình N-gram, trong đó N là số lượng phần tử (bao gồm cả phần tử cần tính và các phần tử liền trước)
Theo công thức Bayes, mô hình ngôn ngữ cần phải có một lượng bộ nhớ vô cùng lớn để có thể lưu hết xác suất của tất cả các chuỗi độ dài nhỏ hơn m
Rõ ràng, điều này là không thể khi m là độ dài của các văn bản ngôn ngữ tự nhiên (m có thể tiến tới vô cùng) Để có thể tính được xác suất của văn bản với lượng bộ nhớ chấp nhận được, ta sử dụng xấp xỉ Markov bậc n:
P(wm|w1 ,w2 ,…, wm-1) = P(wm |wm-n ,wm-n+1, …,wm-1) Nghĩa là xác suất xuất hiện của một từ wm được coi như chỉ phụ thuộc vào n từ đứng liền trước nó chứ không xét toàn bộ dãy từ đứng trước Như vậy, công thức tính xác suất văn bản được tính lại theo công thức:
Cách tính xác xuất đơn giãn nhất là ước lượng xác suất cực đại (Maximum Likelihood Estimation - MLE), được tính theo công thức sau
𝐶(𝑤 $%'(! 𝑤 $%! ) Trong đó C(w i-n+1 w i-1 w i ) là tần số xuất hiện của cụm w i-n+1 w i-1 w i trong tập văn bản huấn luyện Đối với nhiệm vụ phát hiện lỗi, phân tích n-gram ước tính khả năng câu đầu vào được viết đúng chính tả hay không Để thực hiện điều này, một thống kê n-gram được tính toán trước từ kho ngữ liệu phụ vụ cho tác vụ so sánh sau này Giá trị của n được chọn phụ thuộc vào kích thước của tập huấn luyện.
Phương pháp sửa lỗi chính tả
Tác vụ sửa lổi chính tả có thể định nghĩa là quá trình hiệu chỉnh chuổi N phần tử S=s1 sN thành chuổi M phần tử T=t1 tM Như vậy, bất kỳ hệ thống sửa lỗi chính tả nào cũng có thể xem như hàm MC như sau: 𝑇+ = 𝑀𝐶(𝑆), nó trả về một chuổi dự đoán 𝑇+ tương ứng với chuổi đầu vào S Do đó, ta có thể coi sửa lỗi chính tả là tương đương với dịch máy đơn ngôn ngữ (dịch từ văn bản sai chính tả sang văn bản đúng chính tả) Sau đây chúng ta xem xét tổng quan một
8 số phương pháp sửa lỗi chính tả và phương phương pháp dịch máy dựa trên mạng nơ-ron có thể áp dụng cho tác vụ sửa lổi chính tả
2.2.1 Khoảng cách chỉnh sửa tối thiểu (Minimum edit distance)
Khoảng cách chỉnh sửa tối thiểu là một trong những kỹ thuật được nghiên cứu nhiều nhất để sửa lỗi Nó dựa trên việc đếm các thao tác chỉnh sửa (như chèn, xóa, thay thế và hoán vị) để chuyển đổi chuổi đầu vào không chính xác thành chuổi tối ưu nhất, tức là có khoảng cách chỉnh sửa ít nhất Hamming[28], Jaro, Winkler[35], Wagner, Fischer[29], Damerau-Levenshtein[11] và Levenshtein [33] là những thuật toán khoảng cách chỉnh sửa nổi tiếng nhất
2.2.2 Khóa tương tự (Similarity key technique)
Kỹ thuật khóa tương tự là một kỹ thuật khác để sửa lỗi, dựa trên việc phân loại các ký tự thành các nhóm có các khóa giống nhau Khi một từ được phát hiện là có khả năng không chính xác, các ký tự của nó được ánh xạ vào các khóa được định sẵn để tất cả các từ khác trong tài nguyên ngôn ngữ có cùng khóa được đề xuất làm ứng viên sửa lỗi Các ứng cử viên sau đó được xếp hạng theo khoảng cách chỉnh sửa tối thiểu
Các thuật toán khác nhau đề xuất cách phân loại các nhóm khóa khác nhau cho các ký tự Tuy nhiên, nhìn chung đều dựa trên vị trí và thứ tự của các ký tự trong các từ Soundex[20], Metaphone[19], SPEEDCOP[15] và Caverphone [5] là những phương pháp phổ biến sử dụng kỹ thuật khóa tương tự
2.2.3 Kỹ thuật dựa trên luật (Rule-based techniques)
Bằng cách phân tích các lỗi chính tả phổ biến nhất, một số nhà nghiên cứu đã cố gắng tạo ra một cơ sở kiến thức về lỗi cho nhiệm vụ sửa lỗi [10, 21, 32] bằng cách sử dụng các mô hình dựa trên quy tắc mã hóa kiến thức ngữ pháp Các quy tắc này thường dựa trên các đặc điểm hình thái của ngôn ngữ
2.2.4 Phương pháp xác suất (Probabilistic Techniques)
Các phương pháp tiếp cận dựa trên mô hình xác suất thống kê được sử dụng cho các tác vụ dịch máy và sửa lỗi [3], sử dụng mô hình ngôn ngữ xác suất trên chuỗi các ký hiệu, ví dụ: ký tự và từ, mà đầu ra mong muốn có xác suất cao nhất theo các tham số 𝜃 cụ thể của mô hình
Do đó, ta có: 𝑇+ = 𝑎𝑟𝑔𝑚𝑎𝑥 𝑃(𝑇|𝑆; 𝜃), gọi là phương trình cơ bản của dịch máy (Fundamental Equation of Machine Translation)[27]
Có nhiều hướng tiếp cận khác nhau để xây dựng mô hình xác suất Một phương pháp phổ biến là mô hình ngôn ngữ log-linear [30], tính toán xác suất bằng cách tạo một vectơ đặc trưng, thể hiện ngữ cảnh bằng các đặc trưng khác nhau và sau đó tính toán một vectơ điểm tương ứng với khả năng của từng ký hiệu Hơn nữa, các mạng xác suất phức tạp hơn cũng đã được giới thiệu [3, 7] để thực hiện mô hình xác suất Ví dụ, mô hình Markov ẩn (hidden Markov model - HMM) đã thể hiện khả năng có thể mô hình hóa ngôn ngữ của con người [4] Tuy nhiên, vì các HMM giả định rằng các trạng thái chỉ phụ thuộc duy nhất vào trạng thái trước nó nên chúng không thích hợp để mô hình hóa các phụ thuộc xa Hiện nay các kỹ thuật dựa trên học sâu sử dụng mạng nơ-ron, ví dụ RNN [1] đã khắc phục được hạn chế này
2.2.5 Phương pháp dựa trên học sâu (Deep Learning)
Mạng nơ-ron nhân tạo cũng dựa trên phân phối xác suất của ngôn ngữ và chúng đã cho thấy thành công gần đây trong các ứng dụng khác nhau về xử lý ngôn ngữ tự nhiên Trong phạm vi đề tài này tác giả tập trung nghiên cứu các kỹ thuật dịch máy dựa trên mạng nơ-ron, trong đó nổi bật là mô hình Sequence to Sequence (Seq2seq)[14] là một mô hình Deep Learning với mục đích tạo ra một chuỗi từ xuất ra (output sequence) từ một chuỗi từ nhập (input sequence) mà độ dài của hai chuỗi (sequences) này có thể khác nhau
Seq2seq gồm hai phần chính là mã hóa (Encoder) và giải mã (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ụ tính toán vector đại diện cho câu đầu vào và bộ giải mã lần lượt tạo ra từng từ của câu mục tiêu dựa vào véc-tơ đã tạo ở Encoder
10 Nhiều nghiên cứu gần đây đã đề xuất các kiến trúc khác nhau cho bộ Encoder và Decoder Ví dụ Kalchbrenner và Blunom [24] đã sử dụng RNN cho decoder và mạng nơ ron tích chập (CNN) cho encoder Trong khi, Sutskever và cộng sự [14], Lương và cộng sự [23] lại sử dụng mạng bộ nhớ dài-ngắn (Long Short-Term Memory - LSTM) cho cả encoder và decoder Còn Cho và cộng sự [18], Bahdanau và cộng sự [9], Jean và cộng sự [31] đều sử dụng kiến trúc GRU (Gated Recurrent Unit) cho cả encoder và decoder
Hình 2.1 minh họa mô hình Sequence to sequence, đầu vào là chuổi x (x1,x2, xT), trong Encoder véc-tơ đơn vị ẩn cuối cùng hT được dùng để tính vector ngữ cảnh c, ví dụ Encoder sử dụng LSTM và hàm tanh được tính như sau: h t = LSTM(x t , h t-1 ), c = tanh(h T ), trong đó ht là giá trị đơn vị ẩn ở thời điềm t Vector c lại được truyền tiếp cho Decoder làm đầu vào, tại đây hàm softmax được sử dụng để chuẩn hóa phân phối xác suất cho đầu ra ot Sau đó, đầu ra softmax cũng sẽ được sử dụng để tính toán hàm lỗi
Hình 2.1: Mô hình Sequence to Sequence
Mô hình seq2seq cơ bản có nhược điểm là yêu cầu 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 và Encoder mã hóa chuỗi đầu vào thành một vec-tơ duy nhất và có độ dài cố định Điều 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
11 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 đề này
Kỹ thuật attention được trình bày lần đầu vào năm 2014 bởi Bahdanau và cộng sự [9] 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 Encoder mã hóa thành một dãy các vector Sau đó 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 Encoder, 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 2.2, 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 2.2: Minh họa mô hình seq2seq dùng kỹ thuật attention[9]
Một nghiên cứu gần đây của Vaswani và công sự đã đề xuất kiến trúc Transformer[37], chỉ sử dụng các các lớp multi-headed self-attention thay thế các lớp RNN nhưng cải thiện vượt trội so với các phương pháp dựa trên học sâu trước đó trong tác vụ dịch máy Tuy nhiên sự thiếu hụt dữ liệu huấn luyện là một trong những thách thức lớn nhất trong lĩnh vực xử lý ngôn ngữ tự nhiên Đây là một lĩnh vực rộng lớn và đa dạng với nhiều nhiệm vụ riêng biệt, hầu hết
12 các tập dữ liệu đều chỉ đặc thù cho từng nhiệm vụ Để thực hiện được tốt những nhiệm vụ này ta cần những bộ dữ liệu lớn chứa hàng triệu thậm chí hàng tỉ ví dụ mẫu Tuy nhiên, trong thực tế hầu hết các tập dữ liệu hiện nay chỉ chứa vài nghìn hoặc vài trăm nghìn mẫu được đánh nhãn bằng tay bởi con người Sự thiếu hụt dữ liệu có nhãn chất lượng cao để huấn luyện cho mô hình gây cản trở lớn cho sự phát triển của lĩnh vực xử lý ngôn ngữ tự nhiên nói chung
CƠ SỞ LÝ THUYẾT
Mã hóa BPE (Byte Pair Encoding)
Toknenize là quá trình mã hóa các văn bản thành các index dạng số mang thông tin của văn bản để cho máy tính có thể huấn luyện được Khi đó mỗi một từ hoặc ký tự sẽ được đại diện bởi một index
Trong NLP (Natural Language Processing) có một số kiểu tokenize như sau:
Tokenize theo word level: phân tách câu thành các token được ngăn cách bởi khoảng trắng hoặc dấu câu Khi đó mỗi token là một từ đơn âm tiết Đây là phương pháp token được sử dụng trong các thuật toán nhúng từ truyền thống như GloVe, word2vec
Tokenize theo multi-word level: Tiếng Việt và một số ngôn ngữ khác tồn tại từ đơn âm tiết (từ đơn) và từ đa âm tiết (từ ghép) Do đó nếu token theo từ đơn âm tiết sẽ làm nghĩa của từ bị sai khác Ví dụ cụm từ “vô xác định” nếu được chia thành “vô”, “xác” và “định” sẽ làm cho từ bị mất đi nghĩa phủ định của nó Do đó để tạo ra được các từ với nghĩa chính xác thì chúng ta sẽ sử dụng thêm từ điển bao gồm cả từ đa âm tiết và đơn âm để tokenize câu Trong tiếng Việt có khá nhiều các mô hình hỗ trợ tokenize dựa trên từ điển như VnCoreNLP, pyvivn, underthesea
Tokenize theo character level: tokenize theo word level thường sinh ra một từ điển với kích thước rất lớn làm tăng chi phí tính toán Hơn nữa nếu tokenize theo word level thì đòi hỏi từ điển phải rất lớn thì mới hạn chế được những trường hợp từ nằm ngoài từ điển Tuy nhiên nếu phân tích ta sẽ thấy hầu hết các từ đều có thể biểu thị dưới một nhóm các ký tự là chữ cái, con số, dấu xác định Như vậy chỉ cần sử dụng một lượng các ký tự rất nhỏ có thể biểu diễn được mọi từ Từ được token dựa trên mức ký tự sẽ có tác dụng giảm kích thước
14 từ điển mà vẫn biểu diễn được các trường hợp từ nằm ngoài từ điển Đây là phương pháp được áp dụng trong mô hình fasttext
Phương pháp mới BPE (SOTA): Nhược điểm của phương pháp tokenize theo character level đó là các token không có ý nghĩa nếu đứng độc lập Do đó đối với các bài toán sentiment analysis, áp dụng tokenize theo character level sẽ mang lại kết quả kém hơn Token theo word level cũng tồn tại hạn chế đó vì không giải quyết được các trường hợp từ ngằm ngoài từ điển
Phương pháp BPE [36] có khả năng tách từ theo level nhỏ hơn từ và lớn hơn ký tự được gọi là subword Theo phương pháp mới này, hầu hết các từ đều có thể biểu diễn bởi subword và chúng ta sẽ hạn chế được một số lượng đáng kể các token đại diện cho từ chưa từng xuất hiện trước đó Rất nhanh chóng, phương pháp mới này đã được áp dụng ở hầu hết trong các phương pháp NLP hiện đại từ các lớp mô hình BERT[39] cho tới các biến thể của nó như OpenAI GPT, RoBERTa, DistilBERT, XLMNet Kết quả áp dụng tokenize theo phương pháp mới đã cải thiện được độ chính xác trên nhiều tác vụ dịch máy, phân loại văn bản, dự báo câu tiếp theo, hỏi đáp, dự báo mối quan hệ văn bản
Thuật toán BPE: Nguyên lý hoạt động của BPE dựa trên phân tích trực quan rằng hầu hết các từ đều có thể phân tích thành các thành phần con
Chẳng hạn như từ: low, lower, lowest đều là hợp thành bởi low và những đuôi phụ er, est Những đuôi này rất thường xuyên xuất hiện ở các từ Như vậy khi biểu diễn từ lower chúng ta có thể mã hóa chúng thành hai thành phần từ phụ (sub-words) tách biệt là low và er Theo cách biểu diễn này sẽ không phát sinh thêm một index mới cho từ lower và đồng thời tìm được mối liên hệ giữa lower, lowest và low nhờ có chung thành phần từ phụ là low
Phương pháp BPE sẽ thống kê tần suất xuất hiện của các từ phụ cùng nhau và tìm cách gộp chúng lại nếu tần suất xuất hiện của chúng là lớn nhất Cứ tiếp tục quá trình gộp từ phụ cho tới khi không tồn tại các subword để gộp nữa, ta sẽ thu được tập subwords cho toàn bộ bộ văn bản mà mọi từ đều có thể biểu diễn được thông qua subwords
15 Quá trình này gồm các bước như sau:
• Bước 1: Khởi tạo từ điển (vocabulary)
• Bước 2: Biểu diễn mỗi từ trong bộ văn bản bằng kết hợp của các ký tự với token ở cuối cùng đánh dấu kết thúc một từ
• Bước 3: Thống kê tần suất xuất hiện theo cặp của toàn bộ token trong từ điển
• Bước 4: Gộp các cặp có tần suất xuất hiện lớn nhất để tạo thành một n-gram theo level character mới cho từ điển
• Bước 5: Lặp lại bước 3 và bước 4 cho tới khi số bước triển khai merge đạt đỉnh hoặc kích thước kỳ vọng của từ điển đạt được.
Kiến trúc Transformer
Transformer là một lớp mô hình seq2seq gồm hai phân đoạn encoder và decoder Mô hình hoàn toàn không sử dụng các kiến trúc Recurrent Neural Network của RNN mà chỉ sử dụng các lớp attention để nhúng (embedding) các từ trong câu Kiến trúc cụ thể của mô hình được mô tả trong hình 3.1.
Hình 3.1: Sơ đồ kiến trúc transformer kết hợp với attention[37]
Mô hình bao gồm hai giai đoạn:
- Encoder: Bao gồm 6 layers liên tiếp nhau Mỗi một layer sẽ bao gồm một sub-layer là Multi-Head Attention kết hợp với fully-connected layer như mô tả ở nhánh encoder bên trái của hình vẽ Kết thúc quá trình encoder ta thu được một vector nhúng xuất ra cho mỗi từ
- Decoder: Kiến trúc cũng bao gồm các layers liên tiếp nhau Mỗi một layer của Decoder cũng có các sub-layers gần tương tự như layer của Encoder nhưng bổ sung thêm sub-layer đầu tiên là Masked Multi-Head Attention có tác dụng loại bỏ các từ trong tương lai khỏi quá trình attention
3.2.2 Các tiến trình self-attention và encoder-decoder attention
Trong kiến trúc transformer chúng ta áp dụng hai dạng attention khác nhau tại từng bước huấn luyện
- Self-attention: Được sử dụng trong cùng một câu nhập, tại encoder hoặc tại decoder Đây chính là attention được áp dụng tại các Multi-Head Attention ở đầu vào của cả hai giai đoạn encoder và decoder.
- Encoder-decoder attention: Sở dĩ được gọi là encoder-decoder attention vì đây là kiến trúc attention tương tác giữa các véc tơ nhúng của encoder và decoder Véctơ context được tính toán trên encoder, đã được tính tương quan với véctơ decoder nên sẽ có ý nghĩa giải thích bối cảnh của từ tại vị trí time step decoder tương ứng Sau khi kết hợp giữa véc tơ context và véc tơ decoder ta sẽ chiếu tiếp qua một fully connected layer để tính phân phối xác suất cho đầu ra Mặc dù kiến trúc chỉ gồm các biến đổi attention nhưng Transformer lại có kết quả rất tốt trong các tác vụ NLP như sentiment analysis và dịch máy.
Mô hình BERT
BERT là viết tắt của cụm từ Bidirectional Encoder Representation from Transformer có nghĩa là mô hình biểu diễn từ theo hai chiều ứng dụng kỹ thuật Transformer BERT được thiết kế để huấn luyện trước các biểu diễn từ (pre-train word embedding) Điểm đặc biệt ở BERT đó là nó có thể điều hòa cân bằng ngữ cảnh theo cả hai chiều trái và phải
Cơ chế attention của Transformer sẽ truyền toàn bộ các từ trong câu văn đồng thời vào mô hình một lúc mà không cần quan tâm đến chiều của câu Do đó Transformer được xem như là huấn luyện hai chiều (bidirectional) mặc dù trên thực tế chính xác hơn chúng ta có thể nói rằng đó là huấn luyện không chiều (non-directional) Đặc điểm này cho phép mô hình học được ngữ cảnh của từ dựa trên toàn bộ các từ xung quanh nó bao gồm cả từ bên trái và từ bên phải
Một điểm đặc biệt ở BERT mà các model embedding trước đây chưa từng có đó là kết quả huấn luyện có thể fine-tuning được bằng cách thêm vào kiến trúc mô hình một t layer xuất để tùy biến theo tác vụ huấn luyện
Hình 3.2: Toàn bộ tiến trình pre-training và fine-tuning của BERT[39]
Một kiến trúc tương tự được sử dụng cho cả mô hình huấn luyện trước và mô hình fine-tuning Chúng ta sử dụng cùng một tham số huấn luyện trước để khởi tạo mô hình cho các tác vụ luồng đi xuống (down stream) khác nhau Trong suốt quá trình fine-tuning thì toàn bộ các tham số của các layer học chuyển giao sẽ được fine-tune
Tiến trình áp dụng fine-tuning sẽ được thực hiện như sau:
Bước 1: Nhúng toàn bộ các token của cặp câu bằng các véc tơ nhúng từ mô hình huấn luyện trước Các token nhúng bao gồm cả hai token là [CLS] và [SEP] để đánh dấu vị trí bắt đầu của câu nhập và vị trí ngăn cách
18 giữa hai câu Hai token này sẽ được dự báo ở đầu ra để xác định các phần Start/End Spand của câu xuất
Bước 2: Các véc tơ nhúng sau đó sẽ được truyền vào kiến trúc multi-head attention với nhiều block code (thường là 6, 12 hoặc 24 blocks tùy theo kiến trúc BERT) Ta thu được một véc tơ xuất ở encoder
Bước 3: Để dự báo phân phối xác suất cho từng vị trí từ ở decoder, ở mỗi time step chúng ta sẽ truyền vào decoder véc tơ xuất của encoder và véc tơ nhúng đầu vào của decoder để tính encoder-decoder attention Sau đó chiếu qua liner layer và softmax để thu được phân phối xác suất cho đầu ra tương ứng ở time step
Bước 4: Trong kết quả trả ra ở đầu ra của transformer sẽ cố định kết quả của câu Question sao cho trùng với câu Question ở input Các vị trí còn lại sẽ là thành phần mở rộng Start/End Span tương ứng với câu trả lời tìm được từ câu nhập
Quá trình huấn luyện sẽ fine-tune lại toàn bộ các tham số của mô hình BERT đã bỏ linear layer cuối cùng và huấn luyện lại từ đầu các tham số của linear layer mà chúng ta thêm vào kiến trúc model BERT để phù hợp với bài toán
Masked ML là một tác vụ cho phép fine-tuning lại các biểu diễn từ trên các bộ dữ liệu văn bản không giám sát (unsupervised-text) bất kỳ Có thể áp dụng Masked ML cho những ngôn ngữ khác nhau để tạo ra biểu diễn nhúng cho chúng Sơ đồ huấn luyện BERT theo tác vụ Masked ML được mô tả trong hình 3.3
Hình 3.3 : Sơ đồ kiến trúc BERT cho tá vụ Masked ML
Khoảng 15% các token của câu nhập được thay thế bởi [MASK] token trước khi truyền vào mô hình đại diện cho những từ bị che dấu (masked) Mô hình sẽ dựa trên các từ không được che (non-masked) xung quanh [MASK] và ngữ cảnh của [MASK] để dự đoán từ được che
Bản chất của kiến trúc BERT vẫn là một mô hình seq2seq gồm 2 giai đoạn encoder giúp nhúng các từ nhập và decoder giúp tìm ra phân phối xác suất của các từ ở đầu ra Kiến trúc Transfomer encoder được giữ lại trong tác vụ Masked
ML Sau khi thực hiện self-attention và feed forward ta sẽ thu được các véc tơ nhúng ở đầu ra là O1,O2,…,O5 Để tính toán phân phối xác suất cho từ xuất ra, chúng ta thêm một Fully connect layer ngay sau Transformer Encoder Hàm softmax có tác dụng tính toán phân phối xác suất Số lượng đơn vị của fully connected layer phải bằng với kích thước của từ điển
Cuối cùng ta thu được véc tơ nhúng của mỗi một từ tại vị trí MASK sẽ là véc tơ nhúng giảm chiều của véc tơ Oi sau khi đi qua fully connected layer như mô tả trên hình vẽ bên phải
Hàm mất mát (loss function) của BERT sẽ bỏ qua mất mát từ những từ không bị che dấu và chỉ đưa vào mất mát của những từ bị che dấu Do đó mô hình sẽ có thời gian hội tụ lâu hơn nhưng đây là đặc tính bù trừ cho sự gia tăng phụ thuộc về ngữ cảnh Việc lựa chọn ngẫu nhiên 15% số lượng các từ bị che
PHƯƠNG PHÁP ĐỀ XUẤT
Xây dựng tập dữ liệu
- Bước 1: Tìm hiểu phương pháp và viết chương trình tự động trích xuất dữ liệu văn bản từ các website tiếng Việt chính thống như: Tuổi trẻ online (https://tuoitre.vn), Thanh niên (https://thanhnien.vn), để hạn chế tối đa các văn bản sai chính tả, luận văn sẽ trích xuất và tiền xử lý làm sạch dữ liệu, thu được tập văn bản đúng chính tả
- Bước 2: Nghiên cứu các lỗi chính tả trong câu tiếng Việt và liệt kê được danh sách các lỗi cơ bản như: lỗi đánh máy (lỗi non-word, không có từ này trong tiếng Việt) hay các lỗi về ngữ cảnh, sử dụng từ vùng miền (lỗi real-word, có từ trong từ điển nhưng sử dụng không đúng)
- Bước 3: Tìm hiểu phương pháp và viết chương trình sinh tự động văn bản sai chính tả dựa trên tập văn bản đúng chính tả và sử dụng ngẫu nhiên các lỗi chính tả đã liệt kê
4.1.1 Thu thập dữ liệu văn bản
Quy trình xây dựng công cụ tự động trích xuất văn bản từ các website tin tức tiếng Việt, được thục hiện như sau
• Xác định các website, chuyên mục có lượng từ ngữ phong phú: chính trị, văn hóa xã hội (tránh các trang chuyên ngành hẹp)
• Tự động quét các trang nội dung bài viết, trích xuất văn bản,
• Làm sạch sơ bộ: bỏ các ký tự đặt biệt, mã html…
• Tách thành từng câu riêng, loại bỏ các câu quá ngắn hoặc quá dài
• Lưu vào file text, mỗi câu 1 hàng
Cụ thể đề tài đã sử dụng thư viện Scrapy (https://scrapy.org) để xây dựng công cụ trích xuất văn bản từ website tuoitre.vn như sau
• Cấu trúc địa chỉ URL xem theo ngày của website này như sau: https://tuoitre.vn//xem-theo- ngay/.html, do đó có thể lấy hàng loại bài viết bằng cách thay đổi chuyên mục và ngày đăng
• URL tất cả bài viết chuyên mục văn hóa ngày 5/10/2019 là https://tuoitre.vn/van-hoa/xem-theo-ngay/5-10-2019.html
• Thay đổi tên chuyên mục và ngày để quét các bài viết khác Hình 4.1 minh họa công cụ quét các bài viết trong 3 ngày
Hình 4.1: Công cụ tự động trích xuất văn bản sử dụng thư viện Scrapy
4.1.2 Tự động tạo văn bản sai chính tả
Quy trình sinh các câu sai chính tả từ một câu đúng như sau:
Bước 1: Tách câu thành từng từ, sử dụng hàm pos_tag của thư viện xử lý ngôn ngữ tiếng Việt Underthesea 1
1 https://underthesea-anhbn.readthedocs.io/en/latest/package_reference.html#pos-tag
Bước 2: Lần lượt áp dụng các luật biến đổi (tìm/thay thế) cho một từ để tạo nên phiên bản sai chính tả của câu, bảng 4.1 mô tả các luật biến đổi mà đề tài đã sử dụng
Bước 3: Mỗi bước áp dụng một luật thành công (có thay đổi trong câu) tạo nên một cặp câu đúng-sai Lưu tất cả các cặp câu đúng-sai vào file kết quả Lần lượt thực hiện quy trình trên cho tất cả các câu đúng chính tả trích xuất được từ các website, kết quả tạo các câu sai từ một câu đúng được minh hoạ trong hình 4.2
Bảng 4.1: Các luật biến đổi một từ đúng thành từ sai chính tả
STT Lỗi Luật biết đổi
1 Sử dụng dấu hỏi/ngã
Thay thế dấu hỏi/ngã cho nhau:
2 Phụ âm đầu Thay thế các phụ âm đầu cho nhau:
“ch/tr”, “s/x”, “d/gi”, “d/gi/v”, “u/h/qu”
3 Phụ âm cuối Thay thế các phụ âm cuối cho nhau:
Thay thế chữ tiếng Việt có dấu thành không dấu:
Bỏ dấu Tiếng Việt và thêm ký tự tương ứng, mô phỏng trường hợp gõ sai khi sử dụng kiểu gõ TELEX:
“à/af”, “á/as”, “ạ/aj”, “ả/ar”, “ã/ax”, “â/aa”, “ầ/aaf”, “ấ/aas”,
“ậ/aaj”, “ẩ/aar”, “ẫ/aax”, “ă/aw”, “ằ/awf”, “ắ/aws”, “ặ/awj”,
“è/ef”, “é/es”, “ẹ/ej”, “ẻ/er”, “ẽ/ex”, “ê/ee”, “ề/ee”, “ế/ees”,
“ì/if”, “í/is”, “ị/ij”, “ỉ/ir”, “ĩ/ix”,
“ò/of”, “ó/os”, “ọ/oj”, “ỏ/or”, “õ/ox”, “ô/oo”, “ồ/oof”, “ố/oos”,
“ộ/ooj”, “ổ/oor”, “ỗ/oox”, “ơ/ow”, “ờ/owf”, “ớ/ows”, “ợ/owj”,
“ù/uf”, “ú/us”, “ụ/uj”, “ủ/ur”, “ũ/ux”, “ư/uw”, “ừ/uwf”,
“ỳ/yf”, “ý/ys”, “ỵ/yj”, “ỷ/yr”, “ỹ/yx”,
Bỏ dầu Tiếng Việt và thêm ký tự số tương ứng, mô phỏng trường hợp gõ sai khi sử dụng kiểu gõ VNI:
Hình 4.2: Minh họa kết quả tạo các câu sai từ một câu đúng.
Mô hình học sâu bắt lỗi chính tả tiếng Việt
Để bắt lỗi chính tả tiếng Việt, luận văn sử dụng chủ yếu kỹ thuật dịch máy dựa trên kiến trúc Transformer[37] đã được nhóm nghiên cứu Kenji Imamura
26 và Eiichiro Sumita[38] cải tiến sử dụng mô hình BERT[39] đã huấn luyện để thay thế cho Encoder của Transformer
Tuy nhiên luận văn có một số thay đổi, bổ sung cho phù hợp với bài toán bắt lỗi chính tả tiếng Việt, cụ thể thay thế mô hình BERT huấn luyện trước từ dữ liệu tiếng Anh (bert-base-uncased) thành mô hình BERT huấn luyện trước sử dụng dữ liệu đa ngôn ngữ (bert-base-multilingual-cased), xử lý dữ liệu huấn luyện đúng format đưa vào đầu vào của BERT Encoder và xử lý chuỗi tokens, kết quả trả về là câu đúng chính tả
Ví dụ hoạt động của mô hình như sau:
• Câu nhập là câu sai chính tả:
Xinh viên Việt Nam rấc giõi
• Áp dụng tokenizer, sub-words và thêm ký tự đặc biệt:
[CLS] Xi ##nh viên Việt Nam r ##ấ ##c gi ##õi [SEP]
• Chuỗi token xuất ra từ mô hình:
▁Sinh ▁viên ▁Việt ▁Nam ▁rất ▁giỏi
• Kết quả câu đúng chính tả cuối cùng:
Sinh viên Việt Nam rất giỏi
Kiến trúc mô hình bắt lỗi chính tả tiếng Việt được luận văn đề xuất như hình 4.3:
Hình 4.3: Kiến trúc của mô hình bắt lỗi chính tả của luận văn
THỰC NGHIỆM VÀ ĐÁNH GIÁ
Tiêu chí đánh giá
Trong những năm qua, một số độ đo (metrics) đã được đề xuất để đánh giá hệ thống sửa lỗi, mỗi độ đo mới được đề xuất để khắc phục các điểm yếu của các độ đo trước đó Tuy nhiên, không có độ đo nào là ưu việt nhất Do đó, việc sử dụng chúng phụ thuộc vào mục tiêu nghiên cứu và ứng dụng [22] Trong phạm vi đề tài của luận văn, có thể coi tác vụ sửa lỗi chính tả là tác vụ dịch máy đơn ngôn ngữ (dịch từ văn bản sai chính tả sang văn bản đúng chính tả) do đó chúng tôi đánh giá hệ thống dựa trên phương pháp đánh giá chất lượng bản dịch là phương pháp BLEU[26] Ý tưởng chính của phương pháp này là so sánh kết quả bản dịch tự động bằng máy với một bản dịch chuẩn dùng làm bản đối chiếu Việc so sánh được thực hiện thông qua việc thống kê sự trùng khớp của các từ trong hai bản dịch có tính đến thứ tự của chúng trong câu (phương pháp n-grams theo từ) [13] Phương pháp này dựa trên hệ số tương quan giữa bản dịch máy và bản dịch chính xác được thực hiện bởi con người để đánh giá chất lượng của một hệ thống dịch
Công thức để tính điểm đánh giá BLEU như sau [26]:
- NRj: là số lượng các n-grams trong phân đoạn j của bản dịch chính xác dùng để tham khảo
- NTj: là số lượng các n-grams trong phân đoạn j của bản dịch bằng máy
- Lref: là số lượng các từ trong bản dịch tham khảo, độ dài của nó thường là gần bằng độ dài của bản dịch bằng máy
- Ltra: là số lượng các từ trong bản dịch bằng máy
Giá trị score đánh giá mức độ tương ứng giữa hai bản dịch và nó được thực hiện trên từng phân đoạn, ở đây phân đoạn được hiểu là đơn vị tối thiểu trong các bản dịch, thông thường mỗi phân đoạn là một câu hoặc một đoạn Việc thống kê độ trùng khớp của các n-grams dựa trên tập hợp các n-grams trên các phân đoạn, trước hết là nó được tính trên từng phân đoạn, sau đó tính lại giá trị này trên tất cả các phân đoạn
Bởi vì điểm số BLEU dùng để dánh giá chất lượng bản dịch, nó dựa trên kết quả đếm các cụm n-gram trùng khớp giữa câu nhập và câu mô hình dự đoán được Bài toán bắt lỗi chính tả khác với bài toán dịch máy ở chỗ cặp câu đúng- sai chỉ khác nhau một số vị trí, trong khi dịch máy thì có nhiều cách dịch khác nhau cho một câu nhập Cho nên điểm số BLEU ở đây cao hơn hẳn các hệ thống dịch máy hiện tại Do đó luận văn sử dụng thêm độ chính xác dựa trên việc đếm các lỗi chính tả như sau:
- Phát hiện lỗi chính tả
• Số lỗi chính tả phát hiện đúng
• Số lỗi chính tả phát hiện sai
• Số lỗi chính tả bỏ sót
• Số lỗi chính tả sửa đúng
• Số lỗi chính tả sửa sai
Chuẩn bị dữ liệu
Theo phương pháp được giới thiệu ở mục 4.1, đề tài đã tiến hành trích xuất dữ liệu từ các website để xây dựng tập dữ liệu bắt lỗi chính tả tiếng Việt Tập dữ liệu sẽ được chia làm 2 tập riêng biệt là tập huấn luyện (training set) và tập
29 kiểm thử (test set) Tập huấn luyện với mục đích tối ưu các thông số của mô hình Tập kiểm thử dùng để đánh giá kết quả của phương pháp sau quá trình huấn luyện Ngoài ra tập huấn luyện cũng được trích một phần để làm tập kiểm tra (validation set) phục vụ giám sát mô hình trong quá trình huấn luyện Chi tiết các tập dữ liệu được mô tả trong bảng 5.1
Bảng 5.1: Dữ liệu phục vụ bắt lỗi chính tả tiếng Việt
STT Tập dữ liệu Số câu/Cặp câu
1 Các câu đúng chính tả 137.085
2 Cặp câu đúng-sai chính tả 3.944.900
3 Tập huấn luyện (training set) 2.209.144
4 Tập kiểm tra (validation set) 552.286
5 Tập kiểm thử (test set) 1.183.470
Cài đặt thực nghiệm
Dựa trên kết quả nghiên cứu[38], do số lượng tham số của mô hình rất lớn nên không thể huấn luyện tất cả tham số một lần Vì vậy đề tài đã chia thành hai giai đoạn huấn luyện như sau
Giai đoạn 1 (stage 1): huấn luyện Decoder, cấu hình huấn luyện như sau:
- Pre-trained Bert Model: bert-base-multilingual-cased
Giai đoạn 2 (stage 2): huấn luyện Encoder, cấu hình huấn luyện như sau:
Cấu hình hệ thống thực nghiệm Để huấn luyện mô hình học sâu đòi hỏi phải có phần cứng máy tính rất mạnh, đặc biệt là GPU và RAM Do đó luận văn chủ yếu chạy các thực nghiệm trên môi trường Google Colab Pro có cấu hình phần cứng và môi trường như sau:
Các thực nghiệm hiện thực bằng ngôn ngữ lập trình python kết hợp với Google Colab Notebook, sử dụng thư viện học sâu chính là PyTorch phiên bản 0.6.0, thư viện fairseq 0.9.0 và thư viện Transformer 3.0.2 Thời gian huấn luyện mô hình được thể hiện như bảng 5.1
Bảng 5.2: Thời gian huấn luyện mô hình
Mô hình Thời gian huấn luyện
Mô hình sub-words từ dữ liệu tập huấn luyện 3 giờ
Mô hình Transformer stage 1 60 giờ
Mô hình Transformer stage 2 75 giờ
Kết quả thực nghiệm
Mô hình sau khi huấn luyện cho kết quả dự đoán được câu đúng chính tả với độ chính xác rất khả quan Đánh giá mô hình sử dụng tập kiểm thử hơn 1 triệu câu nhưng đã đạt được điểm số BLEU là 92,37
Về độ chính xác, mô hình cho kết quả cao hơn phương pháp phát hiện chính tả bằng tra từ điển, kết quả chi tiết thể hiện trong bảng 5.3
Bảng 5.3: So sánh độ chính xác với phương pháp tra từ điển
Phương pháp tra từ điển
Phương pháp của luận văn
31 Trong thử nghiệm thực tế, mô hình bắt được hầu hết các lỗi chính tả trong phạm vi luận văn như minh họa trong bảng 5.4
Bảng 5.4: Ví dụ một số trường hợp sai chính tả mà mô hình bắt được
- Câu nhập: Dư luận đả dành những lời tốt đẹp cho đại úy Nguyễn Anh Tú
- Kết quả: Dư luận đã dành những lời tốt đẹp cho đại úy Nguyễn Anh Tú
- Câu nhập: Đây là một trong những kiểu tóc làm chẻ khuôn mặt
- Kết quả: Đây là một trong những kiểu tóc làm trẻ khuôn mặt
- Câu nhập: Đà lạt là sứ sở sương mù
- Kết quả: Đà lạt là xứ sở sương mù
- Câu nhập: Hung thủ ra tay một cách rất giã man
- Kết quả: Hung thủ ra tay một cách rất dã man
- Câu nhập: Khi yêu, các cô gái thương hay hờn mác
- Kết quả: Khi yêu, các cô gái thương hay hờn mát
- Câu nhập: Nhà vô địch thường cô đơn trên đỉnh vinh quan
- Kết quả: Nhà vô địch thường cô đơn trên đỉnh vinh quang
- Câu nhập: Bàn tai ta làm nên tất cả, có sức người sỏi đá cũng thành cơm
- Kết quả: Bàn tay ta làm nên tất cả, có sức người sỏi đá cũng thành cơm
- Câu nhập: Toi rat thich du lich va xem phim
- Kết quả: Tôi rất thích du lịch và xem phim
Hơn nữa, do quá trình sinh câu sai chính tả bùng nỗ dữ liệu rất lớn nên luận văn chỉ giới hạn sinh ra câu chỉ tồn tại 1 lỗi chính tả Tuy nhiên, mô hình cũng có thể bắt được nhiều lỗi chính tả cùng xuất hiện trong câu như ví dụ sau Câu nhập: Bàn tai ta làm nên tấc cã, có sứt người sõi đá củng thành cơm Kết quả: Bàn tay ta làm nên tất cả, có sức người sỏi đá cũng thành cơm Mặc dù vậy, mô hình vẫn còn chưa bắt lỗi chính xác trong một số trường hợp lỗi nằm ngoài dữ liệu huấn luyện hay các lỗi phức tạp như:
- Kết quả trả về khó đoán khi thiếu dấu chấm trong câu nhập, ví dụ: câu nhật là "Xinh viên Việt Nam rất giỏi" thì kết quả là "Sinh viên Việt Nam rất giỏi, Sinh viên Việt Nam rất giỏi." Nhưng thêm dầu chấm cuối câu nhập thì kết quả trả về đúng "Sinh viên Việt Nam rất giỏi." Tuy nhiên nếu thiếu dấu chấm, nhưng lỗi ở cuối câu như câp nhập "Sinh viên Việt Nam rất giõi" thì kết
32 quả lại trả về đúng Lỗi này có thể do bước chuẩn bị dữ liệu huấn luyện đề tài vẫn giữ lại dấu câu Trong tương lai, đề tài sẽ thử nghiệm bỏ dấu câu trong bước tiền xử lý dữ liệu
- Tuy nhiên, nếu câu nhập là "Em ăn cơm chưa." (câu sai, khẳng định), mô hình sửa lại "Em ăn cơm trưa." (kết quả đúng) Nhưng nếu câu nhập là câu hỏi đúng "Em ăn cơm chưa?" thì mô hình vẫn sửa thành "Em ăn cơm trưa?" (kết quả sai) Vậy ta thấy giữ lại dấu câu cũng quyết định độ chính xác của mô hình
- Ở cấp độ khó hơn, đối với câu có các từ bản thân không bị sai chính tả, nhưng trong ngữ cảnh thì phát hiện sai chính tả, mô hình có thể bắt được lỗi trong ngữ cảnh gần như câu "Cánh đồng lúa bạc ngàn, mênh mông.", từ "bạc ngàn" (nghĩa là "đồng bạc giá trị ngàn") không sai nhưng trong ngữ cảnh "Cánh đồng lúa, , mênh mông" , thì từ "bạc ngàn" là sai về vùng miền, viết đúng chính tả là "bạt ngàn" (đồng nghĩa với các từ "bao la", "rộng lớn") Nhưng nếu câu nhập là "Các ban cùng phòng đã giúp đỡ con rất nhiều.", mô hình chưa phân biệt được "ban" là từ đúng (các ban thuộc một phòng trong một cơ quan) hay là từ sai (thiếu dấu, các bạn cùng phòng) Muốn phân biệt được phải dựa vào ngữ cảnh rộng hơn, đây là ngữ cảnh nói về sinh viên hay một cơ quan Tuy nhiên do giới hạn về bộ nhớ nên dữ liệu huấn luyện phải tách thành từng câu chứ không sử dụng cả đoạn văn được Cho nên, cần phải nghiên cứu cải tiến mô hình trong tương lai để khắc phục được nhược điểm này
Luận văn đã xây dựng một mô hình tích hợp giúp phát hiện và sửa một số lỗi chính tả trong tiếng Việt Kết quả đạt được tương đối khả quan và có thể được ứng dụng trong thực tế Ưu điểm của mô hình là tận dụng được các mô hình BERT[39] đã huấn luyện, giúp giảm đáng kể dữ liệu huấn luyện, thời gian huấn luyện cũng như tăng độ chính xác của mô hình Mặt khác, đề tài cũng đề xuất một phương pháp khả thi tạo kho ngữ liệu phục vụ huấn luyện mô hình bắt lỗi chính tả tiếng Việt
Tuy nhiên mô hình vẫn còn chưa chính xác trong một số trường hợp được chỉ ra trong mục 5.4 Bên cạnh đó dữ liệu dùng cho việc huấn luyện vẫn còn hạn chế về mặt số lượng, chưa bao gồm tất các lỗi chính tả tiếng Việt dẫn đến chưa đánh giá hết khả năng của mô hình
Trong tương lai, đề tài sẽ hướng tới việc cải thiện độ chính xác của mô hình bằng cách điều chỉnh mô hình, cải thiện bộ dữ liệu về số lượng và chất lượng như tìm kiếm thêm nguồn văn bản đúng chính tả, thêm các luật tạo các lỗi phổ biến khác (lặp chữ/từ, từ bị dính liền ); đồng thời thử nghiệm tối ưu hóa việc sử dụng tài nguyên và thay đổi các thông số huấn luyện khác nhau