- Mở đầu
3.5.1 Thuật toán Quy Hoạch Động
Thuật ngữ lập trình động được đề xuất bởi Richard Bellman năm 1940, sau đó năm 1953 ông tinh chế nó trong một ý nghĩa hiện đại và có quyết định lớn hơn với phương pháp qui hoạch động còn gọi là lập trình qui hoạch động.
Trong ngành khoa học máy tính và toán học, lập trình qui hoạch động là một phương pháp để giải các bài toán phức tạp bằng cách chia chúng thành các bài toán con đơn giản và kết hợp tối ưu các bài toán con. Như vậy ý tưởng của lập trình qui hoạch động là giải quyết các phần khác nhau của các bài toán con gối lên nhau và các cấu trúc con tối ưu, sau đó kết hợp chúng lại để có một giải pháp tổng thể nhằm làm giảm thời gian chạy của bài toán. Lập trình qui hoạch động được ứng dụng trong các bài toán như: tìm đường đi ngắn nhất, bài toán sắp xếp, bài toán người bán hàng, bài toán di truyền sinh học,…với nhiều thuật toán qui hoạch động khác nhau.
Trong phạm vi nhận dạng tiếng nói, lập trình qui hoạch động là kỹ thuật tìm đường đi với chi phí nhỏ nhất thông qua một đồ thị tìm kiếm. Chúng ta có thể dùng lập trình qui hoạch động để tìm sự liên kết tốt nhất cho một chuỗi vector đặc trưng với mô hình các từ (liên kết với chọn từ có mật độ xác suất cao nhất).
Sự phát triển của kỹ thuật lập trình động cụ thể là thuật toán DTW (Dynamic time wraping) [Kruskal, Liberman 1983], đây là thuật toán quan trọng nhất được áp dụng trong nhận dạng tiếng nói. Cách đơn giản và hiệu quả nhất để nhận dạng một
từ riêng biệt là so sánh nó với các từ mẫu và xác định sự phù hợp tốt nhất. Mục tiêu này là phức tạp bởi một số yếu tố. Trước tiên là các mẫu khác nhau của một từ cho trước sẽ có khoảng các thời gian khác nhau. Điều này có thể được loại bỏ bằng cách làm đơn giản, bình thường các mẫu và tất cả các từ đều có khoảng thời gian bằng nhau. Tuy nhiên tốc độ của tiếng nói là không đều trong khi nói. Nói cách khác, hàm liên kết giữa một mẫu so sánh và mẫu tiếng nói có thể là phi tuyến. Thuật toán DTW là một phương pháp có hiệu quả cho việc tìm kiếm sự liên kết tối ưu này không tuyến tính.
DTW là một thể hiện của lớp tổng quát của các thuật toán được gọi là lập trình qui hoạch động. Thời gian và độ phức tạp của thuật toán là tuyến tính với khoảng thời gian của mẫu cần nhận dạng và qui mô kích thước của từ vựng. Thuật toán dùng để đo lường sự giống nhau giữa hai chuỗi mà có thể thay đổi theo thời gian hay tốc độ được sử dụng trong bối cảnh Mô hình HMM. Thuật toán DTW được áp dụng trong nhận dạng tiếng nói để xử lý tiếng nói được nói với các tốc độ khác nhau.
+ Mô tả bài toán: Bài toán DTW bắt đầu như sau: cho 2 chuỗi X và Y (vector), có chiều dài |X| và |Y|.
X = x1, x2, x3, ..,x|X|
Y = y1, y2, y3, ..,y|Y|
Đặt đặt đường đi biến dạng W:
W = w1, w2, w3, ..,wk
max(|X|, |Y|) ≤ K < |X| + |Y|, với K là độ dài của W và phần tử thứ K là: Wk = (i, j)
Với i là chỉ số trong chuỗi X và j là chỉ số trong chuỗi Y. Chuỗi âm tiết W phải bắt đầu tại w1 = (1, 1) và kết thúc tại điểm cuối wk =(|X|, |Y|). Điều này bảo đảm rằng mỗi chỉ số trong 2 chuỗi đều được sử dụng trong đường biến dạng. Đây cũng là một trong các ràng buộc khi xây dựng đường biến dạng rằng i và j phải tăng tuần tự, điều này lý giải tại sao những đường đại diện cho đường biến dạng trong hình III.8 là không chồng lấp lên nhau.
wk = (i, j), wk+1 = (i', j') i≤ i' ≤ i + 1, j ≤ j' ≤ j + 1
Đường đi biến dạng tối ưu là đường đi biến dạng có khoảng cách cực tiểu (nhỏ nhất), với khoảng cách của đường đi biến dạng W là:
k = K
Dist (W ) = ∑ Dist (wki , wkj )
k =1
Dist(W) là khoảng cách (khoảng cách Euclidean) của đường đi biến dạng W, và Dist(wki, wkj) là khoảng cách giữa hai điểm được đánh chỉ số (một điểm từ X và một điểm từ Y) trong phần tử thứ k của đường đi biến dạng.
Chúng ta có thể thấy rằng hàm cực tiểu Dist(W) là tương tự như thuật toán xác định đường đi ngắn nhất Forward. Do đó nó thể chuyển từ bài toán Forward sang Backward và có thể làm mẫu như một hệ thống trạng thái hữu hạn.
Thuật toán DTW tiêu chuẩn (standard DTW):
Mô hình lập trình động được dùng để tìm khoảng cách nhỏ nhất của đường đi biến dạng. Gọi D là ma trận chi phí hai chiều |X| x |Y|, giá trị D(i, j) là khoảng cách nhỏ nhất giữa hai chuỗi X và Y. Hai trục tọa độ của ma trận D trong hình III.9
đại diện cho thời gian.
1. Điều kiện ban đầu:
D(1,1) =0
2. Lặp lại:
D(i, j) = Dist(i, j) + min[D(i-1, j), D(i, j-1), D(i-1, j-1)]
Cuối cùng, thuật toán dừng tại điểm D(|X|, |Y|), và chúng ta có thể dễ dàng lần ngược để có đường đi biến dạng tối ưu W. Thuật toán DTW có độ phức tạp đa thức, khi các chuỗi X, Y là lớn thì có hai vấn đề bất tiện: cần sử dụng nhiều bộ nhớ và phải thực hiện số lượng lớn các tính toán khoảng cách.
Thuật toán DTW tiêu chuẩn là cơ sở ban đầu cho sự xuất hiện nhiều thuật toán cải tiến khác sau này. Lưu ý rằng, có thể dùng một lưới điểm để mô tả quá trình tìm đường đi.
Thuật toán DTW hữu ích trong bài toán nhận dạng từ cô lập trong một từ điển giới hạn, nó có độ phức tạp đa thức O(n2v), với n là chiều dài chuỗi, v là số từ có trong từ điển. Đối với bài toán nhận dạng từ vựng lớn thì thuật toán DTW không thích hợp vì độ phức tạp tăng với số lượng từ lớn và rất khó để đánh giá các phần tử từ hai chuỗi khác nhau có nhiều kênh tính năng đặc trưng riêng biệt.
Hình 3.10 Một ma trận chi phí với dấu vết đường đi biến dạng có khoảng cách nhỏ nhất.