Một số kỹ thuật nhằm khắc phục nhược điểm

Một phần của tài liệu LUẬN VĂN: KIỂM LỖI CHÍNH TẢ TIẾNG VIỆT doc (Trang 31 - 39)

Về vấn đề của ngôn ngữ thông dịch, chúng tôi đã thực hiện kỹ thuật cải thiện tốc độ của chương trình bằng cách viết lại các thành phần thường xuyên được gọi sang dạng biên dịch. Có nghĩa là, những thành phần được gọi thường xuyên, chúng tôi dịch ra mã máy và để chương trình gọi dưới dạng một hàm (function). Cụ thể:

- Với MySQL, do đặc điểm của PHP khi truy vấn MySQL là chỉ gọi được các query dạng đơn (mỗi query chỉ chứa một lệnh), các cụm truy vấn thường xuyên được gọi liền nhau được chúng tôi viết gộp lại thành StoreProcedure trong MySQL database. Đặc điểm của StoreProcedure là nó được lưu trữ dưới dạng mã máy và có thể gọi dưới dạng một hàm thông qua truy vấn. Việc này giúp cho giảm bớt lượt truy

27

vấn giữa PHP và MySQL, đồng thời các truy vấn MySQL được thực thi nhanh hơn do đã được dịch ra dưới dạng mã máy.

- Với PHP, chúng tôi cũng làm tương tự bởi ngôn ngữ PHP có một đặc điểm lợi thế là có thể viết các extensions dạng dll(Dynamic Linking Library) để mở rộng tùy ý. Extension được chúng tôi viết bằng ngôn ngữ C++, một ngôn ngữ đặc biệt tối ưu về mã lệnh thực thi.

Vấn đề tiếp theo là vấn đề về xử lý đơn tiến trình. Chúng tôi thực hiện 2 kỹ thuật để giải quyết vấn đề này. Về xử lý đa tiến trình, chúng tôi lợi dụng đặc điểm: PHP và MySQL được chạy với 2 tiến trình riêng biệt trên server. Do đó, chúng tôi sử dụng StoreProcedure để kết hợp xử lý tính toán sử dụng đồng thời 2 tiến trình khác nhau đó. Cụ thể, chúng tôi sử dụng MySQL để truy vấn dữ liệu và tính toán các xác suất ngram, đồng thời sử dụng PHP để lựa chọn âm tiết theo giải thuật nêu trên dựa vào các giá trị xác suất trả về từ MySQL. Phương pháp này giúp tăng đáng kể tốc độ của chương trình: khi chưa kết hợp, nếu một request kiểm tra một câu trung bình mất 3-6 giây, thì sau khi kết hợp thời gian chỉ còn khoảng từ 0.8-1.2 giây.

Một kỹ thuật nữa chúng tôi áp dụng để khiến CPU xử lý nhiều luồng đó là lợi dụng chính đặc điểm mỗi request được thực hiện với một thread, chúng tôi sử dụng XmlHttpRequest để chia công việc ra làm nhiều request khác nhau và gửi đến server cùng lúc. Sau khi toàn bộ các request được hoàn thành, chúng tôi tổng hợp lại kết quả cuối cùng. Chúng tôi áp dụng thủ thuật này cho việc kiểm tra chính tả của một đoạn văn. Đầu tiên, đoạn văn được phân tích thành các câu, sau đó mỗi câu sẽ được gửi đến server theo các request riêng biệt để xử lý. Kết quả được tổng hợp lại khi tất cả các câu đã được xử lý xong. Cách giải quyết này cũng mang lại hiệu quả nhất định: khi chỉ sử dụng một request, nếu một đoạn văn gồm 10 câu mất một khoảng thời gian là 1phút, thậm chí có khi đến 3 phút để kiểm tra (!) thì khi sử dụng 10 request riêng biệt, thời gian thực thi chỉ từ 15-20 giây. Chúng tôi cũng sử dụng kỹ thuật này cho quá trình huấn luyện, thời gian đã giảm từ 3 ngày (chưa xong) xuống chỉ còn khoảng 9-10 giờ là hoàn thành. Có sự chênh lệch lớn như vậy là do CPU không sử dụng hết năng lực của nó khi nó không bị ép buộc.

Một kỹ thuật khác chúng tôi sử dụng để tăng tốc độ quá trình truy vấn dữ liệu cũng như huấn luyện là việc lợi dụng đặc tính của MySQL là tự động Index dữ liệu dựa vào Primary Key. Công việc tìm kiếm dữ liệu văn bản (full text search) trong MySQL tốn khá nhiều thời gian, do đó chúng tôi đã mã hóa dãy các âm tiết có thứ tự của thống kê n-gram thành mã MD5 và dùng mã này làm Primary Key. Mã hóa MD5

28

là mã hóa một chiều 128bit do đó có thể coi mã đó là duy nhất đối với một tổ hợp các âm tiết nhất định. Mẹo này khá đơn giản, nhưng hiệu quả mà nó đem lại rất lớn. Ta có thể thấy rõ điều này: trong quá trình huấn luyện, nếu sử dụng các truy vấn tìm kiếm thông thường, tốc độ nhập dữ liệu là 40-50 bản ghi/giây (!), so với tốc độ xấp xỉ 5000 bản ghi/giây khi sử dụng Primary Key dạng mã hóa.

Mặc dù thông tin về các âm tiết và thứ tự của chúng đã có trong mã MD5, chúng tôi vẫn giữ lại các trường chứa âm tiết để lợi dụng chức năng nén dữ liệu của MySQL. Thực tế khi chúng tôi xóa bỏ 3 trường âm tiết của bảng thống kê trigram, kích thước tệp dữ liệu đã tăng từ hơn 700MB lên gần 1.5GB.

Ngoài ra còn một số kỹ thuật nhỏ khác như tăng bộ đệm cho truy vấn, mã thực thi… cũng được chúng tôi áp dụng. Chúng tôi sẽ tiếp tục cải tiến trong quá trình phát triển luận văn và chương trình.

29

Kết luận

Luận văn đã trình bày cách tiếp cận, và một phương pháp giải quyết bài toán kiểm lỗi chính tả tiếng Việt. Trọng tâm của luận văn là sử dụng mô hình ngôn ngữ N- gram để kiểm lỗi chính tả cảm ngữ cảnh tiếng Việt. Các kết quả chính đạt được là:

- Nắm được mô hình ngôn ngữ N-gram và ứng dụng nó vào bài toàn kiểm lỗi chính tả tiếng Việt, tận dụng được nguồn tài nguyên dồi dào trên internet để giải quyết bài toán nhằm giảm công sức con người.

- Cài đặt chương trình ứng dụng trên internet Các vấn đề tồn tại:

- Tỉ lệ sửa lỗi chính xác còn chưa cao do chỉ sử dụng duy nhất phương pháp thống kê N-gram vào việc kiểm lỗi.

- Tốc độ chương trình còn chưa cao.

Qua kết quả của luận văn cho thấy, mặc dù độ chính xác chưa cao nhưng nó cho ta thấy tầm quan trọng của việc sử dụng mô hình ngôn ngữ N-gram trong bài toàn kiểm lỗi chính tả nói chung và kiểm lỗi chính tả tiếng Việt nói riêng. Bên cạnh đó, tốc độ của chương trình tuy chưa cao nhưng khả năng tối ưu chương trình vẫn còn rất lớn.

Chúng tôi tin tưởng rằng độ chính xác sẽ được nâng cao đáng kể khi kết hợp với các phương pháp học máy và ra quyết định khác. Đồng thời sử dụng các thuộc tính và các tri thức ngôn ngữ nâng cao hơn nữa.

Như vậy, luận văn đã cho thấy khả năng ứng dụng rộng rãi của các chương trình thực thi trên nền web – internet, đặc biệt là với bài toán có tính ứng dụng thực tiễn cao như bài toán kiểm lỗi chính tả.

Hướng nghiên cứu của chúng tôi là:

