Một phần mềm kiểm tra và sửa lỗi chính tả (Spelling Correction) thường có hai chức năng chính: (1) Phát hiện lỗi và (2) Sửa lỗi.
Một trong các thuật toán xác định lỗi chính tả có thể là tra cứu từ điển, sử dụng n-gram, hoặc bằng giải pháp xác suất thống kê. Còn kỹ thuật sửa lỗi có thể là các thuật toán như gợi ý từ đúng chính tả và sửa lỗi. Hầu hết các chương trình sửa lỗi chính tả thường tính toán độ dại giữa từ sai chính tả và từ có trong từ điển. Chiều dài khoản cách giữa từ sai chính tả và từ điển càng ngắn thì xác suất xếp hạng cao hơn những từ khác.
1. Giải quyết bài toán phát hiện lỗi chính tả
Để có thể thiết kế ra một phần mềm kiểm tra lỗi chính tả tương đối hoàn thiện thì một phần mềm kiểm tra lỗi chính tả phải giải quyết được bài toán phát hiện lỗi chính tả với 3 phương pháp như sau:
1.1. Non-word error detection (Phát hiện lỗi từ không tồn tại)
Đây là loại lỗi chính tả xảy ra khi một từ được nhập vào không tồn tại trong từ điển. Ví dụ: "chalong" thay vì "challenge".
Cách thức hoạt động của thuật toán này là: Hệ thống sẽ sử dụng thuật toán n-gram, rồi so sánh từ cần kiểm tra với một từ điển lớn. Nếu từ đó không tìm thấy trong từ điển, nó sẽ được đánh dấu là lỗi.
1.2. Isolated-word error correction (Sửa lỗi từ biệt lập)
Đây là loại lỗi chính tả của một từ đơn lẻ, không xét đến ngữ cảnh xung quanh.
Phương pháp này sẽ sử dụng các kỹ thuật như chỉnh sửa khoản cách tối thiểu (minimum edit distance) với bảng xếp hạng những từ có khoản cách gần nhất (closest words), khoá tương đồng (similarity key), dựa trên quy tắc (rule-based) hoặc n-gram. Rồi hệ thống sẽ gợi ý những từ có khả năng thay thế cao nhất.
1.3. Context-dependent word correction (Sửa lỗi từ phụ thuộc ngữ cảnh)
Đây là lỗi chính tả xảy ra khi xét dựa trên ngữ cảnh của câu, nghĩa là xét đến các từ xung quanh để đưa ra gợi ý sửa lỗi chính xác nhất.
Cách thức hoạt động của kỹ thuật này là hệ thống sử dụng các mô hình ngôn ngữ (NLP), xác suất thống kê để dự đoán từ nào có khả năng xuất hiện cao nhất trong ngữ cảnh đó. Các mô hình này được huấn luyện trên một lượng lớn văn bản để học cách sử dụng ngữ pháp, ngữ nghĩa và các quy tắc ngôn ngữ.
Ví dụ: trong câu "Tôi muốn ăn một quả táo to", nếu bạn gõ nhầm "táo" thành "tao", hệ thống sẽ gợi ý sửa thành "táo" dựa trên ngữ cảnh về thức ăn và kích thước.
Khái niệm | Mô tả | Ưu điểm | Nhược điểm |
---|---|---|---|
Non-word error detection | Phát hiện từ không tồn tại | Đơn giản, hiệu quả | Không phát hiện được lỗi thay thế từ gần giống |
Isolated-word error correction | Sửa lỗi từ biệt lập | Dễ triển khai | Không tận dụng được ngữ cảnh |
Context-dependent word correction | Sửa lỗi dựa trên ngữ cảnh | Chính xác cao, phù hợp với ngôn ngữ tự nhiên | Phức tạp hơn, cần nhiều dữ liệu huấn luyện |
2. Một vài thuật toán xử lý lỗi chính tả quan trọng
Một trong những thuật toán chỉnh sửa khoản cách nổi tiếng nhất phải kể đến là Damerau-Levenshtein. Nó có khả năng phát hiện hơn 80% lỗi chính tả bằng cách: chèn thử một ký tự, xóa một ký tự, thay thế bằng 1 ký tự hoặc 2 ký tự. Cụ thể hơn, Damerau-Levenshtein có nhiệm vụ là thực hiện nhiều thao tác để chuyển đổi từ này sang nhiều từ khác. Vì vậy, nhược điểm của Damerau-Levenshtein là nó tạo ra quá nhiều kết quả có cùng tầm quan trọng như nhau nên khó xếp hạng ưu tiên.
Ngoài thuật toán chỉnh sửa khoán cách, người ta còn sử dụng các thuật toán khác như n-grams, Soundex, Speedcop systems, semantic feature vectors, và thuật toán phonetic indexing.
2.1. Thuật toán n-grams
N-gram là một chuỗi liên tiếp gồm n từ hoặc ký tự trong một văn bản. Ví dụ, trong câu "Xin chào mọi người", các 2-gram bao gồm: "Xin chào", "chào mọi", "mọi người". N-grams được sử dụng để xây dựng các mô hình ngôn ngữ, giúp dự đoán từ tiếp theo trong một câu. Trong phát hiện lỗi chính tả, n-grams được sử dụng để đánh giá khả năng xuất hiện của một chuỗi từ. Nếu một n-gram có xác suất xuất hiện thấp, thì có khả năng cao là có lỗi chính tả.
2.2. Thuật toán Soundex
Soundex là một thuật toán mã hóa âm thanh, chuyển đổi các từ thành một chuỗi các chữ số và chữ cái đại diện cho cách phát âm của từ đó. Ứng dụng: Soundex được sử dụng để tìm các từ có cách phát âm tương tự nhau, mặc dù cách viết có thể khác nhau. Ví dụ, "Smith" và "Smyth" sẽ có cùng một mã Soundex. Trong phát hiện lỗi chính tả, Soundex được sử dụng để gợi ý các từ có cách phát âm gần giống với từ sai.
2.3. Thuật toán Speedcop systems
Speedcop là một hệ thống sửa lỗi chính tả dựa trên quy tắc, sử dụng một cơ sở dữ liệu lớn các lỗi chính tả phổ biến và các quy tắc sửa lỗi tương ứng. Speedcop rất hiệu quả trong việc phát hiện và sửa các lỗi chính tả phổ biến, nhưng ít linh hoạt hơn các thuật toán dựa trên thống kê.
2.4. Semantic feature vectors
Vector đặc trưng ngữ nghĩa là một biểu diễn toán học của nghĩa của một từ, dựa trên mối quan hệ của từ đó với các từ khác trong một không gian vector. Vector đặc trưng ngữ nghĩa được sử dụng để đo lường sự tương đồng về nghĩa giữa các từ. Trong phát hiện lỗi chính tả, chúng ta có thể so sánh vector đặc trưng của từ sai với các từ khác trong từ điển để tìm ra từ có nghĩa gần nhất.
2.5. Thuật toán phonetic indexing
Thuật toán này tạo ra một chỉ số âm vị cho mỗi từ, dựa trên cách phát âm của từ đó. Chỉ số âm vị này được sử dụng để tìm các từ có cách phát âm tương tự nhau. Giống như Soundex, thuật toán phonetic indexing được sử dụng để gợi ý các từ có cách phát âm gần giống với từ sai.
Thuật toán | Ưu điểm | Nhược điểm |
---|---|---|
N-grams | Linh hoạt, hiệu quả | Cần lượng dữ liệu lớn để huấn luyện |
Soundex | Đơn giản, hiệu quả với các lỗi thay thế chữ cái | Không phân biệt được các âm vị phức tạp |
Speedcop systems | Hiệu quả với các lỗi phổ biến | Ít linh hoạt, khó mở rộng |
Semantic feature vectors | Chính xác cao, hiểu được ngữ nghĩa | Cần lượng dữ liệu lớn để huấn luyện, tính toán phức tạp |
Thuật toán phonetic indexing | Tương tự Soundex nhưng chính xác hơn | Vẫn còn một số hạn chế trong việc phân biệt các âm vị |