Tìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab

LỜI NÓI ĐẦU Ngay khi phát minh ra máy tính, con người đã mơ ước máy tính có thể nói chuyện với mình. Yêu cầu đơn giản nhất là máy có thể xác định được từ ngữ mà chúng ta nói với máy. Đó là mục tiêu của ngành nhận dạng tiếng nói. Đối với con người, việc nghe, nhất là nghe tiếng mẹ đẻ là một vấn đề khá đơn giản. Còn đối với máy tính, xác định một chuỗi tín hiệu âm thanh là sự phát âm của một từ nào hoàn toàn không đơn giản, khó khăn cũng như việc học nghe ngoại ngữ của chúng ta. Lĩnh vực nhận dạng tiếng nói đã được nghiên cứu hơn 4 thập kỉ và hiện nay mới chỉ có một số thành công. Có thể kể đến hệ thống nhận dạng tiếng Anh (ví dụ: phần mềm Via Voice của IBM, hệ thống nhận dạng tiếng nói tích hợp của OfficeXP ). Các hệ thống này hoạt động khá tốt (cho độ chính xác khoảng 90 - 95%) nhưng còn xa mới đạt đến mức mơ ước của chúng ta: có một hệ thống có thể nghe chính xác và hiểu hoàn toàn những điều ta nói. Riêng với tiếng Việt, lĩnh vực nhận dạng tiếng nói còn khá mới mẻ. Chưa hề thấy xuất hiện một phần mềm nhận dạng tiếng Việt hoàn chỉnh trên thị trường. Số công trình nghiên cứu về nhận dạng tiếng nói tiếng Việt được công bố rất hiếm hoi, và kết quả còn hạn chế về bộ từ vựng, độ chính xác . Tiếng Việt có nhiều đặc tính khác với các ngôn ngữ đã được nghiên cứu nhận dạng nhiều như tiếng Anh, tiếng Pháp. Do đó việc nghiên cứu nhận dạng tiếng Việt là rất cần thiết. Vì những lí do trên, tôi chọn đề tài “Tìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab”, nhằm nghiên cứu các phương pháp nhận dạng tiếng nói đối với tiếng Việt và thử nghiệm xây dựng một hệ thống nhận dạng cỡ nhỏ. Khoá luận gồm có 5 chương: 1. Chương 1 trình bày tổng quan về nhận dạng tiếng nói, nhận dạng tiếng nói tiếng Việt và một số phương pháp nhận dạng phổ biến. 2. Chương 2 trình bày về môi trường Matlab. 3. Chương 3 trình bày về trích chọn đặc trưng cho nhận dạng. 4. Chương 4 trình bày sơ lược về mạng nơron và toolbox NetLab cho mạng nơron trên môi trường Matlab.

