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.
53 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 4127 | Lượt tải: 2
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:
- 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.pdf