Levenshtein Distance
Khoảng cách chỉnh sửa giữa hai chuỗi. Số lượng tối thiểu các phép chèn, xóa và thay thế cần thiết để biến đổi một chuỗi thành chuỗi khác.
Khoảng cách Levenshtein (khoảng cách chỉnh sửa) là thước đo biểu diễn số lượng tối thiểu các phép chèn, xóa và thay thế ký tự cần thiết để biến đổi một chuỗi thành chuỗi khác. Nó được đề xuất bởi nhà toán học Nga Vladimir Levenshtein năm 1965. Là phương pháp đo lường định lượng mức độ "tương tự" của hai chuỗi, nó được sử dụng trong nhiều lĩnh vực khoa học máy tính.
Ví dụ cụ thể, khoảng cách Levenshtein giữa "kitten" và "sitting" là 3: thay k bằng s, thay e bằng i, và chèn g ở cuối. Khoảng cách 0 nghĩa là hai chuỗi giống nhau, và khoảng cách lớn hơn cho thấy sự khác biệt lớn hơn giữa các chuỗi. Sách thuật toán chuỗi bao gồm chi tiết phương pháp tính toán.
Phép tính sử dụng quy hoạch động (DP). Cho hai chuỗi có độ dài m và n, ma trận (m+1) x (n+1) được xây dựng, ghi lại khoảng cách chỉnh sửa tối thiểu giữa các chuỗi con trong mỗi ô. Độ phức tạp thời gian là O(mn) và độ phức tạp không gian cũng là O(mn), mặc dù tối ưu hóa chỉ giữ lại hàng trước có thể giảm độ phức tạp không gian xuống O(min(m,n)).
Ứng dụng kinh điển của khoảng cách Levenshtein là kiểm tra chính tả. Khi từ người dùng nhập không tìm thấy trong từ điển, khoảng cách chỉnh sửa đến tất cả từ trong từ điển được tính, và các từ có khoảng cách nhỏ được trình bày làm ứng viên sửa lỗi. Tính năng "Có phải bạn muốn tìm" của Google Search dựa trên nguyên tắc này. Fuzzy matching cũng sử dụng khái niệm này, trả về kết quả trong khoảng cách chỉnh sửa nhất định thay vì yêu cầu khớp chính xác, cho phép tìm kiếm chấp nhận lỗi chính tả.
Trong tin sinh học, các biến thể của khoảng cách Levenshtein được sử dụng để so sánh chuỗi DNA và protein. Vì chi phí chèn, xóa và thay thế không đồng đều trong so sánh chuỗi sinh học, khoảng cách chỉnh sửa có trọng số với chi phí khác nhau cho mỗi phép toán và thuật toán Needleman-Wunsch với hình phạt khoảng trống đã được phát triển. Sách cơ bản NLP cung cấp thêm ngữ cảnh.
Các thước đo tương tự bao gồm khoảng cách Hamming (số vị trí khác nhau giữa chuỗi cùng độ dài), khoảng cách Damerau-Levenshtein (cũng đếm hoán vị ký tự liền kề là một phép toán) và khoảng cách Jaro-Winkler (nhấn mạnh khớp ở đầu chuỗi). Chọn thước đo khoảng cách phù hợp cho trường hợp sử dụng là quan trọng.
Từ góc độ đếm ký tự, khoảng cách Levenshtein là phương pháp cơ bản để định lượng độ tương tự văn bản ở cấp ký tự. Nó được sử dụng ở bất cứ đâu cần so sánh chuỗi: phát hiện diff văn bản, quản lý phiên bản, phát hiện đạo văn và đánh giá chất lượng dịch máy (TER: Translation Edit Rate). Đối với tập dữ liệu lớn, chi phí tính toán trở thành thách thức, vì vậy các phương pháp tìm kiếm xấp xỉ hiệu quả sử dụng BK-tree và cấu trúc trie đã được phát triển.