pdf53 trang | Chia sẻ: lvcdongnoi | Lượt xem: 4106 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Tìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1:5 sinh ra vector [1 2 3 4 5]; 3.6:2 sinh ra vector [3.6 2.6]. a:d:b Vector các phần tử thực từ a đến b, với khoảng chia d. Ví dụ 1:0.5:3.1 sinh ra vector [1.0 1.5 2 2.5 3.0] 2.3.3. Các phép toán với vô hướng Bảng sau mô tả các phép toán thực hiện với 2 giá trị vô hướng. Cột kết quả môt tả cho trường hợp a=3; b=1.2 Viết trong Matlab Ý nghĩa Kết quả a+b Cộng 2 giá trị 4.2 a-b Trừ 2 giá trị 2.8 a*b Nhân 2 giá trị 3.6 a/b Chia 2 giá trị 2.5 a^b Luỹ thừa ab. 3.7372 Thứ tự ưu tiên toán tử trong Matlab giống như các ngôn ngữ lập trình: ưu tiên cao nhất là dấu ngoặc, tiếp đến là phép luỹ thừa rồi nhân chia trước, cộng trừ sau từ trái sang phải. Các phép toán trên (ngoại trừ phép luỹ thừa) còn thực hiện được đối với một ma trận và một vô hướng (vector là trường hợp đặc biệt của ma trận). Khi đó kết quả sẽ là một ma trận cùng cỡ mà mỗi phần tử của ma trận này là kết quả của phép toán giữa vô hướng và phần tử tương ứng của ma trận ban đầu. Ví dụ: nếu gán B=A*3; A là một ma trận cỡ m×n thì B cũng là một ma trận cỡ m×n và B(i,j)=A(i,j)×3. 2.3.4. Các phép toán với vector 18 Các phép toán với vector thực hiện với 2 vector cùng cỡ, kết quả là một vector cùng cỡ, trong đó mỗi phần tử của vector kết quả là kết quả của phép toán giữa 2 phần tử tương ứng của 2 vector ban đầu. Tức là nếu C=A.^B thì C(i)=A(i)^B(i). Trong bảng sau cột kết quả ứng với A=[4 3]; B=[2 1] Viết trong Matlab Ý nghĩa Kết quả A+B Cộng vector [6 4] A-B Trừ vector [2 2] A.*B Nhân vector [8 3] A./B Chia vector [2.0 3.0] A.^B Luỹ thừa [16 3] Ngoài ra ta còn thực hiện được các phép toán đó giữa một vector và một vô hướng (như đã trình bày ở phần về các phép toán với vô hướng). 2.3.5. Các phép toán với ma trận Với 2 ma trận cùng cỡ, ta có thể thực hiện các phép toán như các phép toán với vector ở trên (kết quả cũng là một ma trận cùng cỡ, mỗi phần tử là kết quả của phép toán với 2 phần tử tương ứng). Viết trong Matlab Ý nghĩa A+B A-B A.*B A./B A.^B Cộng, trừ, nhân, chia, lấy luỹ thừa 2 ma trận cùng kích thước như phép toán vector. Ngoài ra ta còn thực hiện được các phép toán đó giữa một ma trận và một vô hướng (như đã trình bày ở phần về các phép toán với vô hướng).. Matlab còn có các phép toán sau đối với các ma trận: Viết trong Matlab Ý nghĩa A*B Nhân 2 ma trận A(m,n) và B(n,p), được ma trận C(m,p) mà các phần tử xác định bởi: 19 ∑ = = n 1k )j,k(B*)k,i(A)j,i(C A*B’ Tích vô hướng 2 vector dòng A,B có cùng số phần tử. A’ Ma trận chuyển vị của A. Nếu gán B=A’ và A cỡ m×n thì B có cỡ n×m và B(i,j)=A(j,i). A(i,:) Vector dòng i. A(:,j) Vector cột j. A(x,y) Trích ma trận con: x,y là 2 vector mô tả chỉ số dòng và cột. A(x,y) là ma trận con trong đó các phần tử là các phần tử của A có chỉ số dòng và cột mô tả trong x và y. Tức là nếu gán B=A(x,y) thì B(i,j)=A(x(i),y(j)). Có thể dùng thêm kí hiệu : để lấy toàn bộ dòng hoặc cột. reshape(A,m,n) Định dạng lại ma trận A thành ma trận m dòng, n cột rot90(A,k) Quay ma trận A 90o, ngược chiều kim đồng hồ k lần. A^k Luỹ thừa ma trận: tính ma trận Ak (nhân A k lần), chỉ áp dụng với ma trận vuông. inv(A) Cho ma trận nghịch đảo của A. Chỉ áp dụng với ma trận vuông triu(A),tril(A) Cho ma trận tam giác trên/dưới của A. 2.4. CÁC HÀM THÔNG DỤNG TRONG MATLAB 2.4.1. Một số hàm toán học thông dụng Matlab có các hàm toán học thông dụng như lượng giác, logarit... để tính toán. Đối số của hàm là vô hướng hoặc ma trận (vector là trường hợp đặc biệt của ma trận). Nếu đối số là ma trận thì kết quả là một ma trận cùng cỡ mà mỗi phần tử của ma trận này có giá trị tương ứng với các phần tử ma trận đã cho. Viết trong Matlab Ý nghĩa abs(x) Cho giá trị tuyệt đối của x. Nếu x là số phức thì cho môđun của x. sqrt(x) Căn bậc 2. Nếu muốn lấy căn bậc n thì viết x.^(1/n) 20 round(x), fix(x), floor(x), ceil(x) Cho kết quả là số nguyên tương ứng: gần x, gần 0, gần -∞ và gần +∞ nhất. rem(x,y) Cho phần dư của phép chia x/y, tức là x mod y. x div y chính là floor(x/y) exp(x) ex. log(x), log10(x) lnx, lgx (tương ứng). sin(x), cos(x), tan(x) Các hàm lượng giác sin, cos, tg. x lấy đơn vị radian. asin(x), acos(x), atan(x) Các hàm lượng giác arcsin, arccos, arctang atan2(x,y) Cho arctg của y/x trong khoảng -π đến π, tuỳ thuộc vào dấu của x,y 2.4.2. Một số hàm vector Các hàm sau thực hiện cho vector, nếu đối số là ma trận thì kết quả là vector mà mỗi phần tử tính toán tương ứng với các cột của ma trận. Viết trong Matlab Ý nghĩa sum(X) Tính tổng các phần tử của vector X. mean(X) Tính trung bình cộng các phần tử của vector X. [xm id] =max(X); [xm id] =min(X); Tìm phần tử lớn nhất/nhỏ nhất của X. xm là giá trị, id là chỉ số. norm(X, p) Tính chuẩn bậc p của ma trận hay vector X, mặc định là bậc 2. length(X) Cho số phần tử của X. [m n]= size(A) Cho kích thước ma trận A. 2.4.3. Một số hàm xử lí âm thanh Matlab có một số hàm xử lí âm thanh sau: Viết trong Matlab Ý nghĩa [y fs]=wavread(wavfile) Đọc tín hiệu âm thanh từ file wav cho bởi xâu wavfile, y là vector mô tả tín hiệu âm thanh 21 (có giá trị thực từ 0 đến 1), fs là tần số lấy mẫu (giá trị nguyên) wavwrite(y,fs,wavfile ) Ghi tín hiệu âm thanh từ file wav cho bởi xâu wavfile, y là vector mô tả tín hiệu âm thanh, fs là tần số lấy mẫu. sound(y) Phát âm thanh ra loa, y là vector mô tả tín hiệu âm thanh. y=wavrecord(n, fs) Ghi âm (từ micro) với tần số lấy mẫu fs và n mẫu. Kết quả là vector y. Đoạn lệnh sau ghi âm trong 2 giây với tần số lấy mẫu 8kHz, phát lại rồi ghi vào file: y=wavrecord(16000,8000); sound(y); wavwrite(y,8000,‘temp.wav’); 2.4.4. Các phép toán số phức Khác với các ngôn ngữ lập trình thông dụng, Matlab cho phép tính toán trực tiếp với số phức. Ngoài các phép toán thông thường giống số thực như cộng, trừ, nhân, chia, với số phức còn có một số phép toán và hàm sau. Cột kết quả viết ví dụ đối với x=a+bi. Viết trong Matlab Ý nghĩa Kết quả real(x) Phần thực a imag(x) Phần ảo b conj(x) Số phức liên hợp a-bi abs(x) môđun 22 ba + angle(x) argument arctg(b/a) i,j Kí hiệu đơn bị ảo. 1− Cách viết phép toán và gọi hàm với số thực và số phức hoàn toàn giống nhau. Các phép toán hay hàm nào thực hiện được với số phức cho kết quả là số phức tương ứng. 22 2.5. LẬP TRÌNH MATLAB 2.5.1. Chương trình nguồn (m-file), hàm và script Matlab hỗ trợ 2 chế độ hoạt động: hoạt động theo giao diện dòng lệnh hoặc theo chương trình. Giao diện dòng lệnh cho phép người dùng gõ lệnh và máy hiển thị kết quả trong cửa sổ lệnh (có thể tham khảo một số lệnh ở phần 1.3). Tuy nhiên để nâng cao hiệu qủa sử dụng Matlab thì phải lập trình. Chương trình trong Matlab có 2 dạng: script (kịch bản) hoặc function (hàm). Chương trình nguồn Matlab được lưu vào các file text có phần mở rộng là .m ( gọi là các m-file) và tên chương trình được xác định qua tên file. Script và function đều là dãy các lệnh Matlab. Có một khác biệt cơ bản: hàm có thể nhận đối số và trả lại kết quả, còn script thì không. Khi gõ lệnh chứa tên hàm hay kịch bản, máy sẽ thực thi dãy các lệnh tương ứng trong chương trình nguồn như là chúng được gõ trong cửa sổ lệnh (nếu là lệnh gọi hàm thì còn thêm các thao tác truyền tham số vào-ra, tạo và huỷ biến địa phương…) Sau đây là ví dụ về hàm dtcv, được lưu trong chương trình nguồn đặt tên là dtcv.m, thực hiện tính toán diện tích và chu vi hình chữ nhật với tham số vào là 2 cạnh a,b. function [s, p] = dtcv(a,b) % Ham tinh dien tich va chu vi hinh chu nhat s=a*b; p = 2*(a+b); Các quy tắc viết hàm: 1. Hàm phải được bắt đầu bằng từ khoá function, sau đó lần lượt là tham số đầu ra, dấu =, tên hàm, dấu (, các đối số (tham số đầu vào) và dấu ). Nếu có nhiều tham số đầu vào thì chúng phải viết cách nhau bằng dấu , Nếu có nhiều tham số đầu ra thì chúng cũng phải viết cách nhau bằng dấu , và có cặp dấu [ ] bao ngoài. 2. Chú thích trong Matlab là chú thích trên dòng. Bắt đầu bằng kí tự %, sau đó cho đến hết dòng là nội dung chú thích. Nếu chú thích viết ngay sau khai báo hàm thì khi dùng lệnh help <tên hàm>, nội dung phần chú thích đó sẽ được Matlab hiển thị. 3. Các kết quả của hàm được xác định qua các tham số đầu ra. Vì vậy trong thân hàm phải có các dòng lệnh gán giá trị cho chúng. 23 4. Ngoại trừ các tham số vào/ra, tất cả các biến bên trong hàm đều là biến địa phương. Chúng được tạo khi có lệnh gán đầu tiên và bị xóa sau khi kết thúc hàm. Ngược lại, biến trong script thì luôn là biến toàn cục. 5. Lời gọi hàm: Lệnh gọi hàm có dạng như khai báo hàm, chỉ khác là không được có dấu ; giữa các tham số đầu ra. []=(các tham số đầu vào) Tuy nhiên Matlab cho phép số tham số đầu vào, đầu ra ít hơn số tham số hình thức. Người lập trình cần dùng 2 hàm nargin và nargout để xác định số đầu vào, đầu ra thực sự trong lời gọi hàm (chú ý: . Chẳng hạn ta có thể dùng lời gọi hàm sau để tính diện tích và chu vi hình chữ nhật kích thước 4×3: [dt cv] = dtvc(4,3) Nếu chỉ quan tâm đến diện tích ta có thể gọi: dt = dtvc(4,3) Tuy nhiên trình tự truyền tham số của hàm trong Matlab là từ trái sang, vì vậy nếu chỉ cần kết quả là chu vi, không quan tâm đến diện tích ta vẫn phải gọi hàm như câu lệnh đầu tiên, không thể dùng câu lệnh sau: cv = dtvc(4,3) Vì nếu gọi như vậy, cv sẽ bị gán giá trị 12 của diện tích. So sánh với các ngôn ngữ khác chúng ta có một số nhận xét: • Matlab cho phép hàm trả lại nhiều kết quả. • Matlab cho phép số tham số thực sự ít hơn số tham số hình thức. • Matlab không xác định kiểu của tham số hình thức và kiểm tra kiểu của tham số thực sự. Người lập trình phải tự xác định lấy. 2.5.2. Các cấu trúc điều khiển Các cấu trúc điều khiển của Matlab nhìn chung giống Pascal, ngoại trừ đặc điểm là không có cấu trúc khối begin end nên thường các cấu trúc điều khiển trong Matlab cho phép có nhiều câu lệnh con và kết thúc bằng end. 2.5.2.1. Lệnh gán Lệnh gán trong Matlab là dấu =, có dạng: = 24 Khi thực hiện lệnh gán, nếu chưa tồn tại thì Matlab sẽ tạo ra biến có kiểu và kích thước trùng với , sau đó gán giá trị của cho biến. Ở đây: có thể là: kí pháp định nghĩa ma trận, lời gọi hàm, biến, phép toán với các biểu thức khác... 2.5.2.2. Lệnh rẽ nhánh Matlab có một số lệnh rẽ nhánh sau: 1/ Lệnh if đơn Cú pháp: if end; Thực thi: Lệnh này kiểm tra giá trị của , nếu kết quả là đúng (khác 0) thì thực hiện . 2/ Lệnh if else Cú pháp: if else end; Thực thi: Lệnh này kiểm tra giá trị của , nếu kết quả là đúng (khác 0) thì thực hiện , ngược lại thì thực hiện <nhóm lệnh 2>. 3/ Lệnh if elseif Cú pháp if elseif 25 end; Thực thi: Dùng elseif thì tương tự như dùng else sau đó có một câu lệnh if: if else if end; end; Tuy nhiên dùng elseif thì chương trình sáng sủa hơn, không phải thêm các từ khoá end ở cuối. 2.5.2.3. Lệnh lặp Matlab có 2 loại lệnh lặp: lệnh for và lệnh while. 1/ Lệnh for Cú pháp: for = end; Trong đó là một biến, là vector, ma trận hoặc giá trị vô hướng. Quy tắc sử dụng: • Nếu là ma trận rỗng thì vòng for không thực hiện. • Nếu là giá trị vô hướng (ma trận 1x1) thì được gán bằng giá trị vô hướng đó và thực hiện đúng một lần. • Nếu là một vector (ma trận nx1 hoặc 1xn) thì <nhóm lệnh> thực hiện n lần, mỗi lần nhận một phần tử của vector (từ trái sang phải). 26 • Nếu là một ma trận (ma trận mxn) thì thực hiện m lần, mỗi lần nhận một vector cột của ma trận (từ trái sang phải). 2/ Lệnh while Cú pháp: while end; Thực thi: • Nếu đúng thì thực hiện . • Thực hiện xong lại quay lại kiểm tra và thực hiện <nhóm lệnh> cho đến khi nhóm lệnh sai. • Trong vòng lặp for, while có thể sử dụng lệnh break để ngắt. Khi gặp lệnh break Matlab sẽ kết thúc vòng lặp ngay lập tức. 2.5.3 Biểu thức logic Như ở mục trên ta thấy trong các cấu trúc điều khiển, ta luôn cần các biểu thức logic. Trong Matlab giá trị 0 được coi là sai (false) còn mọi giá trị khác 0 được coi là đúng (true) (giống như trong C). Ở các ngôn ngữ lập trình thông thường ta chỉ gặp các biểu thức logic có giá trị là một vô hướng (chỉ là đúng/sai), nhưng trong Matlab thì biểu thức logic có giá trị là một ma trận (mà giá trị vô hướng là một trường hợp đặc biệt: ma trận 1×1). 2.5.3.1 Các phép toán quan hệ Matlab có các phép toán quan hệ sau với 2 ma trận cùng cỡ: Toán tử Ý nghĩa Ví dụ cách viết < Nhỏ hơn A<B <= Nhỏ hơn hoặc bằng A(1,2)<B(3,4) > Lớn hơn A>3 >= Lớn hơn hoặc bằng == Bằng nhau (chú ý: khác với dấu = là toán tử 27 gán; == là toán tử so sánh). ~= Khác nhau Phép so sánh ma trận với vô hướng có kết quả là một ma trận cùng cỡ, trong đó mỗi phần tử của ma trận này là kết qủa so sánh tương ứng phần tử của ma trận với vô hướng: là 1 nếu đúng, là 0 nếu sai. Ví dụ: nếu viết lệnh C=A>3; trong đó A,C là các ma trận mxn thì c cũng là một ma trận mxn, C(i,j)=1 nếu A(i,j)>3 và bằng 0 trong trường hợp ngược lại. Phép so sánh 2 ma trận cùng cỡ (2 giá trị vô hướng là 2 ma trận 1x1) có kết quả là một ma trận cùng cỡ, trong đó mỗi phần tử là kết qủa so sánh tương ứng 2 phần tử của 2 ma trận: là 1 nếu đúng, là 0 nếu sai. Ví dụ: nếu viết lệnh C=A>B; trong đó A,B là các ma trận mxn thì C cũng là một ma trận mxn, C(i,j)=1 nếu A(i,j)>B(i,j) và bằng 0 trong trường hợp ngược lại. 2.5.3.2. Các phép toán logic Phép toán logic trong Matlab hợp lệ nếu kết hợp 2 trận cùng kích thước chỉ toàn các phần tử 0 và 1. Kết quả của phép toán logic là một ma trận cùng kích thước mà mỗi phần tử là kết quả phép toán logic tương ứng của từng phần tử 2 ma trận ban đầu. Toán tử Ý nghĩa Ví dụ cách viết & Phép and logic a>=0 & a<=3 | Phép or logic a>b | a<c ~ Phép not logic ~(a>=0 & a<=3) Bảng kết quả phép toán logic (đối với vô hướng) a b ~a a|b a&b false false true false false false true true true false true false false true false true true false true true 2.5.3.3. Một số hàm quan hệ và logic 28 Matlab hỗ trợ nhiều hàm cho giá trị logic. Sau đây là một số hàm: Lời gọi hàm Ý nghĩa any(x) Chỉ cho giá trị true (1) nếu tồn tại một phần tử của x khác 0 all(x) Chỉ cho giá trị true (1) nếu tất cả các phần tử của x khác 0. isempty(x) Trả lại true (1) nếu x là ma trận rỗng. isstr(x) Trả lại true (1) nếu x là một xâu (ma trận kí tự). find(x) Kết quả là một vector cột chứa chỉ số các phần tử khác 0 của x. Nếu x là một ma trận thì 29 CHƯƠNG 3. TRÍCH CHỌN ĐẶC TRƯNG TÍN HIỆU TIẾNG NÓI Quá trình nhận dạng mẫu (cả ở pha huấn luyện hay pha nhận dạng) đều trải qua bước giai đoạn là trích chọn đặc trưng (feature extraction). Bước này thực hiện các phân tích phổ (spectral analysis) nhằm xác định các thông tin quan trọng, đặc trưng, ổn định của tín hiệu tiếng nói, tối thiểu hoá ảnh hưởng của nhiễu; xúc cảm, trạng thái, cách phát âm của người nói; giảm khối lượng dữ liệu cần xử lí... Mặc dù không mang tính quyết định nhưng giai đoạn trích chọn đặc trưng ảnh hưởng rất lớn đến hiệu năng nhận dạng. Vì vậy việc lựa chọn đặc trưng cho tín hiệu tiếng nói rất quan trọng. Có nhiều phương pháp trích chọn đặc trưng đã và đang được sử dụng (FBA, MFCC, LPC, PLP...). Mỗi phương pháp có những ưu điểm và nhược điểm riêng. Hiện nay MFCC (Mel-scale Frequency Cepstral Coefficient) được sử dụng phổ biến nhất. Vì vậy chúng tôi sử dụng MFCC làm đặc trưng của hệ nhận dạng được trình bày trong khoá luận này. Nội dung tiếp theo của chương này trình bày về phương pháp tính đặc trưng MFCC và toolbox VoiceBox của Matlab dùng trong xử lí tiếng nói. 3.1. TRÍCH CHỌN ĐẶC TRƯNG MFCC Các hệ nhận dạng tiếng nói thường tách đặc trưng từ tín hiệu bằng cách: chia tín hiệu thành các đoạn độ dài 5-15 ms, mỗi đoạn gọi là một khung (frame). Trong khoảng thời gian ngắn như vậy, phổ của tín hiệu đủ ổn định để tiến hành tách đặc trưng. Mỗi frame sẽ cho đặc trưng là một vector và đặc trưng của toàn bộ tín hiệu sẽ là một dãy vector. MFCC là phương pháp trích đặc trưng dựa trên đặc điểm cảm thụ tần số âm của tai người: tuyến tính đối với tần số nhỏ hơn 1kHz và phi tuyến đối với tần số trên 1kHz (theo thang tần số mel, không phải theo Hz). MFCC là phương pháp tách đặc trưng dựa trên sự cảm thụ của con người nên thường cho kết quả nhận dạng cao nhất (theo [12]). Vì lẽ đó rất nhiều hệ thống nhận dạng tiếng nói sử dụng MFCC làm đặc trưng. 30 3.1.1. Sơ đồ khối của quá trình tính MFCC Đối với phương pháp MFCC, việc tính đặc trưng có sơ đồ như sau: Tín hiệu tiếng nói Phân khung và cửa sổ hoá Biến đổi Fourier Lọc qua bộ lọc mel-scale Lấy logarit Biến đổi Fourier ngược MFCC Lấy đạo hàm rời rạc M FC C Delta MFCC Tính toán năng lượng Năng lượng Minh hoạ: Sơ đồ khối của quá trình trích chọn đặc trưng MFCC Quá trình tính toán như sau: đầu tiên tín hiệu tiếng nói được chia thành các frame có độ dài 10ms. Mỗi frame sẽ được nhân với một hàm cửa sổ, thường là cửa sổ Hamming sau đó được chuyển sang miền tần số nhờ biến đổi Fourier. Tín hiệu ở miền tần số được nhân với các bộ lọc mel-scale, lấy logarit rồi biến đổi Fourier ngược (để chuyển sang miền cepstral) sẽ được các hệ số MFCC. Một số hệ thống có tính thêm năng lượng (cũng lấy logarit) và đặc trưng delta (đạo hàm rời rạc theo thời gian của MFCC) nhằm thêm thông tin cho các pha sau của quá trình nhận dạng. Các mục sau trình bày từng bước quá trình tính toán đặc trưng MFCC. 3.1.2. Chia khung và cửa sổ hoá Tín hiệu tiếng nói x[n] gồm L mẫu được sau khi được chia thành các khung độ rộng 10ms (ứng với fs*0.01 mẫu) sẽ được cửa sổ hoá bằng cách nhân tín hiệu với môt hàm cửa sổ độ rộng N. 1N..0n);n(w*)n(x)n(x t −== Hàm cửa sổ thường được dùng là hàm cửa sổ Hamming: 1-0..Nn ; ) N n2cos(46.054.0)n(w =π×−= 3.1.3. Biến đổi Fourier rời rạc Tín hiệu (của một frame) sau khi nhân với hàm cửa sổ, được chuyển sang miền tần số bằng biến đổi Fourier rời rạc: 31 1N..0k;e).n(x)k(X 1N 0n N kn2i −==∑− = π − 3.1.4. Lọc qua các bộ lọc mel-scale Các bộ lọc mel-scale là các bộ lọc tam giác, đặt cách đều nhau trong miền tần số nhỏ hơn 1kHz và khoảng cách tăng theo hàm mũ trong miền từ 1kHz đến fs/2 (một nửa của tần số lấy mẫu). Minh hoạ: Các bộ lọc mel-scale tam giác (triangle mel-scale filters) Với M bộ lọc đó, ta hoàn toàn xác định được hệ số nhân hi(k) của mỗi bộ lọc. Kết quả lọc đối với tín hiệu ở miền tần số qua các bộ lọc được tính như sau: M..1i|;)k(X|.)k(h)i(F 1N 0k i ==∑− = Chú ý: X(k) là số phức nhưng thông tin về pha của X(k) không quan trọng nên ta chỉ tính kết quả lọc với modun của X(k). Việc nhân tín hiệu ở miền tần sốvới các bộ lọc mel-scale để chuyển biểu diễn miền tần số từ thang Hz sang thang mel. Mục đích là phân giải tần số (frequency resolution) theo đặc điểm cảm thụ âm của con người: tuyến tính trong miền dưới 1kHz và phi tuyến trong miền trên 1kHz. 3.1.5. Logarit và biến đổi Fourier ngược Lấy logarit của tín hiệu ở miền tần số (spectrum) rồi biến đổi Fourier ngược sẽ đưa tín hiệu về một miền gọi là cepstrum có đơn vị thời gian (thuật ngữ là cepstrum đảo ngược của âm đầu tiên trong từ spectrum: spectrum → cepstrum). Biến đổi từ spectrum sang cepstrum là một biến đổi đồng hình 32 (homomorphic). Theo [9] biến đổi đồng hình chuyển biểu diễn tín hiệu từ dạng tích về dạng tổng, như vậy cho phép sử dụng các hệ tuyến tính để xử lí các tín hiệu không tuyến tính. Công thức tính của bước này là: ∑ = = −π = M 1k p..1n); M2 )1k(n2icos()).k(Flog()n(c Chú ý: mặc dù biến đổi từ spectrum sang cepstrum là biến đổi Fourier ngược, tuy nhiên do ta dùng spectrum và cepstrum thực nên chỉ sử dụng biến đổi cosine rời rạc (DCT) để tăng hiệu năng tính toán. Sau bước này ta được vector cepstral (ở độ đo mel) p thành phần. Thông thường người ta thường nhân thêm vào kết quả một hàm cửa sổ sóng sin (gọi là thủ tục liftering) để giảm bớt ảnh hưởng của các biến đổi đến kết quả. )n(w).n(c)n(c ) L nsin(. 2 L1)n(w = π += 3.1.6. Tính toán năng lượng Kèm thêm thông tin về năng lượng của tín hiệu sẽ tăng thêm thông tin cho nhận dạng (ví dụ: phân biệt các khoảng chứa tín hiệu âm và khoảng lặng, phân biệt vùng tín hiệu chứa nguyên âm và phụ âm…) Năng lượng của cả frame được tính qua công thức: ∑− = = 1N 0n 2))n(x(E 3.1.7. Tính toán đặc trưng delta Đặc trưng delta là đạo hàm bậc nhất (rời rạc) của đặc trưng theo thời gian. Có các đặc trưng delta sẽ tăng thêm thông tin cho nhận dạng (chẳng hạn: xác định các vùng mà phổ tín hiệu ổn định…). Đặc trưng delta được tính theo công thức: ∑ −= += ∂ ∂ = T Tu )ut(C.u)t(C t )t('C Trong đó C(t) là cả vector cepstral tại thời điểm t. T là một hằng số chọn trước, thường thì người ta lấy T=3. 33 3.2. TOOLBOX VOICEBOX TRONG MATLAB VoiceBox là một toolbox của Matlab chuyên về xử lí tiếng nói do Mike Brookes phát triển. VoiceBox yêu cầu Matlab phiên bản 5 trở lên. VoiceBox gồm các hàm có thể chia thành một số nhóm chức năng sau: • Xử lí file âm thanh (đọc, ghi file wav và một số định dạng file âm thanh khác) • Phân tích phổ tín hiệu • Phân tích LPC • Tính toán MFCC, chuyển đổi spectral - cepstral • Chuyển đổi tần số (mel-scale, midi,...) • Biến đổi Fourier, Fourier ngược, Fourier thực... • Tính khoảng cách (sai lệch) giữa các vector và dãy vector. • Loại trừ nhiễu trong tín hiệu tiếng nói. Tuy nhiên chức năng quan trọng nhất là trích đặc trưng tín hiệu tiếng nói, mà ở đây là 2 loại phổ biến nhất LPC và MFCC. Hàm tính MFCC của tín hiệu trong VoiceBox là hàm melcepst: c=melcepst(s,fs,w,nc,p,n,inc,fl,fh) Hàm có rất nhiều tham số, một số tham số quan trọng là: • s là vector tín hiệu tiếng nói (có được sau khi dùng hàm wavrecord hoặc wavread), fs là tần số lấy mẫu (mặc định là 11050). • nc là số hệ số MFCC cần tính (tức là số phần tử của vector đặc trưng. Mặc định là 12, trong nghiên cứu chúng tôi chọn là 8). • p là số bộ lọc mel-scale. • w là một xâu mô tả các lựa chọn khác: nếu có ‘e’ thì tính thêm log năng lượng, có ‘d’ thì tính thêm đặc trưng delta. Mặc dù vậy hàm có thể gọi một cách đơn giản là: c=melcepst(s,fs); Lời gọi hàm sinh ra ma trận c, mỗi dòng của ma trận là 12 hệ số MFCC của một frame. Để kèm thêm log năng lượng và dữ liệu delta như trong các hệ nhận dạng khác, ta dùng lệnh: c=melcepst(s,fs,’ed’); Khi đó mỗi dòng của c là vector 26 hệ số MFCC của frame tương ứng. Hàm melcepst được chúng tôi sử dụng để trích chọn đặc trưng MFCC trong hệ thống nhận dạng được trình bày trong chương 5. 34 CHƯƠNG 4. MẠNG NƠRON NHÂN TẠO Bộ não con người, dưới góc độ tính toán có thể coi là một hệ thống xử lí song song lớn và mật độ kết nối cao: phần tử xử lí là các nơ ron là một và kết nối là các dây thần kinh. Khả năng tuyệt vời của bộ não đã gợi nên những ý tưởng về việc mô phỏng chúng trong lĩnh vực tính toán. Và mạng nơ ron nhân tạo (artificial neural network -ANN) là kết quả của những ý tưởng đó. 4.1. MÔ HÌNH MẠNG NƠ RON Có nhiều mô hình mạng nơron khác nhau. Mô hình mạng đơn giản và phổ biến nhất là mô hình mạng perceptron truyền thẳng nhiều lớp (multi layer perceptron - MLP). Đó là mô hình mạng chúng tôi sử dụng trong hệ nhận dạng được trình bày trong khoá luận này. Bạn đọc quan tâm có thể tham khảo thêm về mạng nơron trong [4, 8,11]. 4.1.1. Mô hình một nơron perceptron Một nơron perceptron là một phần tử xử lí gồm: • n đầu vào xi, mỗi đầu vào ứng với một giá trị thực wi gọi là trọng số. • Một giá trị thực b gọi là ngưỡng (bias). • Một hàm kích hoạt f. • Giá trị ra y. Minh hoạ: Mô hình một nơron perceptron 35 Giá trị ra của perceptron được tính theo quy tắc sau: )u(fy bwxu n 1i ii = +=∑ = Hàm kích hoạt được sử dụng phổ biến là hàm sigmoid (còn gọi là hàm logistic) do tính phi tuyến và khả vi: ue1 1)u(f −+ = Ngoài ra còn có một số hàm kích hoạt khác: hàm tang hyperbolic (tanh), hàm softmax. Khả năng tính toán của một nơron perceptron khá hạn chế. Để cải thiện người ta nối chúng thành mạng. Mô hình mạng đơn giản nhất là mạng perceptron truyền thẳng đa lớp MLP. 4.1.2. Mô hình mạng nơron MLP Mạng nơron MLP n đầu vào, m đầu ra có mô hình như sau: • Các nơron được chia thành các lớp: lớp sau được nối với lớp trước. Lớp đầu tiên là lớp vào (input - nhận đầu vào), lớp cuối cùng là lớp ra (output - cho đầu ra). Giữa lớp vào và lớp ra là các lớp ẩn (hidden). Thông thường chỉ có một lớp ẩn. • Tất cả các nơron cùng một lớp sử dụng chung một vector đầu vào. Mỗi lớp khi nhận một vector đầu vào sẽ tính đầu ra của mỗi nơron, kết hợp thành một vector và lấy đó làm đầu vào cho lớp sau. • Mạng MLP nhận đầu vào là một vector n thành phần, lấy đó làm đầu vào của lớp input và tính toán cho đến khi lớp output có đầu ra, lấy đó là đầu ra của mạng: một vector m thành phần. • Toàn bộ các nơron của toàn mạng sử dụng chung một hàm kích hoạt, thường là hàm logistic. Ngoài lớp vào và lớp ra, mạng MLP thường có một hay nhiều lớp ẩn. Thông thường người ta chỉ sử dụng một lớp ẩn. Vì vậy đôi khi người ta hay đồng nhất MLP với MLP 3 lớp. 36 input layer hidden layer output layer Minh hoạ: Mô hình mạng perceptron 3 lớp (MLP) Như vậy xét dưới góc độ toán học mạng MLP biểu diễn một hàm phi tuyến từ Rn vào Rm. Người ta cũng chứng minh được rằng: “một hàm phi tuyến liên tục bất kì có thể xấp xỉ với độ chính xác tuỳ ý bằng mạng MLP” (định lí Kolmogorov-được nhắc đến trong [8]). Mạng MLP n×p×m (n đầu vào, m đầu ra, p nơron ẩn) được biểu diễn bằng 2 ma trận trọng số w1 cỡ n×p, w2 cỡ p×m và 2 vector ngưỡng b1 p phần tử, b2 m phần tử. (Lớp input của MLP chỉ có tác dụng nhận đầu vào, hoàn toàn không thực hiện tính toán). Khi đó tính toán đầu ra y của mạng theo đầu vào x như sau: )v(fy bw.zv )u(fz bw.xu 22 11 = += = += Ở đây, u, v, z là các vector. Viết z=f(u) có nghĩa là zi=f(ui) với mọi i. Để biểu diễn được một hàm nào đó, mạng MLP cần được huấn luyện. 4.1.3. Huấn luyện mạng nơron MLP Để mạng nơron biểu diễn được hàm f, ta cần một bộ dữ liệu gồm N cặp vector (xi, ti), trong đó xi thuộc tập xác định của f và ti là giá trị của f tại xi: ti = f(xi) Mạng MLP sẽ biểu diễn được hàm f nếu cho đầu vào của mạng là xi thì đầu ra của mạng là ti. Thường thì MLP chỉ biểu diễn được xấp xỉ hàm f, do đó ta mong muốn nếu mạng cho đầu ra thực tế là yi thì yi càng gần ti càng tốt. 37 Như vậy bài toán huấn luyện mạng là cho bộ dữ liệu huấn luyện gồm N cặp vector (xi, ti), cần điều chỉnh các trọng số của mạng sao cho tổng sai số của mạng trên bộ dữ liệu là nhỏ nhất: ∑ = →−= N 1i ii minyt E Trong đó yi là đầu ra thực tế của mạng ứng với đầu vào xi. Thuật toán huấn luyện MLP phổ biến nhất là thuật toán lan truyền ngược lỗi (back-propagation training). Thuật toán có đầu vào là tập mẫu {(xi, ti)}, đầu ra là bộ trọng số của mạng. Các bước tiến hành huấn luyện như sau: 1/ Khởi tạo trọng số của mạng: wij được gán các giá trị ngẫu nhiên, nhỏ (nằm trong miền [-α, α]). 2/ Với mỗi cặp (x,t) trong bộ dữ liệu huấn luyện: Giả sử x = (x1 , ..., xn). Ta thực hiện: 1. Lan truyền x qua mạng để có y (theo công thức mục 4.1.3). 2. Tính sai số e của mạng: e=t-y. 3. Hiệu chỉnh các trọng số liên kết nơron dẫn tới lớp ra wij từ nơron j tại lớp ẩn tới nơron i tại lớp ra: wij = wij + Δwij wij là trọng số giữa nơron i ở lớp trước và nơron j ở lớp sau. Δwij được tính theo công thức sau: Δwij=ρδjyi • ρ là hằng số tốc độ học (learning rate), thường lấy bằng . • yi là đầu ra của nơron i (nếu i là nơron lớp input thì thay yi bằng xi). • δj là sai số tại nơron j. Nếu j là nơron lớp ra (output layer) thì δj được tính theo công thức: δj = yj(1-yj)(tj-yj) Nếu j là nơron lớp ẩn thì được tính theo công thức: δj = yj(1-yj)∑δ k jkk w trong đó k là các các nơron của lớp sau lớp của j. Việc đưa mẫu huấn luyện qua mạng, tính toán và cập nhật trọng số được tiến hành với tất cả phần tử trong bộ mẫu (có thể chọn ngẫu nhiên hoặc tuần tự). Quá trình sẽ dừng lại khi sai số trung bình (hoặc tổng sai số) nhỏ hơn một giá trị cho trước hoặc thay đổi không đáng kể (tức là quá trình huấn luyện hội tụ). 38 4.1.5. Ưu điểm và nhược điểm của mạng nơron Các nghiên cứu cả về mặt lí thuyết và thực tế cho thấy mạng nơron có những ưu điểm sau: • Có thể xấp xỉ một hệ phi tuyến động (nonlinear dynamical system) với độ chính xác bất kì. • Có khả năng miễn nhiễu (robustness) và chịu sai hỏng (fault tolerance) cao. Chẳng hạn mạng có thể nhận các dữ liệu bị sai lệch hoặc không đầy đủ mà vẫn hoạt động được. • Có khả năng thích ứng: mạng nơron có thể “học” (learn) và “điều chỉnh” (adapt) trong quá trình hoạt động. Đây là điểm đáng chú ý nhất của mạng nơron trong nhận dạng tiếng nói. Đặc điểm này của mạng cho phép ta hi vọng xây dựng được một hệ nhận dạng có thể “học tập” để nâng cao khả năng nhận dạng trong khi hoạt động. • Có khả năng tổng quát hoá (generalize) tốt và phân lớp (classify) mạng. Nhưng mạng nơron cũng không phải là công cụ vạn năng cho mọi vấn đề, vì chúng cũng có nhiều nhược điểm: • Chỉ xử lí được các dữ liệu số. Cần tích hợp thêm nhiều thành phần khác (ví dụ: các hệ mờ, các bộ số hoá...) để có thể xử lí những dữ liệu phi số. • Hiệu năng của mạng phụ thuộc bộ dữ liệu huấn luyện. Để đảm bảo hiệu năng, mạng cần được huấn luyện với lượng dữ liệu lớn. Quá trình huấn luyện do đó rất dài. Mặt khác nếu bộ dữ liệu được chuẩn bị không tốt thì mạng có khả năng tổng quát hoá thấp. • Mạng nơron gần như là một “hộp đen” đối với các phân tích. Rất khó xác định được sự phân bố thông tin và xử lí trên các phần tử của mạng. • Không có một phương pháp chung nào để xác định cấu trúc mạng phù hợp từng bài toán. Nhà nghiên cứu phải tiến hành thử nghiệm hoặc dựa vào kinh nghiệm để xác định. • Các thuật toán huấn luyện hiện chưa đảm bảo tránh quá trình huấn luyện rơi vào một cực trị địa phương. Hơn nữa sai số huấn luyện giảm không đồng nghĩa với tăng hiệu năng hoạt động của mạng. • Mạng cấu trúc lớn cài đặt bằng phần mềm trên máy tính hoạt động rất chậm. Việc xây dựng mạng nơron bằng phần cứng vẫn còn đang được nghiên cứu. 39 4.2. SỬ DỤNG MẠNG NƠRON TRONG NHẬN DẠNG MẪU 4.2.1. Một phương pháp tiếp cận dựa vào xác suất phân lớp Bài toán nhận dạng sẽ được giải quyết nếu chúng ta xây dựng được một cơ cấu nhận dạng có: • Đầu vào là đặc trưng của đối tượng cần nhận dạng. • Đầu ra là xác suất phân lớp hoặc độ giống (likelihood), độ tương tự (similarity) của đối tượng với những lớp mẫu đã huấn luyện. p 1 ( X ) p m ( X) v 1 (X) v n (X ) Minh hoạ: Mô hình nhận dạng bằng cơ cấu nhận dạng dựa theo xác suất phân lớp Chúng ta thấy rằng có thể dùng MLP để là một cơ cấu nhận dạng như vậy: Nếu đặc trưng của đối tượng là n số thực và có m lớp mẫu thì ta sẽ xây dựng một MLP n đầu vào, m đầu ra. Đầu vào là các đặc trưng của đối tượng, đầu ra là độ tương tự của đối tượng với mỗi lớp mẫu. MLP sẽ được huấn luyện dựa trên bộ dữ liệu huấn luyện được chuẩn bị trước để tìm mối liên hệ giữa đầu vào và đầu ra (học và tổng quát hoá). Những vấn đề này sẽ được trình bày kĩ trong chương 5. 4.2.2. Nhược điểm của mạng MLP trong nhận dạng tiếng nói MLP có một số nhược điểm sau khi sử dụng trong nhận dạng tiếng nói: - Có đầu vào cố định (trong khi tín hiệu tiếng nói là tín hiệu thay đổi theo thời gian: mỗi lần phát âm cho các từ có độ dài thường không bằng nhau). - Chi phí huấn luyện tốn kém (thời gian, không gian lưu trữ). Do đó MLP thường chỉ cho kết quả cao trong nhận dạng với bộ từ vựng nhỏ và phân biệt (độ tương tự của các lớp mẫu thấp). 4.2.3. Một số phương pháp tiếp cận khác 40 Ngoài cách tiếp cận như ở phần 4.2.1, còn có nhiều cách tiếp cận khác đối với nhận dạng tiếng nói bằng mạng nơron: - Dùng mô hình mạng TDNN (mạng nơron thời gian trễ): là mô hình cải tiến của MLP, có cơ chế để tích hợp thông tin về thời gian (các nơron trễ) khi đưa các mẫu tiếng nói qua mạng. Mô hình này nhằm giải quyết vấn đề về sự phụ thuộc thời gian của tín hiệu tiếng nói. - Kết hợp MLP và HMM: sử dụng MLP là bộ đo xác suất phát xạ vector quan sát. Cách tiếp cận này kết hợp ưu điểm của cả 2 mô hình. 4.3. MẠNG NƠRON TRÊN MÔI TRƯỜNG MATLAB Mạng nơron trên Matlab được hỗ trợ bởi nhiều toolbox, chẳng hạn NNet sẵn có của Matlab hoặc NetLab do Ian T. Nabney phát triển. Chúng tôi sử dụng toolbox NetLab để xây dựng, huấn luyện và thử nghiệm mạng nơron MLP cho hệ thống nhận dạng trong khoá luận này. 4.3.1. Khởi tạo mạng MLP Lệnh khởi tạo MLP trong NetLab có cú pháp như sau: net = mlp(inode, hnode, onode, func, anpha); Trong đó: • inode, hnode, onode lần lượt là số nơron của lớp vào, lớp ẩn và lớp ra. • func là kiểu hàm kích hoạt, func có thể có các giá trị ‘logistic’, ‘softmax’… • anpha là ngưỡng của giá trị trọng số, thường lấy bằng 0.01. • net là mạng MLP do hàm tạo ra. 4.3.2. Huấn luyện mạng MLP Mạng MLP sau khi điều kiện khởi tạo có thể huấn luyện với một bộ dữ liệu huấn luyện cho trước. Lệnh huấn luyện MLP trong NetLab có cú pháp như sau: [net, error] = mlptrain(net, x, t, its) Trong đó: • x, t là bộ dữ liệu huấn luyện. x là các vector đầu vào, t là các vector đầu ra cần đạt đến (target). • its là số vòng huấn luyện (số lần thực hiện thuật toán lan truyền ngược lỗi). • net là mạng nơron. • error là tổng sai số của lần huấn luyện cuối cùng. 41 4.3.3. Sử dụng mạng MLP Sau khi huấn luyện ta có thể dùng mạng MLP để tính đầu ra ứng với các đầu vào bất kì. Lệnh tính đầu ra y của MLP ứng với đầu vào x như sau: y = mlpfwd(net, x) Trong đó: • x là một hay nhiều vector đầu vào • y là các vector đầu ra tương ứng. Bạn đọc có thể tham khảo ví dụ về script và function ở mục 1.2.2. để tìm hiểu việc sử dụng các hàm này. 42 CHƯƠNG 5. XÂY DỰNG HỆ NHẬN DẠNG CHỮ SỐ TIẾNG VIỆT 5.1. XÂY DỰNG HỆ THỐNG NHẬN DẠNG 5.1.1. Mô tả chung về hệ thống Hệ thống nhận dạng được xây dựng trong khoá luận dựa trên phương pháp nhận dạng mẫu, sử dụng mạng nơron làm cơ cấu nhận dạng. • Phương pháp: nhận dạng từ đơn (isolate word recognition). • Input: file wav, mỗi file chỉ chứa một từ. Hoặc ghi âm trực tiếp. • Output: chữ số được nhận dạng trong file đầu vào. • Bộ từ vựng: 11 từ đơn âm các chữ số tiếng Việt (“không”, “một”, “hai”... “mười”). 5.1.2. Sơ đồ khối của hệ thống Nguồn vào (tiếng nói) Thu thập, tiền xử lí (cắt từ, lọc nhiễu...) Trích chọn đặc trưng MFCC Tính đầu vào cho mạng Thử nghiệm mạng DL thử nghiệm Chia bộ dữ liệu, phân lớp Trích chọn đặc trưng MFCC Xây dựng CSDL huấn luyện mạng C S D L hu ấn lu yệ n Mạng nơron MLP Xây dựng và huấn luyện mạng Truyền qua mạng để tính xác suất phân lớp Chữ số được nhận dạng Độ chính xác D L hu ấn lu yệ n Lựa chọn lớp có xác suất cao nhất Minh hoạ: Sơ đồ khối hệ thống nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron MLP trên môi trường Matlab Các phần tiếp theo mô tả cụ thể từng chức năng của hệ thống. 43 5.1.3. Thu thập và tiền xử lí tín hiệu tiếng nói Thu thập và tiền xử lí tín hiệu tiếng nói ở giai đoạn huấn luyện được thực hiện bằng phương pháp thủ công: sử dụng phần mềm ghi âm, lọc nhiễu và cắt thành các từ riêng rẽ, mỗi từ ghi vào một file (tên file ghi từ tương ứng). Bộ dữ liệu do chúng tôi tự xây dựng gồm: • 536 file wav 16 bit 8kHz, mỗi file là phát âm của một từ. • 11 từ là các chữ số tiếng Việt từ “không” đến “mười”. (Mặc dù “mười” không phải là chữ số nhưng vẫn cần trong hệ nhận dạng chữ số vì có các số phát âm là “mười một”, “mười hai”...). • 5 người nói. Ở giai đoạn nhận dạng, việc thu thập và tiền xử lí (cắt các vùng không chứa tín hiệu tiếng nói) được thực hiện bởi các lệnh sau: x = wavrecord(10000,8000); %tần số lấy mẫu 8kHz x = x'; % ghi âm chừng hơn 1s y = endcut(x, 64, 1.5E-3); Hàm endcut dùng cắt các khoảng lặng không chứa tín hiệu âm: function y = endcut(x, n, es) % cat khoang lang ra khoi x. % n là độ dài frame, es là ngưỡng năng lượng. x = x - mean(x); if nargin < 3 es = 2E-3; end; if nargin < 2 n = 128; end; y=[]; t=x(1:n); e=mean(t.^2); i=n+1;ln = length(x) - n+1; while i<=ln t=x(i:i+n-1); e1=mean(t.^2); if ~( (e1<es) | (abs(e1-e)<es) ) y = [y t]; end; i=i+n; end; 44 5.1.4. Phân chia bộ dữ liệu và phân lớp Bộ dữ liệu huấn luyện có 11 từ nên chúng tôi chia toàn bộ vector đặc trưng thành 11 lớp, mỗi vector ứng với lớp của từ tương ứng. (Từ “một” thuộc lớp 1, từ “hai” thuộc lớp 2,... từ “không” thuộc lớp 11). Các dữ liệu trên lại tiếp tục được chia làm 2 phần: một phần dành cho huấn luyện và một phần để kiểm tra. Phân chia bộ dữ liệu và phân lớp cũng được thực hiện thủ công: danh sách các file được đưa vào Excel, thông tin về chỉ số lớp của mỗi file được đưa vào tương ứng. Mỗi file cũng được xếp vào một trong 2 nhóm: train và test. Nạp file Excel bằng Matlab để tạo thành 2 biến: biến file mô tả tên file, và biến list mô tả thông tin phân lớp. Sau đó dùng các lệnh sau: numid=list(:,1); train=find(list(:,2)==1); test=find(list(:,2)==0); numid mô tả chỉ số lớp tương ứng với mỗi từ; train, test là danh sách các từ thuộc bộ dữ liệu huấn luyện và kiểm tra. 5.1.5. Trích chọn đặc trưng MFCC Mỗi file âm thanh được trích chọn đặc trưng MFCC thành một dãy các vector MFCC bằng hàm wave2mfcc: function mfcc = wave2mfcc(wav, fs, p); if nargin < 3 % mặc định lấy vector MFCC 8pt p = 8; end; if nargin < 2 % mặc định tần số lấy mẫu = 8kHz fs = 8000; end; if isstr(wav) % nếu wav là tên file thì đọc [wav fs] = wavread(wav); end; % chuẩn hoá để max(wav)=1. mx = max(wav); wav = wav ./ mx; % tính vector MFCC p phần tử, gồm cả năng lượng mfcc = melcepst(wav,fs,'e',p-1); 5.1.6. Tính đầu vào cho mạng Vì các file wav có độ dài ngắn khác nhau nên dãy các vector đặc trưng MFCC tương ứng cũng không có cùng số phần tử. Nhưng đầu vào của mạng nơron MLP lại phải cố định. Do đó chúng tôi thực hiện một biện pháp đơn giản 45 là chia dãy đặc trưng thành 5 phần đều nhau, tính trung bình của từng phần được 5 vector rồi ghép lại thành một vector. Kết quả đầu vào của mạng nơron là một vector 40 thành phần. Hàm tính đầu vào của mạng: function x = VecAvr(ft,k); % trích ft thành k phần chia trung bình. n = length(ft); m = floor(n/k); x=[]; i=0;t=1; while i<k i=i+1; f=sum(ft(t:t+m-1,:))./m; x=[x f]; t=t+m; end; Toàn bộ dữ liệu huấn luyện được đọc vào Matlab qua hàm: function [x,t,z]=MakeDataANN(file, train, numid, test) N=length(train); i=0; x=[]; t=[]; while i<N i = i + 1; j=train(i) str = file{j}; mfc = wave2mfcc(str); % trích MFCC từ file wav xi = vecavr(mfc,5); % chia 5 phần ti = zeros(1,11); ti(numid(j))=1; % tính target x = [x; xi]; % ghép xi vào cuối của x t = [t; ti]; end; N=length(test); i=0; z=[]; while i<N i = i + 1; str = file{test(i)}; mfc = wave2mfcc(str); xi = vecavr(mfc,5); z = [z; xi]; end; Trong đó: x, z là đầu vào cho mạng của tương ứng với dữ liệu huấn luyện và kiểm tra. t là đầu ra mong muốn (target) dành cho huấn luyện. Đầu ra mong muốn của dữ liệu huấn luyện xác định rất đơn giản: là một vector 11 thành phần (ứng với 11 lớp mẫu). Nếu file tương ứng trong bộ dữ liệu huấn luyện thuộc lớp k, thì thành phần thứ k của vector bằng 1, các thành phần còn lại bằng 0. 46 5.1.7. Xây dựng và huấn luyện và thử nghiệm mạng Xây dựng và huấn luyện và thử nghiệm các mạng có cấu trúc khác nhau (về số nơron ẩn, kiểu hàm kích hoạt) được tiến hành bằng script sau: clc; hnode=0; kq=[]; mac=0; i=0; while hnode<150 hnode=hnode+5 % tăng hnode theo bước 5 main % thử nghiệm mạng if mac < ac % ghi nhận mạng tốt hơn mac = ac; best = net; end; i=i+1; netkq{i} = net; % ghi lại tất cả các mạng end; Trong đó script main thực hiện khởi tạo, huấn luyện và kiểm tra mạng: net = mlp(inode, hnode, onode, func, anpha); % tạo MLP [net err]=mlptrain(net, xtrain, target, loop); % train ytest = mlpfwd(net, xtest); % tính đầu ra bộ test ac = TestANN(ytest, numid(test)); % tính độ chính xác kq =[kq; ac]; Các tham số mạng như func (kiểu hàm kích hoạt), anpha (cận khởi tạo trọng số), loop (số vòng lặp huấn luyện) được thay đổi theo mỗi cấu trúc mạng. Hàm TestANN dùng tính số từ được nhận dạng chính xác dựa trên đầu ra tương ứng với đầu vào của bộ bộ dữ liệu kiểm tra. function [ac, qt] = TestANN(yte, numid) qt=[]; ac=0; i=0; while i<length(yte) i=i+1; kc = yte(i,:); [mi id] = max(kc); % xác định lớp xác suất cao nhất if id == numid(i) % nếu là chỉ số lớp tương ứng ac = ac + 1; % => nhận dạng đúng end; qt = [qt; i id numid(i) mi ac kc]; end; ac = ac / length(yte); %độ chính xác=số từ đúng/tổng 5.1.8. Sử dụng mạng trong nhận dạng Hàm ANNrecognize thực hiện nhận dạng với đầu vào cho trước: 47 function [id, xs, out] = ANNrecognize(wav,net); mfc = wave2mfcc(wav); % trích MFCC vec = vecavr(mfc,5); % tính đầu vào out = mlpfwd(net,vec); % tính đầu ra của mạng [xs id] = max(out); % đưa ra lớp cao nhất 5.1.9. Giao diện phần mềm demo Phần mềm demo có thể nhận dạng cả trực tuyến (vừa ghi âm vừa nhận dạng) và ngoại tuyến (nhận dạng file được ghi âm sẵn). Mỗi lần chỉ nhận dạng được một từ. Nhìn chung nhận dạng ngoại tuyến cho kết quả cao hơn vì hàm cắt khoảng lặng của phần mềm demo có độ chính xác chưa cao. 48 5.2. KẾT QUẢ THỬ NGHIỆM Kết quả quá trình thử nghiệm được tổng hợp trong bảng sau: Bảng kết quả thử nghiệm: Bộ dữ liệu 5 người nói Số từ dùng huấn luyện: 268 Số từ dùng kiểm tra: 268 Độ chính xác=số từ nhận dạng đúng/tổng số từ trong bộ dữ liệu kiểm tra. hnode sig01-50 sig01-100 sig05-50 smx01-50 smx01-100 smx05-50 5 27.61% 22.02% 20.52% 35.08% 60.45% 42.54% 10 53.36% 81.34% 37.31% 88.81% 90.30% 87.69% 15 82.46% 89.18% 89.18% 94.03% 92.16% 89.93% 20 66.42% 76.87% 86.57% 95.15% 94.03% 95.52% 25 92.16% 96.64% 88.06% 95.52% 96.64% 94.78% 30 94.78% 92.91% 93.28% 97.39% 92.91% 94.78% 35 94.40% 94.78% 93.28% 95.15% 96.27% 95.52% 40 94.40% 97.02% 95.52% 98.13% 97.76% 97.02% 45 94.03% 97.39% 95.90% 95.52% 97.76% 97.76% 50 96.27% 97.02% 97.39% 97.39% 97.39% 97.76% 55 94.78% 96.64% 97.39% 98.13% 97.76% 97.76% 60 97.02% 97.76% 97.02% 98.51% 98.88% 96.64% 65 98.51% 97.39% 96.64% 97.76% 98.88% 97.76% 70 97.02% 97.02% 97.76% 97.76% 98.51% 97.76% 75 98.13% 97.39% 97.39% 98.51% 97.39% 96.64% 80 95.90% 98.51% 96.64% 98.88% 98.88% 96.64% 85 97.76% 97.02% 98.51% 98.13% 98.88% 98.88% 90 98.13% 98.51% 98.13% 98.51% 98.51% 97.76% 95 98.51% 98.88% 96.27% 97.39% 98.88% 99.25% 100 97.76% 98.88% 98.51% 98.13% 98.13% 98.13% 105 97.39% 97.76% 97.39% 98.51% 98.51% 98.13% 110 98.51% 98.51% 98.13% 98.51% 98.13% 98.51% 115 97.39% 99.25% 97.39% 97.39% 98.13% 98.13% 120 98.13% 98.13% 98.13% 98.13% 97.39% 99.25% 125 98.51% 98.51% 98.13% 98.51% 98.13% 97.76% 130 97.76% 98.51% 97.76% 97.76% 98.51% 98.51% 135 98.88% 98.51% 98.13% 98.13% 98.51% 97.76% 140 97.39% 98.13% 97.76% 98.88% 98.51% 98.51% 145 99.25% 98.88% 98.51% 97.02% 98.88% 98.13% 150 97.76% 98.13% 98.13% 97.76% 98.13% 98.51% T.B. 91.68% 93.58% 91.69% 95.15% 96.11% 95.12% 49 Trong đó hnode là số nơron lớp ẩn, ứng với mỗi kiểu mạng như sau: Kí hiệu Hàm kích hoạt Giá trị khởi tạo trọng số Số vòng lặp huấn luyện sig01-50 sigmoid (logistic) 0.1 50 sig01-100 sigmoid (logistic) 0.1 100 sig05-50 sigmoid (logistic) 0.5 50 smx01-50 softmax 0.1 50 smx01-100 softmax 0.1 100 smx05-50 softmax 0.5 50 Biểu đồ sau thể hiện kết quả nhận dạng theo số nơron lớp ẩn trong 2 kiểu mạng cho kết quả cao nhất. 75% 80% 85% 90% 95% 100% 5 15 25 35 45 55 65 75 85 95 105 115 125 135 145 sig01-100 smx05-50 Từ kết quả thử nghiệm, chúng tôi rút ra một số kết luận sau: 1. Phương pháp nhận dạng bằng mạng nơron cho kết quả nhận dạng cao nhất là 99.25% trên bộ dữ liệu do chúng tôi tự xây dựng. Như vậy có thể sử dụng mạng nơron làm một cơ cấu nhận dạng hiệu quả, ít nhất là đối với hệ thống nhận dạng chữ số. 2. Mạng sẽ cho kết quả nhận dạng cao nếu xây dựng hợp lí. Không hẳn cứ nhiều nơron lớp ẩn, cứ huấn luyện nhiều là mạng có độ chính xác cao hơn. (Mặc dù điều đó làm giảm sai số huấn luyện của mạng). Vấn đề sai số huấn luyện thấp, sai số kiểm tra cao xảy ra khi độ tương 50 tự giữa bộ dữ liệu huấn luyện và bộ dữ liệu kiểm tra không lớn. Khi đó mạng nhận dạng rất chính xác trên bộ dữ liệu huấn luyện nhưng kém chính xác hơn nhiều trên bộ dữ liệu kiểm tra. 3. Hàm kích hoạt softmax hiệu quả hơn hàm sigmoid. (Kết quả nhận dạng trung bình cao hơn, số nơron ẩn cần dùng thấp hơn khi cho kết quả nhận dạng cao nhất). 4. Môi trường Matlab có thể giúp công việc nghiên cứu nhận dạng tiếng nói đơn giản và hiệu quả hơn. Nhờ có Matlab và các bộ công cụ VoiceBox, NetLab mà việc phát triển hệ thống nhận dạng khá đơn giản và nhanh chóng (ví dụ: mã chương trình dùng rất ít lệnh, nhiều phần không cần lập trình). Những kết luận trên cho thấy khả năng sử dụng mạng nơron và môi trường Matlab trong nhận dạng tiếng nói có nhiều hứa hẹn. Tuy nhiên để đạt được điều đó thì phải xây dựng một bộ dữ liệu chuẩn và có chiến lược xây dựng, huấn luyện, thử nghiệm mạng hợp lí. 5.3. HƯỚNG MỞ RỘNG CỦA ĐỀ TÀI 5.3.1. Xây dựng bộ dữ liệu huấn luyện lớn hơn Như ta đã thấy, bộ dữ liệu là thành phần cực kì quan trọng đối với hệ nhận dạng. Hiện tại bộ dữ liệu chúng tôi đã xây dựng (182 file, 11 từ, 2 người) là còn quá khiêm tốn. Để có thể có những kết quả nghiên cứu tốt hơn, chúng tôi sẽ mở rộng bộ dữ liệu: tăng số người nói và số từ, đa dạng hoá môi trường ghi âm. 3.3.2. Xây dựng phần mềm nhận dạng dựa trên kết quả nghiên cứu Hệ thống nhận dạng hiện tại của chúng tôi hiện chỉ được thử nghiệm trên môi trường Matlab, mới có khả năng nhận dạng một file ghi âm sẵn của một từ (nhận dạng từ đơn, ngoại tuyến). Trong khi đó để hệ nhận dạng có thể ứng dụng được thì hệ phải hoạt động ở dạng trực tiếp và liên tục (tức là vừa ghi âm vừa nhận dạng, nhận dạng nhiều chữ số một lúc, chạy như một chương trình hệ thống). Mục tiêu của chúng tôi là sau khi thử nghiệm hệ thống cho kết quả cao sẽ xây dựng một bộ công cụ nhận dạng tiếng nói và các phần mềm ứng dụng, vì đó mới là mục đích của nghiên cứu nhận dạng tiếng nói. 5.3.3. Nghiên cứu các phương pháp xác định đặc trưng khác 51 Ở nghiên cứu này, việc tách đặc trưng của tín hiệu tiếng nói còn rất đơn giản (chia frame, tính MFCC, chia 5 phần lấy trung bình cộng). Để nâng cao kết quả nhận dạng cần tìm những đặc trưng ổn định hơn của tiếng nói và những phương pháp tách đặc trưng hiệu quả hơn. 5.3.4. Nghiên cứu các phương pháp nhận dạng khác Các nghiên cứu khác ([1,9,10]) cho thấy hiện tại mô hình Markov ẩn (HMM) đang cho kết quả nhận dạng cao nhất. Hướng nghiên cứu mới của đề tài là tìm cách kết hợp mạng nơron và mô hình Markov ẩn nhằm kết hợp ưu điểm của hai mô hình. Mặt khác, đối với bộ từ vựng nhỏ thì nhận dạng từ đơn (âm tiết) là thích hợp. Tuy nhiên với hệ nhận dạng cỡ lớn, nhất là hệ nhận dạng tiếng Việt hoàn chỉnh (6 nghìn âm tiết ) thì chọn đơn vị nhận dạng là âm tiết không hợp lí lắm. Một hướng nghiên cứu khác của đề tài là nhận dạng đối với đơn vị nhỏ hơn âm tiết là âm vị. Tức là xây dựng các hệ nhận dạng có chức năng: • Phân biệt được nhiễu nền (khoảng lặng), phụ âm, nguyên âm. • Nhận dạng phụ âm (phân biệt được các phụ âm khác nhau). • Nhận dạng nguyên âm (phân biệt được các nguyên âm khác nhau). • Nhận dạng thanh điệu của âm tiết. 52 PHỤ LỤC 1. DANH MỤC TÀI LIỆU THAM KHẢO Kí hiệu Tác giả Tên tài liệu Ghi chú [1] Đặng Ngọc Đức Mạng nơron và mô hình Markov ẩn trong nhận dạng tiếng Việt Luận án tiến sĩ [2] Nguyễn Hữu Tình, Lê Tấn Hùng, Phạm Ngọc Yến, Nguyễn Thị Lan Hương Cơ sở Matlab và ứng dụng Sách NXB KHKT -1999 [3] Đoàn Thiện Thuật Ngữ âm tiếng Việt Sách NXB ĐHQG Hà Nội - 2003 [4] Nguyễn Thanh Thuỷ Nhập môn xử lý ảnh số Sách NXBKHKT [5] Alpay Koç Acoustic feature analysis for robust speech recognition [6] John-Paul Hosom, Ron Cole A diphone-based digit recognition system using neural networks du/cslu [7] John-Paul Hosom, Ron Cole, Mark Fanty, Don Colton Speech Recognition Using Neural Networks Webpage tại du/cslu [8] Mehdi R. Zargham Computer Architecture [9] Rabiner L.R A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition Proceedings of IEEE, VOL.77, NO.2, FEB 1989 [10] Rabiner L.R, Huang B. H Fundamentals of Speech Recognition Sách NXB Prentice Hall - 1993 [11] Simon Haykin Neural Networks - A comprehensive foundation Sách NXB Prentice Hall - 1998 [12] V.Mantha, R.Duncan, Y.Wu, J.Zhao Implementation and analysis of speech recognition front-ends ECE4773/Digital Signal Processing - 1998 [13] Joe Tebelskis Speech Recognition using Neural Networks CMU-CS-95-142 53 PHỤ LỤC 2. BẢNG CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT Thuật ngữ Từ viết tắt Ý nghĩa Artifactial Neural Network ANN Mạng nơron nhân tạo Fast Fourier Transform FFT Biến đổi Fourier nhanh Dicrette Cosine Transform DCT Biến đổi cosin rời rạc. Hidden Markov Model HMM Mô hình Markov ẩn Linear predictive code LPC Hế số dự đoán tuyến tính Mel-scale Frequency Cepstral Coefficient MFCC Hệ số cepstral độ đo mel Multi Layer Perceptron MLP Mạng perceptron truyền thẳng nhiều lớp Speech Recognition SR,ASR Nhận dạng tiếng nói Bias Ngưỡng kích hoạt Pattern Recognition Nhận dạng mẫu Likelihood Mức độ giống Similarity Mức độ tương tự Feature Đặc trưng Spectral, spectrum Phổ tín hiệu

Các file đính kèm theo tài liệu này:

  • pdfTìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab.pdf