Căn cứ vào mô hình N-gram, cụ thể là Bigram và dựa vào ý tưởng của việc thống kê các cụm tiếng, luận văn đề xuất mô hình thêm dấu tự động như sau:
Hình 3.4 Lưu đồ thực hiện của mô hình đề xuất
Hay có thể mô phỏng sơ đồ hệ thống như sau (Do khối hậu xử lí không quan trọng nên không minh họa trong sơ đồ này):
Bắt đầu Tiền xử lí Tách cụm tiếng Tập các từ khả năng thêm dấu Chọn các khả năng thêm dấu theo xác
suất N-gram Từ điển chuyển đổi
sử dụng N-gram
Hình 3.5 Mô hình tổng quát
Mô hình trên gồm 3 phần: Tiền xử lí, xử lí chính và hậu xử lí. Chức năng của mỗi phần được tóm tắt như sau:
* Khối tiền xử lí:
- Tách văn bản đầu vào thành từng “cụm tiếng” – là những chuỗi liên tục các tiếng mà giữa chúng không có ngắt câu, ngắt đoạn nào.
- Tách cụm tiếng thành từng tiếng riêng biệt.
- Lọc ra các cụm tiếng Anh, các tên riêng, các từ phiêm âm tiếng nước ngoài, các tiếng viết tắt, các chữ số, các kí hiệu đặc biệt,... để xử lí riêng.
* Khối xử lí chính: Bắt đầu Tách cụm tiếng Tách tiếng Lọc nhiễu Tách tiếng bằng LRMM kết hợp với Heuristic Tiếng có
trong từ điển? Phát sinh gợi ý
Có ứng viên? Người dùng Tiếng hợp lệ? Kết thúc Đ S Đ Đ Đ S S
- Đối chiếu từ điển tần số bigram với các tiếng đã tách, tiếng nào mà không có trong từ điển sẽ được báo cho người dùng biết để ra quyết định.
- Dựa vào bigram tiếng kết hợp phương pháp Heuristic và LRMM, nếu phát hiện tiếng nào không phù hợp với ngữ cảnh, hoặc tạo ra những tiếng sai chính tả (nhưng các tiếng đó vẫn có trong từ điển) sẽ báo cho người dùng quyết định.
- Chọn ra các khả năng thêm dấu chấp nhận được theo các xác suất bigram đã xây dựng.
* Khối hậu xử lí:
- Kết hợp câu đầu vào và các phương án sửa lỗi để tái tạo văn bản đúng chính tả, đúng với định dạng của văn bản đầu vào.
- Ngoài ra, trong khối còn có thể xử lí thêm một số chức năng phụ như: tổng kết các tập khả năng thêm dấu, thông báo cho người dùng xem xét để phục hồi lại nếu cần, lưu quá trình kiểm lỗi vào file log,... để tăng tính thực tế, giúp chương trình thân thiện với người dùng.
Chi tiết hóa công việc chính trong mỗi khối như sau:
a) Tiền xử lí
* Tách cụm tiếng:
- Do đầu vào là một tập tin văn bản có thể có định dạng, công việc đầu tiên là loại bỏ các đối tượng “lạ” như hình ảnh, tham chiếu, mục lục,... chỉ giữ lại phần text để xử lí.
- Việc tách thành cụm tiếng có hai mục đích. Mục đích thứ nhất là tạo tiền đề cho bước tách tiếng. Mục đích thứ hai, quan trọng hơn, là để tính các xác suất N-gram. Do các tiếng bị ngăn cách bởi các dấu câu xem như không có mối liên hệ với nhau, việc tính xác suất N-gram trên cụm tiếng vừa làm giảm không gian xử lí, vừa không làm giảm tính liên kết và sự tương quan giữa các tiếng với nhau trong văn bản.
Tuy nhiên, việc tách cụm có nhược điểm là sẽ không xử lí được các lỗi về dấu câu. Đây không phải là mục tiêu chính của đề tài.
* Tách tiếng:
Do phần cụm tiếng đã tách ở trên là một chuỗi liên tục các kí tự nên chương trình cần phải tách nó thành từng tiếng riêng biệt để tiện xử lí.
Quá trình tách văn bản đầu vào thành từng tiếng phải qua các giai đoạn sau: - Tách văn bản thành từng đoạn.
- Tách đoạn thành từng “cụm tiếng”. Cụm tiếng là một chuỗi kí tự chữ cái, khoảng trắng, dấu gạch nối,... Việc nhận ra tiếng Anh, lọc ra các cụm toàn tiếng Anh, từ viết tắt, tên riêng, phiên âm,... có thể được giải quyết bằng Heuristic.
- Các cụm tiếng Việt được tách thành từng chuỗi riêng biệt. Mỗi chuỗi tiếng chỉ gồm các kí tự chữ cái (có dấu hoặc không dấu).
* Lọc nhiễu: Sau khi đã có các cụm tiếng, bước tiếp theo là lọc ra những từ tiếng Anh, phiên âm, viết tắt, các kí tự lạ, các chữ số,...
- Nhận diện tiếng Anh:
+ Trong các văn bản tiếng Việt, việc xuất hiện các từ tiếng Anh là điều thường xảy ra, nhất là trong các văn bản khoa học. Việc nhận ra đâu là từ tiếng Anh để không phải thêm dấu là khá quan trọng.
+ Để nhận ra tiếng Anh lẫn trong câu tiếng Việt, hệ thống sẽ phải khử nhập nhằng khi gặp những từ mà cả 2 thứ tiếng đều có. VD: the, to, hi,... Việc này thoạt nhìn thì có vẻ phức tạp. Tuy nhiên, trong thực tế, tiếng Anh lẫn vào tiếng Việt thường có 2 loại: tên riêng và thuật ngữ. Hai loại này hiếm khi gây ra nhập nhằng nên vấn đề sẽ đơn giản hơn. Chỉ cần dùng từ điển tiếng Anh và Heuristic là có thể giải quyết được.
- Nhận diện từ viết tắt: Từ viết tắt có thể được nhận ra bằng một danh sách các từ viết tắt và Heuristic. Thông thường, các từ viết tắt đều là chữ hoa, và phụ âm chiếm tỉ lệ lớn, hoặc đi kèm dấu chấm. VD: CHXHCN, TS. , TW, ĐNA...
- Nhận diện phiên âm: Cho đến nay, vẫn chưa có chuẩn thống nhất về cách phiên âm tiếng nước ngoài, nên việc nhận ra đâu là tiếng phiên âm đâu là tiếng sai chính tả sẽ gặp trở ngại. Trong đề tài, sử dụng Heuristic để xử lí các phiên âm dạng xxx-yyy-zzz. Có nghĩa là các tiếng phiên âm được ngăn cách nhau bằng dấu gạch nối, và không có khoảng trắng giữa chúng. VD: Trê-bư- sép, Lê-nin, công-tắc,... Với những từ phiên âm thông dụng như: axit, bazo, vecto... thì có thể dùng từ điển để nhận ra chúng.
b) Chọn các khả năng thêm dấu theo xác suất N-gram:
Với từ điển chuyển đổi initial.txt để chuyển một từ không dấu thành có dấu. Ngoài ra để tăng độ linh hoạt và chính xác của phương pháp, ta có thể thêm một từ điển phụ, gọi là từ điển cụm từ Cumtu.txt, lưu những cụm từ thường xuyên xuất hiện.
* Phương pháp LRMM (Left Right Maximum Matching).
Theo phương pháp này, ta sẽ duyệt một câu từ trái sang phải và chọn từ có nhiều âm tiết nhất có mặt trong từ điển, rồi cứ thể tiếp tục cho từ kế tiếp đến hết câu. Thuật toán được trình bày trong [Chih-Hao Tsai, 2000].
Dạng đơn giản được dùng giải quyết nhập nhằng từ đơn. Giả sử có một chuỗi kí tự (tương đương với chuỗi tiếng trong tiếng Việt) C1, C2, ... Ta bắt đầu từ đầu chuỗi, đầu tiên ta kiểm tra xem C1 có phải là từ hay không sau đó kiểm tra xem C1C2 có phải từ hay không. Tiếp tục tìm cho đến khi tìm được từ dài nhất. Từ dài nhất là từ có vẻ hợp lí nhất. Chọn từ đó, sau đó tìm tiếp như trên cho những từ còn lại cho đến khi xác định được toàn bộ chuỗi từ.
Dạng phức tạp: Quy tắc của dạng này là phân đoạn, có vẻ hợp lí nhất là đoạn 3 từ với chiều dài tối đa. Thuật toán ban đầu như dạng đơn giản. Nếu phát hiện ra những cách tách từ gây nhập nhằng (ví dụ, C1 là từ và C1C2 cũng là từ), ta xem các chữ kế tiếp để tìm ra tất cả các đoạn 3 từ có thể có ban đầu với C1 hoặc C1C2 Ví dụ, ta được những đoạn sau:
C1C2 C3C4C5 C1C2 C3C4C5C6
Chuỗi dài nhất là chuỗi thứ 3, vậy từ đầu tiên của chuỗi thứ 3 (C1C2) sẽ được chọn. Thực hiện lại các bước cho đến khi được chuỗi từ hoàn chỉnh.
Ưu điểm:
- Với phương pháp này, ta dễ dàng tách được chính xác các ngữ/câu như “hợp tác xã||mua bán”, “thành lập||nước||Việt Nam||dân chủ||cộng hòa”.
- Cách tách từ đơn giản, nhanh, chỉ cần dựa vào từ điển.
- Trong tiếng Hoa, cách này đạt độ chính xác là 98,41% [Chinh-Hao Tsai, 2000].
Hạn chế:
- Độ chính xác của phương pháp phụ thuộc hoàn toàn vào tính đủ, tính chính xác của từ điển.
- Phương pháp này sẽ tách từ sai trong các trường hợp “học sinh ||học sinh||học”; “một||ông||quan tài||giỏi”; “trước||bàn là||một||ly||nước”.
* Lý do chọn phương pháp này là:
- Cài đặt phương pháp đơn giản, thời gian và không gian xử lí ít, lại không đòi hỏi kho ngữ liệu huấn luyện đã được gán nhãn ranh giới từ, trong khi đó độ chính xác của LRMM cũng không quá thấp, sai số khi tách sai từ có thể chấp nhận được khi tách từ không dấu. Thuật toán như sau:
Bước 1: Tách ra các tiếng theo thứ tự từ trái qua phải. Điều kiện tách là các tiếng này tạo thành một từ có trong từ điển hoặc gần giống với một từ có trong từ điển. Sau đó chuyển sang bước 2.
Bước 2: Nếu các tiếng tạo thành từ trong từ điển, dịch tới một tiếng và trở lại bước 1, ngược lại sang bước 3.
Bước 3: Tính xác suất N-gram cho các tiếng lấy được, nếu xác suất lớn hơn ngưỡng, dịch tới một tiếng và trở lại bước 1, ngược lại sang bước 4.
Bước 4: Phát sinh ứng viên thay thế, tính xác suất N-gram cho từng ứng viên. Nếu không tìm được ứng viên tốt hơn, dịch tới một tiếng và trở lại bước 1, ngược lại sang bước 5.
Bước 5: Báo lỗi, nhận quyết định của người dùng, cập nhật lại các xác suất N-gram, dịch tới một tiếng rồi trở lại bước 1.
Nhận xét: Ở thuật toán này, có hai điểm khác biệt với LRMM chuẩn, đó là: - Điểm khác thứ nhất: khi tách từ theo thứ tự từ trái qua phải, hệ thống không chỉ lấy ra các tiếng tạo thành từ có trong từ điển, mà lấy thêm cả các tiếng tạo thành một chuỗi con gần giống với một từ nào đó trong từ điển.
- Điểm khác thứ hai: sau khi tách xong một từ, thuật toán không chuyển đến tiếng liền sau của từ đó trong cụm, mà chỉ dịch tới một nấc. Có nghĩa là, tiếng thứ hai của từ đang xét sẽ trở thành tiếng thứ nhất của từ sắp được xem xét tiếp theo. Điều này giúp hệ thống không bị bỏ sót các trường hợp tối ưu hơn sau khi thêm dấu.
Ví dụ 3.5: Ta có cách tách từ câu có dấu và câu không dấu sau (các từ phân cách nhau bằng dấu /)
“Học sinh / học / sinh học”
“Học sinh / học sinh / học” -> khi chuyển thành câu có dấu cũng tạo được câu “ Học sinh / học sinh / học” như trên -> sai khi tách từ có thể chấp nhận được trong 1 phạm vi nào đó.
Khi tách từ bằng phương pháp LRMM, ta có chú ý đến việc nhận diện và tách các từ tên riêng ra dựa trên một từ điển tên riêng. Việc xác định các tên riêng dựa trên chữ cái viết hoa đầu của từ, một cụm tên riêng có thể chỉ cần viết hoa tiếng đầu tiên là được.
Ví dụ 3.6: Câu “Nhung van de lien quan toi nguoi dong tinh luyen ai duoc ban bac soi noi trong buoi hop nhom toi hom qua” sẽ được chuyển thành câu có dấu qua các bước sau:
Tách cụm tiếng: Tạo ra một cụm tiếng duy nhất là “Nhung van de lien quan toi nguoi dong tinh luyen ai duoc ban bac soi noi trong buoi hop nhom toi hom qua”.
Tách từ ( Các từ phân cách nhau bằng dấu / ): “Nhung / van de / lien quan / toi / nguoi / dong tinh luyen ai / duoc / ban bac / soi noi / trong / buoi / hop / nhom / toi / hom qua”.