CƠ SỞ LÝ THUYẾT VÀ CÁC NGHIÊN CỨU LIÊN QUAN
Mạng nơ-ron hồi quy - Recurrent Neural Network (RNN)
Mạng nơ-ron hồi quy (RNN - Recurrent Neural Network) đã thu hút sự chú ý lớn trong lĩnh vực xử lý ngôn ngữ tự nhiên nhờ vào hiệu suất ấn tượng RNN hoạt động dựa trên ý tưởng sử dụng bộ nhớ để lưu trữ thông tin từ các bước tính toán trước đó, giúp đưa ra dự đoán chính xác cho bước hiện tại Khác với các mạng nơ-ron truyền thống, nơi các đầu vào và đầu ra độc lập, RNN kết nối các phần tử trong chuỗi, cho phép dự đoán từ tiếp theo dựa trên ngữ cảnh của các từ đã xuất hiện Sự hồi quy trong RNN cho phép nó thực hiện cùng một tác vụ cho tất cả các phần tử trong chuỗi, với đầu ra phụ thuộc vào các phép tính trước đó, giúp nó có khả năng ghi nhớ thông tin Mặc dù lý thuyết cho phép RNN xử lý văn bản dài, nhưng thực tế, nó chỉ có thể nhớ được một số bước trước đó.
Kiến trúc cơ bản của RNN:
Hình 2.1 Mô hình RNN dàn trải ra Nguồn: https://noron.vn/post/gioi-thieu-ve-mang-neural-hoiquy-recurrent- neur-40wwa1jsk2si
Mạng neural hồi quy (RNN) trong hình trên nhận đầu vào xt và xử lý để tạo ra đầu ra ht Điểm nổi bật của RNN là khả năng lưu trữ giá trị ht để sử dụng cho các đầu vào tiếp theo RNN được cấu trúc thành một chuỗi các mạng con giống hệt nhau, nơi mỗi mạng con truyền thông tin đã xử lý cho mạng phía sau Kiến trúc của RNN có thể được hình dung rõ ràng hơn bằng cách tách vòng lặp ra và vẽ lại.
Hình 2.2 Mô hình RNN dàn trải ra Nguồn: https://noron.vn/post/gioi-thieu-ve-mang-neural-hoiquy-recurrent- neur-40wwa1jsk2si
Chuỗi ngõ vào x0, x1, …, xt đại diện cho các sự kiện và dữ liệu dạng chuỗi thời gian (time series), có mối liên hệ liên tiếp với nhau như tiếng nói và văn bản Thông tin từ các sự kiện trước được lưu giữ để hỗ trợ tính toán cho dữ liệu phía sau trong mạng neural hồi quy Do đó, mô hình RNNs đóng vai trò quan trọng trong các bài toán xử lý ngôn ngữ tự nhiên, bao gồm dịch máy, phân loại ngữ nghĩa và nhận diện giọng nói.
Mạng neural hồi quy (RNN) nổi bật hơn so với mạng ANN thông thường nhờ khả năng xử lý và tính toán hiệu quả trên các chuỗi vector Dưới đây là các kiểu hoạt động chính của mạng RNN.
Hình 2.3 Đầu vào được tô màu đỏ, mạng RNN màu xanh, đầu ra màu xanh dương
Theo hình vẽ trên, từ trái sang phải ta có các mô hình ứng dụng RNN:
Mạng neural kiểu Vanilla: Đầu vào và đầu ra có kích thước cố định (Bài toán nhận diện ảnh - Image Classification)
Đầu ra có dạng chuỗi: Đầu vào cố định và đầu ra là một chuỗi các vector
(Bài toán tạo tiêu đề cho ảnh - Image Captioning)
Đầu vào có dạng chuỗi: Đầu vào là một chuỗi vector và đầu ra cố định (Bài toán phân loại ngữ nghĩa - Sentiment Classification)
Đầu vào và đầu ra có dạng chuỗi: Bài toán Dịch máy - Neural Machine Translation
Input and output are synchronized sequences: Both the input and output consist of vector sequences of equal length, which is essential for tasks such as video classification and frame labeling.
Độ dài của các chuỗi đầu vào và đầu ra trong mạng neural hồi quy không cần phải cố định, do kích thước vector trạng thái thông tin trao đổi là cố định Bây giờ, chúng ta sẽ tìm hiểu sâu hơn về cách thức hoạt động của mạng neural hồi quy.
Mạng neural hồi quy nhận đầu vào là một vector x và sản sinh đầu ra là vector y Để lưu trữ thông tin từ các sự kiện trong quá khứ, mạng này sử dụng một vector trạng thái ẩn h, cập nhật giá trị của nó mỗi khi có sự kiện mới được xử lý.
W_hh: Ma trận weights cho vector trạng thái ẩn
W_xh: Ma trận weights cho vector đầu vào x
W_hy: Ma trận weights dùng để tính vector đầu ra y
Để tính toán trạng thái ht trong mô hình RNN, chúng ta dựa vào trạng thái trước đó ht-1 và cần khởi tạo vector đầu vào, thường là một vector 0 Các mô hình RNN sử dụng các hàm phi tuyến như hàm kích hoạt, ví dụ như công thức với hàm kích hoạt tanh: ht = tanh(Whhht-1 + Wxhxt).
Trong quá trình huấn luyện mạng neural hồi quy, các ma trận trọng số được cập nhật và điều chỉnh thông qua thuật toán back propagation, nhằm tối ưu hóa hành vi của mạng.
RNN đã chứng minh khả năng vượt trội trong các bài toán máy dịch hiện đại, mang lại kết quả chính xác cao và cải thiện đáng kể chất lượng Trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP), RNN đã đạt được nhiều thành công cho nhiều vấn đề khác nhau Một trong những mô hình phổ biến nhất của RNN là LSTM (Long Short-Term Memory), nổi bật với khả năng ghi nhớ thông tin qua nhiều bước hơn so với RNN truyền thống Mặc dù LSTM có cấu trúc tương tự RNN truyền thống, nhưng sự khác biệt nằm ở cách tính toán của các nút ẩn Chúng ta sẽ tìm hiểu chi tiết hơn về LSTM cũng như một số ứng dụng của RNN trong xử lý ngôn ngữ tự nhiên.
Mô hình ngôn ngữ cho phép dự đoán xác suất xuất hiện của một từ dựa trên chuỗi từ trước đó, đồng thời ước lượng độ tương tự của các câu, giúp ứng dụng trong dịch máy Khả năng dự đoán từ tiếp theo còn cho phép xây dựng mô hình tự sinh từ, giúp máy tính tạo ra văn bản mới từ tập mẫu và xác suất đầu ra của mỗi từ Tùy thuộc vào mô hình ngôn ngữ, có thể tạo ra nhiều văn bản khác nhau Đầu vào trong mô hình thường là chuỗi từ được mã hóa bằng vec-tơ one-hot, và đầu ra là chuỗi từ dự đoán được.
Đầu ra tại bước t được xác định bởi xt+1, nhằm mục đích tạo ra từ tiếp theo trong câu Nhiều nghiên cứu đã đề cập đến mô hình hóa ngôn ngữ và khả năng sinh văn bản, trong đó có cả ứng dụng trong dịch máy.
Dịch máy (Machine Translation) hoạt động tương tự như mô hình hóa ngôn ngữ, với đầu vào là chuỗi từ trong ngôn ngữ nguồn (ví dụ: tiếng Việt) và đầu ra là chuỗi từ trong ngôn ngữ đích (ví dụ: tiếng Anh) Điểm khác biệt là quá trình dịch chỉ diễn ra sau khi đã phân tích toàn bộ chuỗi đầu vào, vì từ dịch đầu tiên cần có đủ thông tin từ ngữ liệu để suy luận chính xác.
Mạng nơ-ron hồi tiếp (RNN) được ứng dụng trong nhiều lĩnh vực, trong đó có dịch máy, nhận diện giọng nói và mô tả hình ảnh Đặc biệt, trong nhận diện giọng nói, RNN có khả năng phân tích chuỗi tín hiệu âm thanh và dự đoán các đoạn ngữ âm cùng với xác suất tương ứng Ngoài ra, RNN cũng đóng vai trò quan trọng trong việc mô tả hình ảnh, giúp cải thiện độ chính xác và tính khả thi của các ứng dụng trí tuệ nhân tạo.
Cùng với ConvNet, RNN đóng vai trò quan trọng trong việc tự động tạo mô tả cho các bức ảnh chưa được gán nhãn Sự kết hợp giữa hai công nghệ này đã mang lại những kết quả ấn tượng, với các mô tả được sinh ra có độ chính xác và chi tiết cao.
Hình 2.5 Ứng dụng RNN tạo tiêu đề cho ảnh
Nguồn: http://cs.stanford.edu/people/karpathy/deepimagesent/
Word Embedding
Thành phần cơ bản của văn bản là các từ, và để máy tính hiểu được, cần biểu diễn các từ thành các vector thực Các vector này sẽ được sử dụng làm đầu vào cho mô hình huấn luyện Phương pháp đơn giản nhất là sử dụng One-hot vector, trong đó mỗi từ được gán một số và biểu diễn dưới dạng vector có chiều bằng số lượng từ vựng trong từ điển, với một thành phần duy nhất là 1 tương ứng với từ được biểu diễn, còn lại đều bằng 0 Tuy nhiên, cách biểu diễn này ít được sử dụng do ba vấn đề chính.
Chi phí tính toán lớn: độ dài vector là độ dài của không gian từ vựng, nếu dữ liệu có 10000 từ, độ dài của vector one-hot là 10000
Mang ít giá trị thông tin: các vector one-hot hầu như chứa toàn số 0
Trong không gian Euclid, khoảng cách giữa hai từ bất kỳ được xác định bằng công thức √2 nếu hai vector khác nhau, và bằng 0 nếu chúng giống nhau Điều này cho thấy rằng khoảng cách này không phản ánh được mối quan hệ ngữ nghĩa giữa các từ, cho dù chúng có thể gần nghĩa hay hoàn toàn không liên quan.
Có 2 phương pháp chủ yếu được hay dùng để tính toán Word Embedding là Count based method và Predictive method Cả hai cách này đều dựa trên một giả thuyết rằng những từ nào xuất hiện trong cùng một ngữ cảnh, một ngữ nghĩa sẽ có vị trí gần nhau trong không gian mới được biến đổi Trong luận văn này, tôi sẽ trình bày phương pháp phổ biến hơn là Predictive method (Word2Vec) Word2Vec được Mikolov giới thiệu lần đầu tiên năm 2013 Mikolov đã đề xuất hai mô hình để tính toán các vector biểu diễn từ trong một không gian liên tục (từ 50 đến 100 chiều) từ một tập dữ liệu text rất lớn Hai mô hình này là CBOW (Continuous Bag-of-Words Model) và Skipgram (Continuous Skip-gram Model), cả hai đều dựa trên kiến trúc mạng neural network sẽ được trình bày sau đây
2.2.1 CBOW model Ý tưởng chính của mô hình CBOW là mô hình sẽ dùng các từ ngữ cảnh (context word) để đoán ra từ trung tâm (target word) Ví dụ đối với chuỗi 5 từ
Mô hình Continuous Bag of Words (CBOW) sử dụng các từ ngữ cảnh 𝑤t-2, 𝑤t-1, 𝑤t+1, 𝑤t+2 để dự đoán từ trung tâm 𝑤t Để thực hiện điều này, CBOW cần học hai ma trận 𝑊 và 𝑊′, với 𝑊 được gọi là Ma trận Nhúng (Embedding Matrix) và 𝑊′ là Ma trận Nhúng Đảo (Inversed Embedding Matrix) Số chiều của vector nhúng được ký hiệu là 𝑁, trong khi các từ ngữ cảnh và từ trung tâm được biểu diễn bằng vector one-hot 𝑥 Các vector đầu vào của mô hình lần lượt là xt-2, xt-1, xt+1, xt+2, và vector đầu ra là 𝑦 = 𝑥t.
Hình 2.7 Mô hình CBOW Nguồn: https://lilianweng.github.io/lil-log/2017/10/15/learning-word- embedding.html
Mô hình Skip-gram hoạt động ngược lại với CBOW, sử dụng từ trung tâm để dự đoán các từ ngữ cảnh xung quanh Cụ thể, với chuỗi từ 𝑤t-2, 𝑤t-1, 𝑤t, 𝑤t+1, 𝑤t+2, Skip-gram sẽ lấy từ trung tâm 𝑤t để dự đoán các từ hàng xóm 𝑤t-2, 𝑤t-1, 𝑤t+1, 𝑤t+2 Trong mô hình này, vai trò của x và y được đảo ngược so với CBOW.
Hình 2.8 CBOW model vs Skip-gram model
Nguồn: https://viblo.asia/p/word-embedding-tim-hieu-khai-niem-co-ban-trong- nlp-1Je5E93G5nLMô hình ngôn ngữ - Language model
Mô hình ngôn ngữ là một phân bố xác suất trên các tập văn bản, cho phép xác định xác suất 𝑝(𝑊1 𝑊n) của các từ trong từ điển của một ngôn ngữ cụ thể Nói một cách đơn giản, mô hình ngôn ngữ giúp đánh giá xác suất của một câu hoặc cụm từ thuộc về một ngôn ngữ nào đó, ví dụ như tiếng Việt.
𝑝("nguồn cao đài từ điển") = 1
𝑝("đài từ cao nguồn điển") = 0
Trong ngôn ngữ tiếng Việt, xác suất xuất hiện của các câu khác nhau cho thấy sự khác biệt rõ rệt, với hai câu "nguồn cao đài từ điển" có khả năng xuất hiện nhiều hơn so với "đài từ cao nguồn điển" Điều này chứng tỏ rằng mô hình ngôn ngữ có thể cung cấp kiến thức về từ vựng, ngữ pháp và tần suất sử dụng từ ngữ Mô hình ngôn ngữ đóng vai trò quan trọng trong các ứng dụng xử lý ngôn ngữ tự nhiên như kiểm lỗi chính tả, dịch máy và phân đoạn từ Trong việc xây dựng mô hình ngôn ngữ, Knowledge-based Language Model và Statistical Language Model là hai hướng tiếp cận chính, nhưng Knowledge-based Language Model ít được sử dụng do yêu cầu cao về chuyên môn và nhiều nhược điểm, trong khi Statistical Language Model được ưu tiên phát triển hơn.
Xây dựng mô hình ngôn ngữ thống kê (Statistical Language Model) là quá trình xác định giá trị của 𝑝(𝑊1 𝑊n) từ dữ liệu thu thập Để tính toán, ta sử dụng công thức: p(𝑊 1 𝑊 𝑛 ) = 𝐶𝑜𝑢𝑛𝑡(𝑊 1 𝑊 𝑛 ).
N với N là số lượng cụm từ có độ dài N trong tập dữ liệu Do đó, Statistical Language Model còn được gọi là Count based Model
Hoặc trong trường hợp không xác định được cụ thể N, chúng ta có thể sử dụng công thức xác suất có điều kiện dưới đây: trong đó:
Nguồn: https://vnopenai.github.io/ai-doctor/nlp/vn-accent/n-grams/
Theo cách xác định giá trị xác suất 𝑝(𝑊1 𝑊n), Mô hình Ngôn ngữ Thống kê được phân chia thành hai hướng tiếp cận chính: Mô hình Ngôn ngữ N-gram và Mô hình Ngôn ngữ Cấu trúc.
N-gram Language Model như được đề cập phía trên là một mô hình hóa ngôn ngữ dựa theo xác suất của một chuỗi với chiều dài cố định xuất hiện trong ngôn ngữ - Mô hình này hay còn được gọi với một cái tên khác là (N-1)-order Markov Models Ý tưởng chính của Markov Models là giả định xác suất của đối tượng đang xét như chỉ phụ thuộc vào một bộ (n-1) dữ liệu trước nó Các mô hình Trigram Language Models được rút ra trực tiếp từ mô hình này
Hình 2.9 Mô hình ngram language models Nguồn: https://ongxuanhong.wordpress.com/2016/08/27/language-modeling-la-gi/
Chúng ta có một chuỗi ngẫu nhiên các biến X1, X2,…, Xn, với mỗi biến mang giá trị từ một tập hợp V Mục tiêu của bài toán là mô hình hóa một chuỗi bất kỳ x1, x2,…, xn, trong đó n phải lớn hơn hoặc bằng một số nhất định.
Từ chuỗi có dạng x1, x2,…, xn, ta có thể phát sinh ra |𝑉|^𝑛 khả năng khác nhau Do không thể liệt kê tất cả các chuỗi để tính xác suất, chúng ta có thể sử dụng công thức tổng quát hóa, cụ thể là công thức mô hình Markov bậc nhất.
Công thức (1.1) được xây dựng từ xác suất đồng thời, trong khi công thức (1.2) giả định rằng đối tượng thứ i chỉ phụ thuộc vào đối tượng i-1 trước đó.
Từ đó, ta có mô hình cho bậc hai:
Ta đặt ∗ là kí tự bắt đầu cho 1 chuỗi/câu 𝑥0 = 𝑥1 = ∗
Như vậy để tính xác suất của đối tượng 𝑥𝑖 có phân bố
𝑃(𝑋𝑖 = 𝑥𝑖|𝑋𝑖−2 = 𝑥𝑖−2, 𝑋𝑖−1 = 𝑥𝑖−1), ta th ực hiện như sau:
2 Phát sinh đối tượng 𝑥𝑖 từ công thức
3 Nếu 𝑥𝑖 = 𝑆𝑇𝑂𝑃 thì ta trả về chuỗi 𝑥1𝑥2 … 𝑥𝑛 Ngược lại, ta gán 𝑖
Ta có được mô hình có thể sinh được chuỗi có chiều dài bất kỳ
Hình 2.10 Ví dụ minh họa mô hình trigram MarkovLM
Trong mô hình ngôn ngữ, thường ta chọn giá trị N là 1, 2 hoặc 3 Việc dự đoán một chuỗi tự được thực hiện bằng cách dự đoán từng từ một, với xác suất của mô hình dựa trên lịch sử của các từ đã cho Điều này giới hạn dự đoán trong phạm vi n-1 từ thay vì k-.
1 từ Từ đây ta có thể dễ dàng thấy được những nhược điểm như:
Các công trình nghiên cứu liên quan đến đề tài
Neural Machine Translation (NMT) đã phát triển mạnh mẽ với các kiến trúc hiện đại sử dụng từ và câu embedding, cùng với các ví dụ trước đây về bộ mã hóa-giải mã Bài báo này không chỉ truy nguyên nguồn gốc của NMT mà còn cung cấp cái nhìn sâu sắc về các xu hướng gần đây trong lĩnh vực dịch máy.
Bài báo "Neural Machine Translation Between Vietnamese And English: An Empirical Study" nêu bật nỗ lực của tác giả trong việc cải thiện bản dịch tiếng Anh-Việt thông qua hai hướng chính: xây dựng kho văn bản tiếng Việt - tiếng Anh lớn nhất và thực hiện các thử nghiệm với các mô hình neural tiên tiến nhằm đạt điểm BLEU cao nhất Các thí nghiệm này cung cấp ví dụ thực tế về hiệu quả của các mô hình dịch máy thần kinh khi làm việc với các cặp ngôn ngữ có dữ liệu hạn chế.
VnCoreNLP là một bộ công cụ xử lý ngôn ngữ tự nhiên (NLP) cho tiếng Việt, được phát triển bằng Java, nhanh chóng và dễ sử dụng Bộ công cụ này hỗ trợ nhiều tác vụ quan trọng như phân đoạn từ, gắn thẻ lời nói (POS), nhận dạng thực thể có tên (NER) và phân tích cú pháp phụ thuộc, đạt được kết quả hiện đại (SOTA) cho các nhiệm vụ này Ngoài ra, VnCoreNLP còn có khả năng phân tích cảm xúc ở cấp độ câu và xây dựng hệ thống dựa trên quy tắc bằng khung Gate, với kết quả thử nghiệm hứa hẹn trên các đánh giá sản phẩm máy tính.
Recurrent Neural Network based Language Model
Bài báo này giới thiệu phương pháp mô hình ngôn ngữ sử dụng mạng neural hồi quy (Recurrent Neural Network) ở cấp độ ký tự Kết quả thử nghiệm trên tập dữ liệu NIST RT05 cho thấy mô hình này đạt hiệu suất vượt trội so với các mô hình n-gram tiêu chuẩn, mặc dù độ phức tạp của nó hơi cao.
A New Approach To Accent Restoration Of Vietnamese Texts Using
Dynamic Programming Combined With Co-Occurrence Graph
Nhóm tác giả giới thiệu một phương pháp mới để đánh dấu văn bản tiếng Việt, bắt đầu bằng việc xây dựng mô hình ngôn ngữ như cơ sở dữ liệu xác suất từ vựng trong câu Tiếp theo, họ tạo bản đồ translate nhằm giảm không gian tìm kiếm Cuối cùng, thuật toán quy hoạch động được áp dụng để tìm ra lời giải với xác suất từ vựng cao nhất Theo nghiên cứu, độ chính xác trung bình của phương pháp này đạt từ 93% đến 94%.
Vietnamese Text Accent Restoration With Statistical Machine Translation
Bài báo này trình bày phương pháp kết hợp n-gram và từ điển cụm từ để giải quyết bài toán bỏ dấu cho tiếng Việt Phương pháp coi việc dự đoán dấu cho câu như một bài toán dịch máy thống kê, trong đó văn bản tiếng Việt không dấu là ngôn ngữ nguồn và văn bản đã có dấu là ngôn ngữ đích Để nâng cao chất lượng mô hình, tác giả đã áp dụng các kỹ thuật như bổ sung từ điển, thay đổi thứ tự mô hình ngôn ngữ và tinh chỉnh mô hình.
phương pháp ĐỀ XUẤT
Thu thập dữ liệu
Trong luận văn này, tôi sử dụng tập dữ liệu VNTQcorpus(small).txt với kích thước khoảng 35 Mb và chứa khoảng 300.000 câu Mặc dù dữ liệu không được phân loại theo thể loại, nhưng nó chủ yếu tập trung vào văn bản nghệ thuật.
Nguồn DATA: http://viet.jnlp.org/download-du-lieu-tu-vung-corpus
3.1.1 Mô hình ngôn ngữ mức kí tự
Trong luận văn này, tôi áp dụng kiến trúc many-to-one của RNN để xây dựng mô hình ngôn ngữ ở mức kí tự Hình 3.1 minh họa ví dụ về kiến trúc cơ bản của mô hình ngôn ngữ này dựa trên RNN, phù hợp với các bài toán như one-to-one và one-to-many.
Mô hình ngôn ngữ mức ký tự sử dụng dữ liệu đầu vào được mã hóa thành chuỗi các vector one-hot của ký tự với độ dài cố định Đầu ra của mô hình là một vector có chiều dài tương ứng với kích thước toàn bộ không gian ký tự, bao gồm cả các ký tự đặc biệt, trong đó mỗi giá trị tại vị trí cụ thể thể hiện xác suất của ký tự đó Cụ thể, ví dụ với chuỗi tám vector one-hot, bảy vector đầu tiên được sử dụng làm dữ liệu đầu vào, trong khi vector cuối cùng đóng vai trò là nhãn tương ứng.
Hình 3.2 Đầu vào và ra của mô hình ngôn ngữ mức kí tự
3.1.2 Mô hình ngôn ngữ mức từ
Kiến trúc mô hình ngôn ngữ mức từ gần giống với mức kí tự Hình 4.6 cho thấy kiến trúc của mô hình ngôn ngữ mức từ
Hình 3.3 Mô hình ngôn ngữ mức từ
Dữ liệu đầu vào của mô hình ngôn ngữ là chuỗi vector one-hot của các từ với độ dài cố định, và đầu ra là vector có chiều dài tương ứng với kích thước không gian từ vựng, thể hiện xác suất của mỗi từ Tuy nhiên, do không gian từ vựng lớn hơn nhiều so với không gian ký tự và các vector one-hot hầu như không có mối quan hệ, cần chuyển đổi chúng sang không gian nhỏ hơn để thể hiện mối quan hệ ngữ cảnh Do đó, mô hình ngôn ngữ mức từ bổ sung tầng embedding, với các trọng số được huấn luyện trước bằng phương pháp CBOW hoặc Skip-gram và không được cập nhật trong quá trình huấn luyện mô hình ngôn ngữ.
Phương pháp phát hiện và sửa lỗi
3.2.1 Phát hiện và sửa lỗi mức kí tự
Mô hình ngôn ngữ cho phép xác định xác suất của ký tự tiếp theo dựa vào chuỗi ký tự trước đó Khi đã xây dựng mô hình ngôn ngữ ở mức ký tự trên một tập dữ liệu lớn, ví dụ với chuỗi đầu vào "ngôi nh", ta có thể tính toán xác suất cho các ký tự tiếp theo.
Bước tiếp theo trong việc phát hiện lỗi chính tả là sử dụng một mô hình ngôn ngữ mạnh mẽ để nắm bắt xác suất ngôn ngữ trong hầu hết các ngữ cảnh Một văn bản chính xác về chính tả sẽ có xác suất của từ và ký tự cao hơn ngưỡng chấp nhận, trong khi lỗi chính tả sẽ làm giảm xác suất này xuống gần 0 Ví dụ, trong câu “soạn thảu văn bản”, nếu năm ký tự đầu tiên là đúng và ngưỡng xác suất để xác định lỗi chính tả là 0.01, ta cần phân tích xác suất của từ tiếp theo dựa trên đoạn văn “hôm na”.
• soạn th[ả] 𝑝 = 0.8254 > 0.01 Đúng chính tả
• soạn thả[u] 𝑝 = 0.0062 < 0.01 Sai chính tả
Do xác suất của ký tự "u" thấp hơn ngưỡng cho phép, vị trí này có thể được coi là một lỗi chính tả Để khắc phục, cần sửa lỗi này bằng cách thay thế bằng ký tự có xác suất cao nhất theo mô hình ngôn ngữ, trong trường hợp này là ký tự.
Với xác suất 𝑝 = 0.9902, câu đã được chỉnh sửa thành “soạn thảo văn bản” Khi tiếp tục kiểm tra xác suất tại các vị trí khác, giá trị thu được sẽ đủ lớn để được chấp nhận Hình 3.4 minh họa cho thuật toán Greedy này.
Phát hiện và sửa lỗi bằng heuristic đơn giản có thể không luôn hiệu quả do không xác định được ngưỡng xác suất chính xác Việc chọn ngưỡng sai có thể dẫn đến kết quả không mong muốn, đặc biệt khi lỗi chính tả xuất hiện ngay từ đầu văn bản Sử dụng các ngữ cảnh sai chính tả để dự đoán xác suất từ tiếp theo có thể gây khó khăn trong việc phát hiện lỗi Do đó, cần áp dụng các kỹ thuật và chiến lược heuristic phù hợp để cải thiện khả năng của mô hình ngôn ngữ.
Trong một số trường hợp, việc thay thế từ có xác suất cao nhất có thể không chính xác Chẳng hạn, trong cụm từ “mùa zuân tây bắc”, khi áp dụng chiến lược xác định từ, ta phát hiện rằng ký tự “z” ở vị trí thứ năm bị sai chính tả Do đó, cần xem xét năm từ có xác suất cao nhất phù hợp với ngữ cảnh trước đó để đảm bảo tính chính xác.
• mùa [đ] 𝑝 = 0.0975 Như vậy, nếu ta chọn từ có xác suất cao nhất và thay thế, lúc này câu sẽ trở thành
Mô hình ngôn ngữ có thể gặp khó khăn trong việc nhận diện ngữ cảnh, dẫn đến sai chính tả như trong cụm từ “mùa suân tây bắc” Thay vì chỉ dựa vào xác suất của từ “mùa”, chúng ta nên áp dụng phương pháp xác suất n-Lookahead Điều này có nghĩa là khi phát hiện và sửa lỗi, chúng ta sẽ xem xét xác suất của từ hiện tại cùng với 𝑛 − 1 từ tiếp theo Ví dụ, với 𝑛 = 4, chúng ta sẽ tính toán để chọn ký tự phù hợp thay thế.
• mùa [s] 𝑝 1 mùa s[u] 𝑝 2 mùa su[â] 𝑝 3 mùa suâ[n] 𝑝 3
• mùa [t] 𝑝 1 mùa t[u] 𝑝 2 mùa tu[â] 𝑝 3 mùa tuâ[n] 𝑝 4
• mùa [x] 𝑝 1 mùa x[u] 𝑝 2 mùa xu[â] 𝑝 3 mùa xuâ[n] 𝑝 4
Xác suất n-lookahead của mỗi trường hợp sẽ là:
Xác suất n-lookahead được tính bằng công thức 𝑝(𝑛 − 𝑙𝑜𝑜𝑘𝑎ℎ𝑒𝑎𝑑) = 𝑝 1 x 𝑝 2 x 𝑝 3 x 𝑝 4, trong đó xác suất của ký tự “x” sẽ cao hơn nhờ vào việc xem xét ngữ cảnh phía sau Khi giá trị n lớn, các xác suất nhân với nhau có thể dẫn đến kết quả rất nhỏ Để khắc phục, ta có thể sử dụng tổng log của các xác suất thành phần: 𝑙𝑜𝑔𝑝(𝑛 − 𝑙𝑜𝑜𝑘𝑎ℎ𝑒𝑎𝑑) = log(𝑝 1 ) + log(𝑝 2 ) + ⋯ + log(𝑝 𝑛 ).
Các chiến lược sửa lỗi
Có nhiều loại lỗi chính tả thường gặp, và việc thay thế từ sai chỉ là một phương pháp sửa lỗi Các loại lỗi này có thể được phân loại thành nhiều nhóm khác nhau.
• Lỗi replace: ngôi nhà ngai nhà
• Lỗi transpose: ngôi nhà ngiô nhà
• Lỗi delete: ngôi nhà ngi nhà
• Lỗi insert: ngôi nhà ngôôi nhà Ngoài ra, có thể có thêm một số trường hợp khác tuỳ theo các trường hợp khác nhau
Với mỗi loại ta sẽ có chiến lược sửa lỗi tương ứng, cụ thể:
Khi phát hiện lỗi dựa trên xác suất của mô hình ngôn ngữ, chúng ta không xác định được loại lỗi cụ thể Do đó, cho mỗi loại lỗi, chúng ta sẽ tạo ra các trường hợp sửa lỗi tương ứng Tiếp theo, chúng ta tính toán giá trị nlookahead cho từng trường hợp và chọn giá trị cao nhất để áp dụng.
Kết hợp sửa lỗi từ hai phía left2right và right2left
Với phương pháp greedy heuristic, chúng ta chỉ sử dụng ngữ cảnh từ một phía để phát hiện và sửa lỗi, trong khi cần xem xét ngữ cảnh từ cả hai phía của ký tự Để cải thiện khả năng sửa lỗi, cần huấn luyện một mô hình ngôn ngữ với ngữ cảnh hai chiều Mô hình left2right hoạt động theo chiều xuôi, trong khi mô hình right2left hoạt động ngược lại Ví dụ, với từ "đường", dữ liệu huấn luyện cho mô hình left2right vẫn giữ nguyên là "đường", trong khi mô hình right2left sẽ đảo ngược thành "gnờưđ" Mô hình left2right sẽ phát hiện và sửa lỗi hiệu quả ở phần cuối văn bản, nhờ vào ngữ cảnh từ phía đầu, còn mô hình right2left sẽ sửa tốt hơn ở phần đầu nhờ vào ngữ cảnh từ phía cuối.
Khi kết hợp hai mô hình, quá trình kiểm tra lỗi sẽ diễn ra đồng thời ở vị trí đầu và cuối văn bản Nếu phát hiện lỗi ở bất kỳ phía nào, hệ thống sẽ tiến hành sửa lỗi từ phía đó Sau khi hoàn tất việc sửa, quá trình kiểm tra sẽ tiếp tục cho đến khi không còn lỗi nào Trong trường hợp có lỗi từ cả hai phía cùng lúc, hệ thống sẽ ưu tiên sửa lỗi theo xác suất n-lookahead cao hơn.
Ví dụ: “mùa huân hoa nở”, ngưỡng xác suất là 0.01
• Mô hình left2right: mùa [h] 𝑝 = 0.4212 > 0.01 Đúng chính tả
[h]uân hoa nở 𝑝 = 0.0052 < 0.01 Sai chính tả
3.2.2 Phát hiện và sửa lỗi mức từ
Given two sequences A[1,2,…,n] and B[1,2,…,m] with lengths n and m respectively, the Edit Distance (ED), also known as Levenshtein distance, is defined as the minimum number of operations required to transform one string into another These operations include inserting a character, deleting a character, and substituting one character for another.
Ví dụ: khoảng cách giữa “nhà” và “ nhân” là 2 vì: nhà nhâ nhân
Mô hình ngôn ngữ mức từ được áp dụng theo sơ đồ dưới đây
Hình 3.5 Flowchart sửa lỗi mức từ
Khi sửa lỗi bằng mô hình ngôn ngữ mức từ, quá trình kiểm tra diễn ra từ trái sang phải, thay thế những từ không có trong không gian từ vựng Để thực hiện việc thay thế, ta chọn mười từ có xác suất cao nhất theo mô hình ngôn ngữ, có thể sử dụng xác suất n-lookahead Sau đó, tính toán Edit distance giữa mười từ đó và từ hiện tại, từ đó chọn từ thay thế có Edit distance thấp nhất Phương pháp này được áp dụng tùy theo từng trường hợp, thường được sử dụng sau khi đã sửa lỗi từ hai phía với mức kí tự.
Phương pháp đánh giá
Độ chính xác của văn bản đầu ra trong chuyển đổi tiếng nói thành văn bản là yếu tố quyết định thành công của hệ thống Để đo lường độ chính xác này, ta so sánh văn bản dự đoán với văn bản thực tế; sự khác biệt càng nhỏ thì độ chính xác càng cao Một chỉ số phổ biến để đánh giá sự khác nhau giữa hai văn bản là Word Error Rate (WER), là tỷ lệ lỗi giữa văn bản dự đoán và văn bản đúng, được tính dựa trên số lượng từ bị thay đổi, bao gồm xóa, thêm hoặc chỉnh sửa, trong quá trình dự đoán.
𝑆: số lượng từ bị thay thế
𝐷: số lượng từ bị xoá
𝐼: số lượng từ thêm vào
𝐶: số lượng từ chính xác
MÔ TẢ THỰC TẾ VÀ ĐÁNH GIÁ KẾT QUẢ
Hiện thực đề tài
4.1.1 Mô hình của bài toán
Bằng cách nhập vào các câu không đúng như không có dấu hoặc sai chính tả vào các mô-đun xử lý, chúng ta có thể nhận được đầu ra là những câu có dấu, mang ý nghĩa đầy đủ trong Tiếng Việt, dễ dàng đọc hiểu và đúng chính tả.
Input: nguon cao đài tu điên Output: nguồn cao đài tự điển
4.1.2 Mô hình ngôn ngữ mức kí tự
Kiến trúc mô hình ngôn ngữ mức kí tự
Hình 4.1 Mô hình hiện thực bài toán
Mô hình xử lý ngôn ngữ bắt đầu với tầng embedding, chuyển đổi các vector one-hot của ký tự sang không gian mới, nơi các vector có mối liên hệ về ngữ cảnh Khác với tầng từ, trọng số của lớp embedding được cập nhật trong quá trình huấn luyện Tiếp theo là bốn lớp LSTM, trong đó lớp thứ hai và thứ tư áp dụng dropout để giảm thiểu hiện tượng overfitting Cuối cùng, mô hình sử dụng một lớp Fully connected để trích xuất đặc trưng từ đầu ra của LSTM, tiếp theo là một lớp Fully connected với hàm kích hoạt Softmax để tạo ra vector xác suất cho từ vựng Mô hình này sử dụng độ dài chuỗi là 30.
Mô hình ngôn ngữ mức kí tự từ trái sang phải
Mô hình xác định thông số ban đầu:
Model predefine param, epochs: 50, batchSize: 512
Save proceeded file: dataset/VNTQcorpus-small_proceeded.txt
Start create char sequences, total lines: 197931 , sequence length:
Load sequence data done, total lines: 24768227
Load sequence data done, first sequence: tìm
First sequence: [4, 34, 10] char_index: {' ': 1, 'n': 2, 'h': 3, 't': 4, 'g': 5, 'i': 6, 'c': 7, 'a': 8, 'u': 9, 'm': 10, 'đ': 11, 'l': 12, 'ư': 13, 'o': 14, 'à': 15, 'y': 16, 'r': 17, 'k': 18, 'v': 19, 'b': 20, 'p': 21, 'ế': 22, 'á': 23, 'ạ': 24, 'ô': 25, 'ó': 26, 'ê': 27, 's': 28, 'ấ': 29, 'ờ': 30, 'â': 31, 'ả': 32, 'ộ': 33, 'ì': 34, 'ơ': 35, 'ớ': 36, 'ã': 37, 'd': 38, 'ệ': 39, 'ố': 40, 'ể': 41, 'ậ': 42, 'q': 43, 'ầ': 44, 'ề': 45, 'ắ': 46, 'ú': 47, 'ủ': 48, 'ợ': 49, 'ồ': 50, 'ọ': 51, 'x': 52, 'ị': 53, 'í': 54, 'ừ': 55, 'ứ': 56, 'ò': 57, 'ữ': 58, 'ở': 59, 'ự': 60, 'e': 61, 'ă': 62, 'ử': 63, 'ụ': 64, 'ũ': 65, 'ù': 66, 'ặ': 67, 'ỏ': 68, 'ỉ': 69, 'ổ': 70, 'ĩ': 71, 'ý': 72, 'é': 73, 'ằ': 74, 'ỗ': 75, 'ẽ': 76, 'ẳ': 77, 'ẫ': 78, 'ẻ': 79, 'ỷ': 80, 'ẩ': 81, 'õ': 82, 'ẹ': 83, 'ỳ': 84, 'ễ': 85, 'ỡ': 86, 'è': 87, 'ỹ': 88, 'ỵ': 89, 'ẵ': 90, 'f': 91, 'w': 92, 'j': 93, 'z': 94, '{': 95} vocab size: 96
Layer (type) Output Shape Param #
Start training char model, model type: left2right, last epoch: 0
Init SaveModel callback, ckpt_path: ckpt, model_path: model, model_prefix: CharLM, model_name: VNTQcorpus-small, model_type: left2right, ckpt_period:
Save check point file: ckpt/CharLM_VNTQcorpus-small_left2right_000.h5
Save check point file: ckpt/CharLM_VNTQcorpus-small_left2right_001.h5 Epoch 3/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_left2right_002.h5 Epoch 4/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_left2right_003.h5 Epoch 5/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_left2right_004.h5 Save model file: model/CharLM_VNTQcorpus-small_left2right.h5
Training char model time total: 2611.6571700572968
3817 Đây là mô hình mức kí tự trái sang phải, đối với mô hình này sẽ duyệt từng kí tự từ trái sang phải
Mô hình ngôn ngữ mức kí tự từ phải sang trái
Model predefine param, epochs: 50, batchSize: 512
Start create char sequences, total lines: 197931 , sequence length:
Load sequence data done, total lines: 24768227
Load sequence data done, first sequence: mìt
First sequence: [10, 34, 4] char_index: {' ': 1, 'n': 2, 'h': 3, 't': 4, 'g': 5, 'i': 6, 'c': 7, 'a': 8, 'u': 9, 'm': 10, 'đ': 11, 'l': 12, 'ư': 13, 'o': 14, 'à': 15, 'y': 16, 'r': 17, 'k': 18, 'v': 19, 'b': 20, 'p': 21, 'ế': 22, 'á': 23, 'ạ': 24, 'ô': 25, 'ó': 26, 'ê': 27, 's': 28, 'ấ': 29, 'ờ': 30, 'â': 31, 'ả': 32, 'ộ': 33, 'ì': 34, 'ơ': 35, 'ớ': 36, 'ã': 37, 'd': 38, 'ệ': 39, 'ố': 40, 'ể': 41, 'ậ': 42, 'q': 43, 'ầ': 44, 'ề': 45, 'ắ': 46, 'ú': 47, 'ủ': 48, 'ợ': 49, 'ồ': 50, 'ọ': 51, 'x': 52, 'ị': 53, 'í': 54, 'ừ': 55, 'ứ': 56, 'ò': 57, 'ữ': 58, 'ở': 59, 'ự': 60, 'e': 61, 'ă': 62, 'ử': 63, 'ụ': 64, 'ũ': 65, 'ù': 66, 'ặ': 67, 'ỏ': 68, 'ỉ': 69, 'ổ': 70, 'ĩ': 71, 'ý': 72, 'é': 73, 'ằ': 74, 'ỗ': 75, 'ẽ': 76, 'ẳ': 77, 'ẫ': 78, 'ẻ': 79, 'ỷ': 80, 'ẩ': 81, 'õ': 82, 'ẹ': 83, 'ỳ': 84, 'ễ': 85, 'ỡ': 86, 'è': 87, 'ỹ': 88, 'ỵ': 89, 'ẵ': 90, 'f': 91, 'w': 92, 'j': 93, 'z': 94, '{': 95} vocab size: 96
Layer (type) Output Shape Param #
Start training char model, model type: right2left, last epoch: 0
Init SaveModel callback, ckpt_path: ckpt, model_path: model, model_prefix: CharLM, model_name: VNTQcorpus-small, model_type: right2left, ckpt_period:
Save check point file: ckpt/CharLM_VNTQcorpus-small_right2left_000.h5 Epoch 2/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_right2left_001.h5 Epoch 3/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_right2left_002.h5 Epoch 4/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_right2left_003.h5 Epoch 5/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_right2left_004.h5 Epoch 6/50
Save check point file: ckpt/CharLM_VNTQcorpus-small_right2left_005.h5 Save model file: model/CharLM_VNTQcorpus-small_right2left.h5
Training char model time total: 3109.42388129234316446
Sau khi xử lý dữ liệu và huấn luyện tập dữ liệu, ta thu các mô hình ngôn ngữ mức kí tự từ hai phía tương ứng
Để đánh giá mức kí tự, trước tiên chúng ta sử dụng mô hình ngôn ngữ để tạo ra danh sách các kí tự thay thế có xác suất cao nhất từ vector xác suất đầu ra.
Sau đó ứng với mỗi ứng viên ta tiến hành các hành động sau:
- Thay thế kí tự hiện sai tại bằng kí tự ứng viên đó
- Xoá kí tự hiện tại
- Thêm kí tự ứng viên vào trước kí tự hiện tại
4.1.3 Mô hình ngôn ngữ mức từ
Kiến trúc mô hình ngôn ngữ mức từ:
Hình 4.3 Kiến trúc hiện thực mô hình ngôn ngữ mức từ
Mô hình này tương tự như mô hình mức ký tự nhưng đơn giản hơn do lượng dữ liệu huấn luyện ở mức từ ít hơn Các trọng số lớp embedding được huấn luyện trước với mô hình CBOW và Skip-gram, sau đó được tải lên mà không cập nhật trong quá trình huấn luyện Kích thước lớp cuối cùng thay đổi tùy theo bộ dữ liệu, và việc giữ nguyên sẽ làm giảm chất lượng mô hình do chứa nhiều tên riêng và nhiễu Để cải thiện chất lượng, trong quá trình huấn luyện với dữ liệu wiki, chỉ giữ lại những từ có tần suất xuất hiện trên 10 lần, giúp giảm thiểu nhiễu Kết quả là số lượng từ vựng trong tập dữ liệu wiki còn khoảng 17,000 từ, với tất cả các mô hình sử dụng độ dài chuỗi là 10.
Mô hình ngôn ngữ mức từ từ trái sang phải
Model predefine param, epochs: 50, batchSize: 512
Corpus file: dataset/VNTQcorpus-small.txt , sequences file: dataset/VNTQcorpus-small_left2right_word_sequences.txt , proceeded_file: dataset/VNTQcorpus-small_proceeded.txt , right_size? False
Start create sequences, total lines: 197931 , sequence length: 5
Load sequence data, total lines: 5297626
Word vector keys size: 9992 , vocab size: 9993
_ Layer (type) Output Shape Param #
Trainable params: 6,381,833 Non-trainable params: 999,300
Start training model, model type: left2right, last epoch: 0
Init SaveModel callback, ckpt_path: ckpt, model_path: model, model_prefix: WordLM, model_name: VNTQcorpus-small, model_type: left2right, ckpt_period: 1
Save check point file: ckpt/WordLM_VNTQcorpus-small_left2right_022.h5
Save model file: model/WordLM_VNTQcorpus-small_left2right.h5
Training time total: 5979.9904720783233694 Mô hình ngôn ngữ mức từ từ phải sang trái
Model predefine param, epochs: 50, batchSize: 512
Start create sequences, total lines: 197931 , sequence length: 5
Load sequence data, total lines: 5297626
Load sequence data, first lines: tìm
Load sequence data, line length: 1
Word vector keys size: 9992 , vocab size: 9993
Layer (type) Output Shape Param # ================================================================= embedding_1 (Embedding) (None, 5, 100) 999300
Start training model, model type: right2left, last epoch: 0
Init SaveModel callback, ckpt_path: ckpt, model_path: model, model_prefix: WordLM, model_name: VNTQcorpus-small, model_type: right2left, ckpt_period: 1
Save check point file: ckpt/WordLM_VNTQcorpus-small_right2left_025.h5
Save model file: model/WordLM_VNTQcorpus-small_right2left.h5
Sau khi xử lý dữ liệu và huấn luyện tập dữ liệu, ta thu các mô hình ngôn ngữ mức từ từ hai phía tương ứng
Chúng ta sử dụng mô hình ngôn ngữ để tạo ra danh sách các từ ứng viên có xác suất cao nhất từ vector đầu ra Tiếp theo, chúng ta tính toán khoảng cách giữa từng từ ứng viên và từ cần thay thế, sau đó chọn từ có khoảng cách gần nhất.
* Kết hợp mô hình ngôn ngữ để kết hợp và sửa lỗi chính tả (mức kí tự và mức từ)
Bằng cách sử dụng vector xác suất đầu ra từ mô hình ngôn ngữ, chúng ta có thể phát hiện các lỗi trong văn bản, cụ thể là những từ hoặc ký tự có xác suất thấp hơn một ngưỡng nhất định.
Việc sử dụng vector xác suất cho phép chúng ta tìm kiếm từ hoặc ký tự có xác suất cao để thay thế cho các từ hoặc ký tự sai Do đó, chúng ta sẽ dựa vào điều này để quyết định sửa lỗi bằng cách kết hợp nhiều mô hình ngôn ngữ khác nhau.
So sánh giữa 2 mô hình ở mức kí tự và mức từ
Vạn vật trong vũ trụ đều tồn tại dưới ảnh hưởng của các yếu tố như âm và dương Sự cân bằng giữa âm và dương tạo nên trung khí, góp phần duy trì sự hài hòa trong tự nhiên Việc hiểu rõ về mối quan hệ này giúp ta nhận thức sâu sắc hơn về sự sống và các hiện tượng xung quanh.
Hình 4.4 Mô hình sửa lỗi ở mức kí tự
Hình 4.5 Mô hình sửa lỗi ở mức từ
Nhận xét: Ở bảng so sánh cùng 1 dữ liệu đầu vào, nhưng cho kết quả khác nhau
- Đối với mức kí tự: Sửa lỗi trong Tiếng Việt độ chính xác không cao
Đối với việc sửa lỗi trong Tiếng Việt, độ chính xác cao hơn đạt được ở mức từ so với mức kí tự Để nâng cao độ chính xác của mô hình, việc kết hợp cả hai mức kí tự và mức từ là cần thiết.
Mô hình phát hiện và sửa lỗi
Sử dụng vector xác suất đầu ra của mô hình ngôn ngữ, chúng ta có thể phát hiện các lỗi trong văn bản bằng cách xác định những từ hoặc ký tự có xác suất thấp hơn một ngưỡng nhất định Chẳng hạn, trong văn bản “hoạt độnng”, mô hình ngôn ngữ mức ký tự cho thấy xác suất của ký tự “n” thứ hai rất nhỏ: P(n|hoạt độn) = 0.0001 Điều này cho phép chúng ta nhận diện ký tự “n” thứ hai là một lỗi cần được sửa chữa.
Bằng cách sử dụng vector xác suất, chúng ta có thể tìm kiếm các từ hoặc ký tự có xác suất cao để thay thế cho những từ hoặc ký tự sai Đối với mô hình ngôn ngữ, độ dài chuỗi đầu vào càng dài thì độ chính xác của kết quả đầu ra càng cao Do đó, quyết định sửa lỗi sẽ dựa vào mô hình ngôn ngữ nào khi kết hợp nhiều mô hình khác nhau Quy trình kiểm tra lỗi chính tả bao gồm hai giai đoạn chính: phát hiện lỗi và sửa lỗi.
Hình 4.6 Kết hợp nhiều mô hình ngôn ngữ để sửa lỗi
Sau khi đưa chuỗi văn bản vào các mô hình, chúng ta sẽ xác định được vị trí lỗi mà mỗi mô hình phát hiện Tiếp theo, chúng ta tính toán offset của vị trí lỗi đó so với đầu chuỗi đối với các mô hình left2right, và so với cuối chuỗi đối với các mô hình right2left.
Mô hình sẽ xác định vị trí có độ lệch lớn nhất để tiến hành sửa lỗi Sau khi thực hiện sửa chữa, quá trình kiểm tra sẽ tiếp tục cho đến khi không còn lỗi nào xuất hiện Giai đoạn sửa lỗi sử dụng mô hình ngôn ngữ sẽ được trình bày trong phần tiếp theo.
4.2.1 Sử dụng mô hình ngôn ngữ mức kí tự để sửa lỗi Để sửa lỗi bằng mô hình ngôn ngữ ở mức kí tự, đầu tiên ta dùng mô hình ngôn ngữ mức kí tự sinh ra một danh sách các kí tự ứng viên (candidate char) thay thế là các kí tự có xác suất cao nhất trong vector xác suất đầu ra
• Thay thế kí tự hiện sai tại bằng kí tự ứng viên đó
• Xoá kí tự hiện tại
Thêm kí tự ứng viên vào trước kí tự hiện tại, sau đó tính toán lại xác suất lookahead cho vị trí hiện tại Cuối cùng, chọn hành động có xác suất lookahead cao nhất để tối ưu hóa quá trình.
Hình 4.7 Minh hoạ dùng mô hình mức kí tự để sửa lỗi
Trong quá trình xử lý văn bản, khi gặp lỗi chính tả ở chữ "hoạt động", ta nhập chuỗi "hoạt độn" vào mô hình ngôn ngữ Mô hình sẽ cung cấp danh sách các ký tự thay thế, trong đó ký tự "g" có xác suất cao nhất Tiếp theo, chúng ta sẽ thực hiện các tùy chọn sửa lỗi có thể cho ký tự "g".
• Xoá kí tự hiện tại, chuỗi đầu vào trở thành “hoạt động”
• Thay thế kí tự hiện tại, chuỗi đầu vào trở thành “hoạt độngg”
• Thêm vào trước kí tự hiện tại, chuỗi đầu vào trở thành “hoạt độngng”
Sau khi tính xác suất lookahead cho cả 3 trường hợp, ta chọn trường hợp xoá kí tự bởi vì xác suất lookahead là lớn nhất
Chúng ta thực hiện các hành động tương tự cho tất cả các ký tự ứng viên còn lại, và cuối cùng, chọn ký tự ứng viên có xác suất lookahead cao nhất.
4.2.2 Sử dụng mô hình ngôn ngữ mức từ để sửa lỗi Để sửa lỗi bằng mô hình ngôn ngữ ở mức từ, đầu tiên ta dùng mô hình ngôn ngữ mức từ sinh ra một danh sách các từ ứng viên (candidate word) là các từ có xác suất cao nhất trong vector đầu ra Sau đó, ta tính khoảng cách edit distance giữa từng từ ứng viên và từ cần thay thế rồi chọn từ có khoảng cách edit distance nhỏ nhất
Hình 4.8 Minh hoạ dùng mô hình mức từ để sửa lỗi
Trong danh sách các từ thay thế cho từ sai hiện tại, từ “động” có khoảng cách edit_distance thấp nhất, vì vậy đây là lựa chọn tối ưu để thay thế cho từ hiện tại.
Chương trình demo (thực nghiệm)
Hình 4.9 Ứng dụng chạy thực nghiệm của luận văn
Chức năng kiểm tra và sửa lỗi chính tả
Hình 4.11 Kết quả kiểm tra và sửa lỗi chính tả Tiếng Việt