- Sử dụng các tri thức ngôn ngữ nâng cao hơn như từ, ngữ pháp, ngữ nghĩa. - Tối ưu hóa tốc độ và bộ nhớ cho các quá trình kiểm lỗi.

- Kết hợp các mô hình ngôn ngữ khác để kiểm lỗi chính tả như Maximum Entropy

30

Phụ lục

Phụ lục 1: Bảng kết hợp nguyên âm với các phụ âm gi, qu

Nguyên âm Không Gi Qu

oai x oay x uây x uôi x iêu x uyê x ươu x ươi x uya x yêu x uyu x ai x x ao x au x ay x x âu x ây x x eo x x êu x ia x iu x iê x

31 oa x oă x oe x oi x oo x ôi x ơi x x ua x uâ x ui x uê x uô x uơ x uy x ưa x ưi x ươ x ưu x yê x a x x ă x x â x x e x x ê x x i x o x (adsbygoogle = window.adsbygoogle || []).push({});

32 ô x ơ x x u x ư x y x

Phụ lục 2: Bảng một số lỗi phát âm tiếng Việt

CH- TR- D- GI- R- D- GI- V- L- N- S- X- -C -T -N -NG -AI -AY -ANH -ĂN -EM -ÊM -ÊCH -ÊT -IÊM -IM -IÊU -IU -IÊU -ƯƠU -OAI -OI

-OM -ÔM -ƠM

Hỏi Nặng

33

Tài liệu tham khảo

Tiếng Anh

[1] Daniel Jurafsky & James H. Martin. Speech and language processing: An introduction to speech recognition, computational linguistics and natural language processing. 2007.

[2] Department of Computer Science, Columbia University, 2009, N-Grams and Corpus Linguistics, Lecture.

[3] Georgetown University, Introduction to Natural Language Processing, Autumn 2005, Course’s Lecture.

[4] Julia Hockenmaier, Introduction to NLP, Fall 2008, Lecture 3: Probability theory, N-grams and perplexity.

Tiếng Việt

[5] Cao Văn Việt, Xây dựng mô hình ngôn ngữ cho tiếng Việt, 2010, Luận văn tốt nghiệp, Hà Nội.

[6] Đoàn Xuân Kiên, Xem lại một vấn đề ngữ âm tiếng Việt: Cấu trúc âm tiết, 1998, Tập san Hợp Lưu 48.

[7] Đinh Thị Phương Thu, Huỳnh Quyết Thắng, Nguyễn Văn Lợi. Sử dụng cấu tạo âm tiết tiếng Việt hai thành phần trong bài toàn kiểm tra chính tả tiếng Việt, 10/2007, tạp chí BCVT & CNTT kỳ 3.

[8] Hoàng Phê, Chính tả tiếng Việt, 1999, Nhà xuất bản Đà Nẵng.

[9] Hoàng Phê (chủ biên), Từ điển tiếng Việt, 2002, Nhà xuất bản Đà Nẵng.

[10] Ngonngu.net, Âm tiết và đặc điểm âm tiết tiếng Việt, 2006,

http://ngonngu.net/index.php?p=60

[11] Nguyễn Phương Thái, Kiểm lỗi chính tả cảm ngữ cảnh tiếng Việt, 2003, Luận văn thạc sĩ, Hà Nội.

[12] Nguyễn Gia Định, Trần Thanh Lương, Thuật toán kiểm tra âm tiết tiếng việt dựa trên luật cấu tạo âm tiết, 2004, Trường Đại học Khoa học - Đại học Huế, Tạp chí khoa học – Đại học Huế, Số 25.

34

[13] Trung Tâm Từ Điển Học - Vietnam Lexicography Centre, Quy tắc đặt dấu thanh trong tiếng Việt, http://www.vietlex.vn/lib/compuLinguistics/quytacbodau.htm

[14] Ủy ban khoa học xã hội Việt Nam, Ngữ pháp tiếng Việt, Nhà xuất bản Khoa học Xã hội – Hà Nội, 1983.

Một phần của tài liệu LUẬN VĂN: KIỂM LỖI CHÍNH TẢ TIẾNG VIỆT doc (Trang 31 - 39)