Sửa một lần nhiều lỗi chính tả giống nhau năm 2024
Trong đời sống hàng ngày, chúng ta gặp các văn bản có chứa lỗi chính tả là rất nhiều. Đặc biệt, các mô hình học máy có dự đoán đầu ra là 1 văn bản mà độ chính xác chưa cao, thì kết quả dự đoán đó có thể có nhiều lỗi chính tả. Show Symspell Correction là 1 giải pháp mà mọi người có thể tham khảo, với chức năng là đưa 1 văn bản có lỗi chính tả thành 1 văn bản đúng. SymspellSymspell là 1 phương pháp sử dụng kỹ thuật Fuzzy Search (còn gọi là Approximate Search) để tìm kiếm 1 chuỗi "gần giống" (thay vì giống hệt) so với chuỗi ban đầu. Ví dụ: Khi chúng ta có chuỗi đầu vào là "Lậpp trinh ứng dung", rõ ràng chuỗi này đã sai chính tả hoàn toàn (cụ thể là 3 lỗi), thì bằng Symspell chúng ta có thể trả về kết quả "Lập trình ứng dụng". Kỹ thuật Fuzzy Search có thể được thực hiện bằng nhiều thuật toán khác nhau, như: Substring Comparison, Levenshtein distance, Longest common substring, ... Symspell sử dụng Fuzzy Search thông qua thuật toán Xóa đối xứng (Symmetric Delete). Thuật toán này nhanh gấp 1 triệu lần so với những thuật toán thông thường khác. Thuật toán xóa đối xứng này giảm độ phức tạp trong việc chỉnh sửa chuỗi ban đầu để có 1 ứng cử viên cũng như việc tra cứu trong bộ từ điển cho khoảng cách chỉnh sửa Damerau-Levenshtein. Nó có thể nhanh hơn 6 lần so với cách tiếp cận thông thường là: thêm, sửa, xóa, chuyển vị trí. Thuật toán này cũng hỗ trợ đa ngôn ngữ Khoảng cách chỉnh sửa là số thao tác trên mỗi ký tự trong chuỗi ban đầu để đưa ra 1 chuỗi ứng cử viên. Chúng ta cùng đi qua 3 loại chỉnh sửa lỗi chính tả được nhắc đến trong Symspell Correction: Chỉnh sửa 1 từ đơnLookup là 1 phương thức cho phép chỉnh sửa 1 từ đơn với tốc độ cao, với 1 số tham số như sau:
Kết quả là:
Với kết quả này, có thể thấy thuật toán xóa đối xứng nhanh hơn 1870 lần so với BK-tree, và 1 triệu lần so với thuật toán của Norvig. Chỉnh sửa 1 chuỗi nhiều từ (cụm từ)Trong trường hợp này, Symspell sử dụng phương thức LookupCompound để hỗ trợ việc phân cách hoặc xóa phân cách trong các trường hợp lỗi chính tả:
Có 1 số tham số như sau:
Ví dụ: Với chuỗi đầu vào là:
Kết quả đầu ra với khoảng cách chỉnh sửa là 9:
Tốc độ là 0.2 ms/từ, tương ứng với 5000 từ/s Chỉnh sửa 1 chuỗi bị thiếu dấu cáchTrong trường hợp chuỗi đầu vào không bị sai chính tả ngoại trừ việc các dấu cách bị xóa, thì Symspell hỗ trợ phương thức WordSegmentation Phương thức này có 1 số đối số như sau:
Ví dụ: Chuỗi đầu vào như sau:
Kết quả đầu ra là:
Tốc độ xử lý cho 1 chuỗi đầu vào có 185 ký tự mất 4 ms để có kết quả gồm 53 từ Xây dựng bộ từ điểnĐộ chính xác của phương pháp Symspell Correction phụ thuộc chủ yếu vào chất lượng của bộ từ điển mà chúng ta có. Có nhiều bộ từ điển có sẵn và các bạn có thể tham khảo Cấu trúc bộ từ điển:
Mọi người có thể tham khảo nhiều bộ từ điển có sẵn ở github này, trong đó có cả Tiếng Việt. Mọi người cũng có thể tự xây dựng 1 bộ từ điển theo đúng định dạng của mình. Đương nhiên, dữ liệu trong bộ từ điển càng lớn thì độ chính xác của phương pháp càng cao, nhưng tốc độ xử lý thì lại lâu hơn. |