min Ee [n] Ex [n]
1.5.1.2 Giải thuật DTW đối xứng
Tiếng nói là một quá trình phụ thuộc vào thời gian. Tiếng nói có nhiều âm tiết tương tự nhau nhưng với khoảng thời gian phát âm khác nhau, hoặc có âm tiết đồng âm nhưng khác ở chỗ
nhấn âm, v.v… Để phân tích được sự sai biệt toàn cụ giữa hai mẫu tiếng nói (đại diện bởi một chuỗi các vector), vấn đề về thời gian phải được xem xét.
Bài toán được mô tả ở hình 0, mô tả một ma trận hai chiều theo thời gian sử dụng cho việc canh chỉnh theo thời gian. Cột là mô tả cho tiếng nói mẫu (template) và dòng là tiếng nói thu được cần nhận dạng. Trong hình minh họa, tín hiệu vào “SsPEEhH” được xem là một dạng “nhiễu” của tiếng nói mẫu. Tín hiệu vào này sẽ được so sánh trùng với tất cả các mẫu tiếng nói được lưu trữ trong hệ thống. Mẫu có độ tương thích tốt nhất sẽ có độ sai biệt nhỏ nhất so với tín hiệu vào cần so sánh. Giá trị độ sai biệt toàn cục là tổng các sai biệt cục bộ của việc so sánh.
Hình 1.44 Mô tả canh chỉnh thời gian giữa mẫu tiếng nói “SPEECH” và tín hiệu tiếng nói đầu vào “SsPEEhH”
Làm cách nào để có thể tính được độ tương thích tốt nhất (có giá trị độ sai biệt toàn cục nhỏ nhất) giữa tín hiệu cần so sánh và tiếng nói mẫu? Việc này được thực hiện bằng cách ước lượng tất cả khoảng cách có thể có, nhưng cách này không hiệu quả khi số lượng khoảng cách có dạng hàm mũ theo chiều dài của tín hiệu ngõ vào. Thay vào đó, ta xem xét những ràng buộc tồn tại trong quá trình so trùng (hoặc có thể áp đặt các ràng buộc này) và dùng những ràng buộc này để có được giải thuật hiệu quả hơn. Các ràng buộc được thiết lập phải không phức tạp và cũng không hạn chế nhiều, như:
→ Các khoảng cách so trùng không thể thực hiện việc đi lui;
→ Mọi khung của tín hiệu cần so trùng phải được dùng trong quá trình so trùng;
→ Các giá trị sai biệt cục bộ được kết hợp bằng phương pháp cộng dồn vào giá trị sai biệt toàn cục.
Mọi khung trong tín hiệu cần so trùng với mẫu tiếng nói được xem xét ứng với từng tính toán độ sai biệt. Nếu thời điểm đang xét là (i, j) , với i là chỉ số của khung tín hiệu ngõ vào, j là của khung tiếng nói mẫu, thì các vị trí trước đó là (i−1, j−1), (i−1, j), (i,j −1) . Ý tưởng chính của lập trình động là tại vị trí (i,j), việc tính toán dự trên độ sai biệt nhỏ nhất của các vị trí
),1 1 , 1
(i− j− (i−1,j), (i,j −1).
Giải thuật lập trình động thực hiện cần phải đồng bộ thời gian: mỗi cột của ma trận thời gian-thời gian được xem như là một sự kế vị các tính toán trước đó, do đó, ứng với một mẫu tiếng nói có chiều dài N, số lượng bước so trùng tối đa là N.
Gọi D(i, j), d(i,j) tương ứng là độ sai biệt toàn cục và độ sai biệt cục bộ tại vị trí
), , (i j .
[ ( 1, 1), ( 1, ), ( , 1)] ( , )min min ) , (i j D i j D i j D i j d i j D = − − − − + (1)
Với D(1,1)=d(1,1) là giá trị khởi tạo ban đầu, giải thuật ứng dụng đệ qui vào việc tính toán các độ sai biệt tại D(i,j). Giá trị cuối D(n,N) chính là giá trị chênh lệch giữa template và tín hiệu cần so sánh, lưu ý rằng N sẽ khác nhau ứng với mỗi template.
Đối với việc nhận dạng tiếng nói, giải thuật DP không cần phải chạy trên các máy tính có bộ nhớ lớn, việc lưu trữ được thực hiện bởi một array, lưu giữa từng cột đơn trong ma trận thời gian-thời gian. Ma trận có vị trí đầu tiên có giá trị là 0, như vậy chỉ những hướng di chuyển trong ma trận được mô tả ở hình 1 mới có thể xuất phát từ vị trí (i, j).
Hình 1.45 Ba hướng có độ tương thích tốt nhất có thể đi đến từ ô (i, j) trong giải thuật DTW đối xứng.
Phương trình (1) được thực hiện bằng phương pháp đệ quy. Tuy nhiên, trừ khi ngôn ngữ đã được tối ưu cho việc đệ quy, phương pháp này có thể tốn nhiều thời gian ngay cả đối với những tín hiệu cần so sánh có kích thước nhỏ. Một phương pháp khác có thể cải tiến được tốc độ xử lý cũng như cần bộ nhớ thực thi nhỏ hơn là dùng hai vòng lặp, sử dụng hai array để lưu trữ các cột kề với ma trận thời gian-thời gian.
Giải thuật tìm chi phí toàn cục nhỏ nhất:
1. Tính tại cột 0, bắt đầu từ đáy của ô. Giá trị chi phí toàn cụ của ô bằng giá trị chi phí cục bộ. Sau đó, tính toán giá trị chi phí toàn cục của các ô có khả năng cho được giá trị thấp bằng cách lấy giá trị chi phí cục bộ của ô cộng thêm cho giá trị toàn cục của ô ngay dưới đó, ô này được gọi là predCol (predecessor column).
2. Tính giá trị chi phí toàn cục của ô đầu tiên của cột kế tiếp là curCol. Giá trị cục bộ của ô cộng thêm cho giá trị toàn cục của ô phía dưới cùng của cột trước nó.
3. Tính giá trị toàn cục của các ô còn lại của curCol.
4. curCol được định là predCol và lặp lại bước 2 cho đến khi tất cả các cột được tính toán xong.
5. Giá trị chi phí toàn cục tại vị trí cột cuối cùng, dòng trên cục là giá trị cần tìm. Mã giải của quá trình như sau: