1. Tổng quan về mạng Nơ ron sâụ
1.2.4. Các ứng dụng của nhận dạng tiếng nói
Sự phát triển của nhận dạng tiếng nói đã đem lại những thành quả to lớn trong thực tế, đã đem lại lợi ích lớn cho cuộc sống của con người, góp phần thay đổi phương thức tương tác người-máy làm cho cuộc sống ngày trở nên tiện nghi, tiết kiệm thời gian hơn.
Phạm vi ứng dụng của nhận dạng tiếng nói rất đa dạng, ứng dụng phổ biến trong các lĩnh vực sau:
- Ứng dụng trong văn phòng: Nhập thông tin vào biểu mẫu, quản lý, điều khiển cơ sở dữ liệu…
- Ứng dụng trong quản lý sản xuất: Giám sát quy trình, kiểm soát chất lượng… - Ứng dụng trong viễn thông: quay số tự động bằng giọng nói, tổng đài trả lời tự động, truy nhập bằng giọng nói…
- Ứng dụng trong y tế: tạo báo cáo…
- Ứng dụng trên thiết bị di động: Dùng giọng nói để truy nhập, tìm kiếm thông tin, điều khiển các ứng dụng bằng giọng nóị
Chương I đã cung cấp các kiến thức cơ bản về mạng nơ ron sâu và hệ thống nhận dạng tiếng nói, trên cơ sở đó ta sẽ tiếp tục xây dựng cơ sở lý thuyết cho hệ thống nhận dạng tiếng Việt nói ở chương tiếp theọ
42
Chương IỊ
PHƯƠNG PHÁP THỰC HIỆN VÀ CÔNG CỤ SỬ DỤNG 2.1. Phương pháp thực hiện đề tài
Trên cơ sở nghiên cứu lý thuyết, tìm hiểu về mạng Nơ ron sâu và hệ thống nhận dạng tiếng nói, phương pháp thực hiện đề tài được lựa chọn cụ thể như sau:
- Đặc trưng được sử dụng để nhận dạng: đặc trưng MFCC. - Mô hình sử dụng huấn luyện: mô hình GMM.
- Công cụ sử dụng: máy ảo Vmware, môi trường Linux, hệ điều hành CentOS7.0, Kaldi Toolkit, lập trình Shell, Perl, Python.
- Dữ liệu thử nghiệm: Dữ liệu tiếng Việt
2.2. Kỹ thuật trích chọn đặc trưng MFCC [3]
Trong nhận dạng tiếng nói, kỹ thuật trích chọn đặc trưng MFCC là phương pháp phổ biến nhất. Kỹ thuật này dựa trên việc thực hiện biến đổi để chuyển dữ liệu âm thanh đầu vào (đã được biến đổi Fourier cho phổ) về thang đo tần số Mel (một thang đo diễn tả tốt hơn sự nhạy cảm của tai người đối với âm thanh). Kỹ thuật trích chọn đặc trưng này gồm các bước biến đổi liên tiếp, đầu vào của quá trình này là một đoạn tín hiệu tiếng nóị Vì tín hiệu âm thanh sau khi được đưa vào máy tính đã được rời rạc hóa nên đoạn tín hiệu tiếng nói này bao gồm các mẫu liên tiếp nhau, mỗi mẫu là một giá trị thực, thể hiện giá trị biên độ của âm thanh tại một thời điểm. Trích chọn đặc trưng MFCC gồm sáu bước như trong hình vẽ 2.1, kết quả là một tập gồm 39 giá trị đặc trưng cho mỗi một frame tiếng nóị
43
Lọc hiệu chỉnh
Phân
khung Lấy cửa sổ FFT Băng lọc Mel
DCT Gán trọng số Tính năng lượng Đạo hàm theo thời gian Tín hiệu tiếng nói 12MFCC 1 energy 1 hệ số năng lượng 12∆ MFCC 12∆∆MFCC 1 ∆ energy 1∆∆ energy Hình 2.1: Các bước trích chọn đặt trưng MFCC
* Lọc hiệu chỉnh (Pre-emphasis): Tín hiệu tiếng nói s(n) được đưa qua bộ lọc số bậc thấp để phổ đồng đều hơn, giảm ảnh hưởng gây ra cho các xử lý tín hiệu sau nàỵ Thường bộ lọc này cố định bậc một, có dạng: H(z) = 1 – az-1, 0.9 ≤ a ≤ 1.0. Tín hiệu tiếng nói đầu vào ký hiệu là s(n); tín hiệu đầu ra của quá trình lọc hiệu chỉnh ký hiệu là s’(n). Tín hiệu ra có quan hệ với tín hiệu vào theo phương trình sai phân: s’(n) = s(n) – ạ s(n-1). Trong đề tài sử dụng bộ công cụ nhận dạng tiếng nói Kaldi xử lý với hệ số a = 0.97.
* Phân khung (Frame Blocking): Tín hiệu hiệu chỉnh được phân thành các khung, mỗi khung có N mẫu; hai khung kề lệch nhau M mẫụ Khung đầu tiên chứa N mẫu, khung thứ hai bắt đầu chậm hơn khung thứ nhất M mẫu và chồng lên khung thứ nhất N-M mẫụ Tương tự, khung thứ ba chậm hơn khung thứ nhất 2M mẫu (chậm hơn khung thứ hai M mẫu) và chùm lên khung thứ nhất N-2M mẫụ Quá trình này tiếp tục cho đến khi tất cả các mẫu tiếng nói cần phân tích thuộc về một hoặc nhiều khung.
* Lấy cửa sổ (Windowing): Lấy cửa sổ cho mỗi khung hình riêng rẽ, để giảm thiểu tính gián đoạn tại điểm đầu và điểm cuối của mỗi khung. Với cửa sổ 20-25ms được dịch 10ms và tần số lấy mẫu 16kHz được thể hiện trong hình 2.2.
44
Hình 2.2: Lấy cửa sổ (windowing)
Ta phải chia tín hiệu tiếng nói thành các khung chồng chéo liên tiếp vì tiếng nói không phải là các tín hiệu tĩnh; chúng ta muốn thông tin về một vùng đủ nhỏ mà thông tin về phổ là thông tin hữu ích.
Có các dạng cửa sổ như: cửa số hình chữ nhật (Rectangular) và cửa số Hamming. Hệ thống nhận dạng trong đề tài này trình bày sẽ sử dụng cửa sổ Hamming. Hamming: Trong loại cửa sổ này, giá trị của tín hiệu sẽ giảm dần về 0 khi tiến dần ra hai biên của framẹ Nói cách khác, nếu sử dụng cửa sổ Hamming để lấy ra các frame, năng lượng của mỗi frame sẽ tập trung ở giữa frame, một ưu điểm nữa là các giá trị biên của cửa sổ Hamming tiến dần về 0 sẽ làm bước biến đổi Fourier ngay sau trở nên dễ dàng hơn (với cửa sổ Rectangular các giá trị giữ nguyên so với mẫu tiếng nói, bên ngoài cửa sổ nhận giá trị 0, các giá trị sẽ bị tăng đột ngột ở hai biên). Với N là chiều dài cửa sổ, biểu thức hệ số của cửa sổ này là:
𝑤[𝑛] = {0.54 − 0.46 cos ( 2𝜋𝑛
𝑁 − 1) 𝑣ớ𝑖 0 ≤ 𝑛 ≤ 𝑁 − 1
0 𝑇𝑟ườ𝑛𝑔 ℎợ𝑝 𝑘ℎá𝑐
* Biến đổi Fourier nhanh (FFT): là bước chuyển đổi tín hiệu tiếng nói trong
45
biến đổi Fourier nhanh (FFT) thường được sử dụng để đảm bảo tốc độ. Sau khi tính FFT ta thu được phổ tín hiệụ (Thuật toán đòi hỏi N phải là lũy thừa của 2).
* Các băng lọc Mel
- Thang đo Mel: 1Mel là đơn vị của độ cao (pitch). Thang Mel là xấp xỉ tuyến tính với tần số dưới 1kHz và là hàm lo-ga với tần số trên 1kHz.
𝑀𝑒𝑙(𝑓) = 2595 𝑙𝑜𝑔10(1 + 𝑓
700)
Băng lọc Mel đồng đều trước 1kHz và tỷ lệ lo-ga sau 1kHz.
Các băng lọc Mel sử dụng để biến đổi phổ tín hiệu thu được sau khi tính FFT sang thang Mel trên miền tần số. Đầu ra của một dãy băng lọc tam giác là một dãy phổ năng lượng, tính tổng của các phổ năng lượng trong từng băng lọc ta thu được dãy các hệ số mk.
- Biến đổi Cosine rời rạc (DCT): sẽ chuyển log các giá trị mk về miền thời gian và thu được các hệ số MFCC. Trong các ứng dụng nhận dạng tiếng nói thường lấy 12 hệ số MFCC và thêm 1 hệ số năng lượng của khung sau khi đã được chuẩn hóạ
- Tính năng lượng:
Các hệ số cepstral không giữ năng lượng vì vậy chúng ta thêm một tham số năng lượng.
𝐸𝑛𝑒𝑟𝑔𝑦 = ∑ 𝑥2[𝑡]
𝑡2
𝑡=𝑡1
- Gắn trọng số: đối với các tham số đặc trưng tiếng nói được tính từ miền tần số như các hệ số MFCC, do độ nhạy của các hệ số Cepstral bậc thấp làm cho phổ toàn bộ bị đổ dốc và độ nhạy của các hệ số Cepstral bậc cao gây ra nhiễu, nên người ta thường sử dụng cửa sổ Cepstral để cực tiểu hóa các độ nhạy nàỵ
- Đạo hàm theo thời gian: đạo hàm theo thời gian của các hệ số MFCC vào trong vector tham số tiếng nói để nâng cao chất lượng nhận dạng.
Kết thúc bước trích chọn đặc trưng MFCC với mỗi frame ta thu được một vector có 39 giá trị biểu diễn tham số đặc trưng cho mỗi frame tiếng nóị Trong đó:
46
12 giá trị đặc trưng phổ Mel được biến đổi Fourier ngược; 12 giá trị delta phổ; 12 giá trị double delta phổ; 1 giá trị mức năng lượng; 1 giá trị delta mức năng lượng; 1 giá trị double delta mức năng lượng.
2.3. Mô hình GMM
Mô hình GMM là một dạng mô hình thống kê được xây dựng từ việc huấn luyện các tham số thông qua dữ liệu học. Về cơ bản, mô hình GMM xấp xỉ một hàm mật độ xác suất bằng hợp các hàm mật độ Gauss.
Hình 2.3: Hàm mật độ Gauss
Hình minh họa hai hàm mật độ Gauss với các tham số khác nhaụ
Hàm mật độ xác suất của phân phối Gauss fN(x, μ, σ2) được cho bởi công thức:
2 2 1 ( ) ( ) exp 2 2 x p x (2.1)
Trong đó: μ là giá trị trung bình, σ là độ lệch chuẩn.
Trong trường hợp x là vector gồm D thành phần, hàm mật độ xác suất của phân phối Gauss fN(x, μ, Σ) được cho bởi công thức:
' 1 /2 1/2 1 1 ( ) exp ( ) ( ) (2 )D | | 2 p x x x r r r r r (2.2)
Trong đó: μ là vector trung bình, Σ là ma trận hiệp phương saị
Nếu chọn μ=0 và σ=1, công thức (2.1) sẽ trở thành hàm mật độ chuẩn Gauss:
2 1 ( ) exp 2 (2 ) x p x (2.3)
47
Cho trước M phân phối Gauss p1, p2, …, pM, hàm mật độ xác suất của mô hình GMM được minh họa trong 2.4
Hình 2.4: Hàm mật độ xác suất của mô hình GMM
Hàm mật độ xác suất của mô hình GMM trong hình 2.4 chính là tổng trọng số của M phân phối Gauss theo công thức:
𝑃𝐺𝑀𝑀(𝑥) = ∑𝑀 𝑤𝑖𝑝𝑖
𝑖=1 (𝑥) (2.4)
Trong đó: wi là trọng số của phân phối Gauss thứ i, thỏa mãn ràng buộc 0≤ wi
≤1 và ∑𝑀 wi = 1
𝑖=1
Các trọng số này thể hiện mức độ ảnh hưởng của mỗi phân phối Gauss đối với mô hình GMM. Vì vậy, phân phối Gauss có phương sai và trọng số lớn bao nhiêu thì có mức độ ảnh hưởng lớn bấy nhiêu đối với kết xuất của mô hình.
2.4. Bộ công cụ nhận dạng tiếng nói Kaldi [2]
2.4.1. Giới thiệu
Các nhà nghiên cứu nhận dạng tiếng nói tự động (ASR) có một vài lựa chọn tiềm năng đối với các bộ công cụ mã nguồn mở để xây dựng một hệ thống nhận dạng. Đáng chú ý giữa: HTK, Julius (cả hai được viết bằng ngôn ngữ lập trình C); Sphinx- 4 (được viết bằng ngôn ngữ lập trình Java) và bộ công cụ RWTH ASR (được viết bằng C++). Tuy nhiên có một vài yêu cầu riêng - một bộ chuyển đổi trạng thái hữu hạn (FST: finite-state transducer) dựa trên fame-work, hỗ trợ đại số tuyến tính phạm vi rộng và một giấy phép không hạn chế - dẫn đến sự phát triển của Kaldị
48
Kaldi là một bộ công cụ nhận dạng tiếng nói được viết bằng C++ và được cấp phép theo giấy phép Apache 2.0. Bộ công cụ Kaldi được thiết kế dành riêng cho các nhà nghiên cứu nhận dạng tiếng nóị Về cái tên Kaldi: Theo truyền thuyết Kaldi là người chăn dê ở Ethiopian, người đã phát hiện ra cây cà phê.
* Kaldi so với các công cụ khác:
Kaldi tương tự như HTK về mục đích và phạm vị Mục đích là để có mã nguồn hiện đại và linh hoạt được viết bằng C++, có thể dễ dàng sửa đổi và mở rộng.
* Tính năng quan trọng của bộ công cụ Kaldi:
- Code-level (mức mã hóa) với bộ cảm biến trạng thái hữu hạn (FST – Finite State Transducers). Các nhà phát triển biên dịch lại các bộ công cụ OpenFST (sử dụng nó như một thư viện).
- Hỗ trợ số học tuyến tính mở rộng: Gồm một thư viện ma trận các gói BLAS và các chương trình con LAPACK.
- Thiết kế mở rộng: Các nhà phát triển cung cấp các thuật toán dưới dạng chung nhất có thể. Ví dụ, các bộ giải mã được mẫu hóa (templated) trên một đối tượng cung cấp một số điểm được lập chỉ mục bởi một bộ khung (frame) ký tự đầu vào FST. Điều này có nghĩa là bộ giải mã có thể làm việc từ bất cứ nguồn nào phù hợp về các điểm (scores), chẳng hạn như mạng Nơ-ron.
- Giấy phép mở: Mã nguồn mở này được cấp phép bởi Apache 2.0, là một trong những giấy phép có sẵn ít hạn chế.
- Công thức (recipe): Mục tiêu của các nhà phát triển là làm cho “recipe” hoàn toàn sẵn sàng cho việc xây dựng hệ thống nhận dạng tiếng nói, mà công việc từ cơ sở dữ liệu có giá trị rộng rãi như được cung cấp bởi ngôn ngữ dữ liệu Consortium (LDC- Linguistic Data Consortium). Mục tiêu của việc tách rời các thành phần công thức “recipe” là một khía cạnh quan trọng của Kaldi kể từ khi mã nguồn được công khai theo giấy phép cho phép sửa đổi và tái phát hành, các nhà phát triển muốn khuyến khích mọi người phát hành mã nguồn của họ, cùng với các bản ghi thư mục của họ trong định dạng tương tự với Kaldị Kaldi cho phép ta làm nhiều hoạt động không có khả năng phán đoán.
49
2.4.2. Cấu trúc bộ công cụ Kaldi [4]
Kaldi gồm một thư viện, các bộ chương trình dòng lệnh và kịch bản cho các mô hình âm học. Kaldi triển khai nhiều bộ giải mã để đánh giá các mô hình âm học, sử dụng huấn luyện Viterbi cho việc ước lượng mô hình âm học. Chỉ trong trường hợp đặc biệt của huấn luyện discriminative thích nghi người nói thì được mở rộng sử dụng thuật toán Baum-Welsh. Các kiến trúc của bộ công cụ Kaldi có thể được tách thành các thư viện Kaldi và các kịch bản huấn luyện. Các kịch bản này truy cập vào các hàm của thư viện Kaldi qua các chương trình dòng lệnh. Thư viện Kaldi C++ được xây dựng dựa trên thư viện OpenFST. Các hàm này có liên quan đến nhau và thường được nhóm trong một tên miền trong mã nguồn C++ mà tương ứng với một thư mục trên một hệ thống tập tin. Các ví dụ của tên miền và các thư mục được thể hiện trong hình 2.5. BLAS/LAPACK OpenFST Matrix Utils Feat GMM SGMM LM Tree FST ext HMM Transforms Decodable Decoder Kaldi C++ Executables (Shell) scripts Kaldi C++ Library External Libraries
Hình 2.5: Cấu trúc bộ công cụ Kaldi
Bộ công cụ Kaldi phụ thuộc vào hai thư viện có sẵn OpenFST cho frame-work trạng thái hữu hạn (finite-state framework) và thư viện đại số tuyến tính. Sử dụng thư viện chuẩn “chương trình con đại số tuyến tính cơ bản” (BLAS) và “gói đại số tuyến tính” (LAPACK).
50
Các mô-đun thư viện có thể được nhóm lại thành hai nửa riêng biệt, mỗi nửa phụ thuộc vào một trong các thư viện bên ngoài (external). Mô-đun đơn
DecodableInterface là cầu nối hai nửa nàỵ
Kaldi thực thi bằng cách tải đầu vào từ các tập tin và lưu trữ kết quả tới các tập tin một lần nữạ Ngoài ra, đầu ra của một chương trình Kaldi có thể được đưa vào lệnh kế tiếp sử dụng hệ thống đường ống (pipe). Thường có nhiều lựa chọn thay thế cho mỗi tác vụ nhận dạng tiếng nói sẽ được thể hiện trong danh sách các tập tin thực thi như sau:
Tham số hóa tiếng nói
- apply-mfcc
- compute-mfcc-feats - compute-plp-feats - …
Biến đổi các tham số
- apply-cmvn - compute-cmvn-stats - fmpe-apply-transform [5] - … Các bộ giải mã - gmm-latgen-faster - gmm- latgen-faster-parallel - gmm-latgen-biglm-faster - … Đánh giá và các tiện ích - compute-wer - show-alignments -…
51
Ngoài ra Kaldi còn cung cấp kịch bản chuẩn hoặc các hàm thêm mới tiện ích. Các kịch bản được đặt tại thư mục /utils và /steps được sử dụng trong kịch bản huấn luyện các công thức cho các dữ liệu khác nhaụ
2.5. Ngôn ngữ lập trình Shell
Shell là chương trình giữa người dùng và nhân Linux. Hay nói cách khác Shell là bộ diễn dịch ngôn ngữ lệnh, ngoài ra nó còn tận dụng triệt để các trình tiện ích và chương trình ứng dụng có trên hệ thống.
Các loại Shell thông dụng: