Python là một ngôn ngữ lập trình thông dịch do Guido van Rossum tạo ra năm 1990. Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ động; do vậy nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển trong một dự án mã mở của tổ chức phi lợi nhuận Python Software Foundation.
Python là một ngôn ngữ lập trình hướng đối tượng rất thông dụng dùng để viết các tiện ích hệ thống và các đoạn mã trên Internet. Nó cũng được sử dụng như ngôn ngữ kết dính đóng vai trò tích hợp C và C++.
Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu.
Python được sử dụng hệ điều hành từ DOS đến Mac OS, OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Có thể download Python 3.0 tại địa chỉ: http://www.python.org.
Đặc điểm của Python: là một ngôn ngữ dễ học, mã nguồn dễ đọc, bố cục trực quan, dễ hiểu, thể hiện qua các điểm sau:
- Từ khóa: tăng cường sử dụng từ khóa tiếng anh, hạn chế các kí hiệu và cấu trúc cú pháp so với các ngôn ngữ khác. Python là một ngôn ngữ phân biệt kiểu chữ hoa, chữ thường, các từ khóa đều ở dạng chữ thường.
- Khối lệnh: Python có một cách rất đặc biệt để tạo khối lệnh, đó là thụt các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa nó.
2.7. Sử dụng các bộ công cụ và ngôn ngữ lập trình cho các bƣớc của bài toán nhận dạng giới tính, cảm xúc của ngƣời nói
Bài toán nhận dạng giới tính, cảm xúc của người nói sử dụng ALIZE, LIA- RAL và SPro gồm các bước cụ thể được mô tả trong hình 2.5.
Hình 2.5: Sơ đồ khối các bước thực hiện nhận dạng giới tính, cảm xúc của người nói sử dụng ALIZE
Hình 2.5 mô tả các bước thực hiện nhận dạng giới tính, cảm xúc của người nói sử dụng ALIZE và LIA-RAL, trong mỗi bước chính sẽ có các bước nhỏ và có công cụ tương ứng để thực hiện. Trích chọn đặc trưng và chuẩn hóa đặc trưng Huấn luyện mô hình Tính kết quả nhận dạng Huấn luyện Nhận dạng
2.7.1.1. Trích chọn và chuẩn hóa đặc trƣng
Các bước và công cụ liên kết tại mỗi bước thực hiện trích chọn, chuẩn hóa đặc trưng sử dụng ALIZE được trình bày trong hình 2.6.
Hình 2.2: Sơ đồ các bước và công cụ liên kết tại các bước thực hiện trích chọn, chuẩn hóa đặc trưng
Hình 2.6 mô tả các bước và công cụ liên kết tại các bước thực hiện trích chọn và chuẩn hóa đặc trưng
Để thực hiện trích chọn và chuẩn hóa đặc trưng hệ thống sẽ thực hiện các bước như sau: Trích chọn đặc trưng MFCC, Dò năng lượng, loại bỏ khoảng lặng và chuẩn hóa các đặc trưng.
a. Trích chọn đặc trưng MFCC Hình 2.7: Sơ đồ trích chọn đặc trưng MFCC *.wav *.prm sfbcep Trích chọn đặc trưng MFCC sfbcep Dò năng lượng NormFeat (Energy) Loại bỏ khoảng lặng EnergyDetector Chuẩn hóa đặc trưng NormFeat
Hình 2.7 mô tả sơ đồ thực hiện của bước trích chọn đặc trưng MFCC. Để thực hiện trích chọn đặc trưng thì yêu cầu đầu vào, câu lệnh thực hiện và đầu ra cụ thể như sau:
- Đầu vào: file âm thanh có định dạng *.wav, các file âm thanh này được lưu trong thư mục input.
- Đầu ra: file chứa các đặc trưng tín hiệu tiếng nói của từng file âm thanh, có định dạng *.prm và các file này được lưu trong thư mục prm.
- Câu lệnh thực hiện: sử dụng câu lệnh sfbcep trong Spro, cấu trúc câu lệnh:
sfbcep [option] inputfile outputfile
Ví dụ:
sfbcep -F PCM16 -f 16000 -p 19 -e -D -A /home/nhung/CSDL/input/03a01Fa.wav /home/nhung/CSDL/prm/03a01Fa.prm
Ý nghĩa của các option lựa chọn trong câu lệnh:
+ F PCM16: sử dụng định dạng hiển thị sóng đầu vào của file là: FCM16 + f 16000: sử dụng tần số cho sóng đầu vào là 16000Hz
+ p 19: có hệ số Cepstral là 19
+ e: sử dụng thêm năng lượng cho véc tơ đặc trưng
+ D: Thêm các dẫn xuất đầu tiên đến các vector đặc trưng + A: Thêm các dẫn xuất thứ hai với các vector đặc trưng. b. Dò năng lượng
Hình 2.8: Sơ đồ bước dò năng lượng
*.lst & *.prm
*.enr.prm NormFeat (Energy)
- Đầu vào:
+ file chứa danh sách các file âm thanh cần tính được loại bỏ phần mở rộng .wav. Tên của mỗi file âm thanh sẽ được lưu trên 1 dòng.
Ví dụ: file all.lst: 03a01Fa 03a01Nc ………..
+ Các file chứa đặc trưng tiếng nói có định dạng *.prm (file đầu ra của bước trích chọn MFCC)
Ví dụ:
03a01Fa.prm 03a01Nc.prm ……….
- Đầu ra: là các hệ số năng lượng tiếng nói đã được chuẩn hóa được lưu trong file có định dạng *.enr.prm và các file này được lưu trong thư mục prm.
- Câu lệnh thực hiện:
NormFeat [option] – inputFeatureFilename inputfile
Trong đó:
option: được config với tên file: NormFeat_energy.cfg đặt trong thư mục cfg inputfile: là file *.lst
Khi thực hiện câu lệnh hệ thống sẽ đọc lần lượt từng dòng trong file danh sách (*.lst) và đi tìm file tương ứng với đuôi mở rộng .prm trong thư mục prm. Đọc file *.prm để chuẩn hóa các hệ số năng lượng tiếng nói và lưu thành file với phần mở rộng *.enr.prm.
Ví dụ:
NormFeat --config ./cfg/NormFeat_energy.cfg --inputFeatureFilename ./lst/all1.lst
File sinh ra tương ứng: 03a01Fa. enr.prm
03a01Nc. enr.prm ……
c. Loại bỏ khoảng lặng
Hình 2.9: Sơ đồ bước loại bỏ khoảng lặng - Đầu vào:
+ File chứa danh sách các file âm thanh cần tính được loại bỏ phần mở rộng .wav. Tên của mỗi file âm thanh sẽ được lưu trên 1 dòng.
Ví dụ: file all.lst: 03a01Fa 03a01Nc ………..
+ File chứa các hệ số năng lượng tiếng nói đã được chuẩn hóa và được lưu trong file có định dạng *.enr.prm (file đầu ra của bước trích dò năng lượng)
Ví dụ: 03a01Fa. enr.prm 03a01Nc. enr.prm ……….
- Đầu ra: File chứa các khung hình với năng lượng của file âm thanh có định dạng *.lbl và được lưu trong thư mục lbl.
- Câu lệnh thực hiện:
EnergyDetector [option] – inputFeatureFilename inputfile
*.lst & *.enr.prm
*.lbl EnergyDetector
Trong đó:
option: được config với tên file: EnergyDetector.cfg đặt trong thư mục cfg inputfile: là file *.lst
Khi thực hiện câu lệnh hệ thống sẽ đọc lần lượt từng dòng trong file danh sách (*.lst) và đi tìm file tương ứng với đuôi mở rộng . enr.prm trong thư mục prm. Đọc file *. enr.prm để chọn các khung với năng lượng cao nhất và lưu thành file với phần đuôi mở rộng *.lbl
Ví dụ:
EnergyDetector --config ./cfg/EnergyDetector.cfg --inputFeatureFilename ./lst/all1.lst --verbose true --debugfalse
File sinh ra sau câu lệnh: 03a01Fa. lbl 03a01Nc. lbl ……….. d. Chuẩn hóa đặc trưng
Hình 2.10: Sơ đồ bước chuẩn hóa đặc trưng - Đầu vào: các file *.lst, *.prm
- Đầu ra: file chứa các vector tham số được chuẩn hóa tương ứng với các khung hình có năng lượng, file này có định dạng *.norm.prm và được lưu trong thư mục prm.
*.lst & *.prm
*.norm.prm NormFeat
NormFeat [option] – inputFeatureFilename inputfile
Trong đó:
option: được config với tên file: NormFeat.cfg đặt trong thư mục cfg inputfile: là file *.lst
Khi thực hiện câu lệnh hệ thống sẽ đọc lần lượt từng dòng trong file danh sách (*.lst) và đi tìm file tương ứng với đuôi mở rộng .prm trong thư mục prm, đọc file *.prm để loại loại các vector tham số không phù hợp và lưu thành file với phần đuôi mở rộng *.norm.prm
Ví dụ:
NormFeat --config ./cfg/NormFeat.cfg --inputFeatureFilename ./lst/all1.lst File sinh ra sau câu lệnh:
03a01Fa. norm.prm 03a01Nc. norm.prm ………
Sau khi trích chọn đặc trưng MFCC và chuẩn hóa các đặc trưng tiếng nói, thì bước tiếp theo là huấn luyện mô hình.
2.7.1.2. Huấn luyện mô hình
Để huấn luyện mô hình thì các bước thực hiện và công cụ liên kết được mô tả trong hình 2.11.
Hình 2.11: Sơ đồ các bước và công cụ liên kết để thực hiện huấn luyện mô hình Đặc trưng tiếng nói đã
được chuẩn hóa
Huấn luyện mô hình nền (TrainWorldInit)
Huấn luyện mô hình nền (TrainWorldFinal)
Huấn luyện mô hình đích
TrainWorld TrainWorld TrainTarger
Để huấn luyện mô hình hệ thống thực hiện các bước như sau: - Huấn luyện mô hình nền - TrainWorldInit
- Huấn luyện mô hình nền – TrainWorldFinal - Huấn luyện mô hình đích
a. Huấn luyện mô hình nền - TrainWorldInit
Hình 2.12: Sơ đồ bước huấn luyện mô hình nền - TrainWorldInit - Đầu vào
+ File world.lst là file lưu đường dẫn của các file danh sách để huấn luyện Ví dụ:
./lst/EGM01_1210/EGM01_12_W_train.lst ./lst/EGM01_1210/EGM01_12_L_train.lst …..
+ File world.weight là file chứa bộ trọng số tương ứng với số dòng của file world.lst.
Ví dụ: 0.17 0.17
- Đầu ra: file world_init.gmm & world_initinit.gmm: là mô hình chung nhất của người nói hay giới tính hay cảm xúc tùy thuộc vào việc huấn luyện mô hình cho mục đích nhận dạng người nói hay giới tính, hay cảm xúc.
world.lst & world.weight
world_init.gmm & world_initinit.gmm
Mô hình này được lựa chọn từ một số người nói sau đó huấn luyện một mô hình duy nhất được gọi là mô hình nền. Mô hình GMM được ước tính bằng cách sử dụng thuật toán EM (tối đa hóa kỳ vọng).
- Câu lệnh thực hiện:
TrainWorld [options] --inputFeatureFilename inputfile --outputWorldFilename worldfile
Trong đó:
options: được config với tên file: TrainWorldInit.cfg đặt trong thư mục cfg inputfile: world.lst và world.weight
worldfile: world_init.gmm & world_initinit.gmm Ví dụ:
TrainWorld --config ./cfg/TrainWorldInit.cfg --inputStreamList ./lst/world.lst --weightStreamList ./lst/world.weight --outputWorldFilename world_init --debug false --verbose true
File sinh sau câu lệnh TrainWorld là: world_init.gmm và world_initinit.gmm b. Huấn luyện mô hình nền –TrainWorldFinal
Hình 2.13: Sơ đồ bước huấn luyện mô hình nền - TrainWorldFinal
- Đầu vào: các file world.lst, world.weight, world_init.gmm và world_initinit.gmm.
world.lst & world.weight & world_init.gmm & world_initinit.gmm
world.gmm TrainWorld
- Đầu ra: file world.gmm - Câu lệnh thực hiện:
TrainWorld [options] --inputFeatureFilename inputfile --outputWorldFilename outworldfile --inputputWorldFilename inworldfile
Trong đó:
options: được config với tên file: TrainWorldFinal.cfg đặt trong thư mục cfg inputfile: world.lst và world.weight
outworldfile: world.gmm
inworldfile: world_init.gmm và world_initinit.gmm Ví dụ:
TrainWorld --config ./cfg/TrainWorldFinal.cfg --inputStreamList ./lst/world.lst --weightStreamList ./lst/world.weight --outputWorldFilename 2_world --inputWorldFilename world_init --debug false --verbose true
File sinh ra sau câu lệnh trên: world.gmm c. Huấn luyện mô hình đích
Hình 2.14: Sơ đồ bước huấn luyện mô hình đích - Đầu vào:
+ File *.ndx: là file chứa danh sách tên file đưa vào huấn luyện nhưng nội dung được ghi trên 1 dòng có khoảng cách giữa các tên file và có định dạng với
*.ndx & world.gmm
*.gmm TrainTarget
phần đầu đầu tiên của dòng là người nói hay giới tính hay cảm xúc và cộng thêm _gmm. Các file *.nxd được lưu trong thư mục ndx.
Ví dụ: file ndx để huấn luyện cảm xúc bình thường (N) sẽ có định dạng như sau: N_gmm 10a01Ac 10a02Ab 10a05Aa 10a07Aa 10a07Ad 10b01Aa 10b02Aa 10b09Ad 11a01Aa 11a01Ab 11a04Ac 11a05Ad 11a07Ac 11b01Ab
Với mỗi bài toán nhận dạng cụ thể sẽ cần đến số file .ndx tương ứng.
Ví dụ: bài toán nhận dạng giới tính cần có 2 file .ndx: Nam.ndx và Nu.ndx; bài toán nhận dạng cảm xúc với 4 cảm xúc (bình thường, vui, tức, buồn cần có 4 file .ndx: binhthuong.ndx, vui.ndx, buon.ndx, vui.ndx.
+ File *.world là file đầu ra của bước huấn luyện mô hình nền – TrainWorldFinal.cfg
- Đầu ra: là các mô hình của người nói hoặc giới tính hoặc cảm xúc tùy theo dữ liệu đầu vào và được định dạng file *.gmm, các file *.gmm được lưu trữ trong thư mục gmm.
Ví dụ: Với bài toán nhận dạng cảm xúc thì sẽ có 2 mô hình cảm xúc được sinh ra sau bước huấn luyện mô hình đích: M_gmm.gmm và F_gmm.gmm.
- Câu lệnh thực hiện
TrainTarget [options] -- targetIdList inputfile
-- inputWorldFilename worldfile
Trong đó:
options: được config với tên file: target.cfg đặt trong thư mục cfg inputfile: *.ndx
worldfile: world Ví dụ:
TrainTarget --config ./cfg/target.cfg --targetIdList ./ndx/N.ndx -- inputWorldFilename 2_world --debug false --verbose true
File sinh ra là: N_gmm.gmm
Phương pháp huấn luyện mô hình đích: xây dựng mô hình xuất phát từ việc điều chỉnh các thông số của mô hình nền bằng cách sử dụng tiếng nói trong giai đoạn huấn luyện và cực đại hóa xác suất hậu nghiệm (Map-Maximum A Posterior). Phương thức MAP sử dụng là phương pháp tiếp cận MAPOCCDep: biến ngẫu nhiên để ước lượng được tính toán bằng sự kết hợp tuyến tính các giá trị trong mô hình nền với dữ liệu trên thuật toán EM. Phương pháp này sẽ đưa vào một xác suất hậu nghiệm cho mỗi Gaussian.
2.7.1.3. Nhận dạng
Hình 2. 15: Sơ đồ các bước và công cụ liên kết để thực hiện nhận dạng
Hình 2.15 cho ta thấy rằng bước nhận dạng sẽ phải thực hiện với các yêu cầu đầu vào, câu lệnh thực hiện và đầu ra được mô tả trong hình 2.16
Đặc trưng tiếng nói của file sử dụng cho nhận dạng đã được chuẩn hóa
Mô hình đã được
huấn luyện Kết quả nhận dạng dưới
dạng ghi ra điểm số (score) Tính kết quả nhận dạng ComputeTest LIA-RAL (SpkDet)
Hình 2.16: Sơ đồ bước nhận dạng - Đầu vào:
+ File *.ndx là file chứa danh sách tất cả các file đưa vào thử nghiệm của chương trình. Nó có định dạng: tên file đưa vào thử nghiệm + tên file gmm (mô hình đã được huấn luyện).
Ví dụ:
12a01Fb W_gmm L_gmm E_gmm A_gmm F_gmm T_gmm N_gmm 12a01Lb W_gmm L_gmm E_gmm A _gmm F_gmm T_gmm N_gmm + file world.gmm là file sinh ra sau khi huấn luyện mô hình nền – TrainWorldFinal.
- Đầu ra: là kết quả nhận dạng dưới dạng ghi ra điểm số (score) tương ứng N người nói hoặc giới tính hoặc cảm xúc được lưu trong file *.res. Điểm số nào lớn nhất thì đó chính là người nói hoặc giới tính hoặc cảm xúc mà hệ thống cho ra kết quả cần tìm.
Ví dụ: một file âm thanh đưa vào nhận dạng dạng cảm xúc trong hệ thống được huấn luyện với 7 cảm xúc thì kết quả nhận dạng sẽ được ghi vào file có đuôi mở rộng .res với nội dung như sau:
M W_gmm 0 12a01Fb -0.131701 M L_gmm 0 12a01Fb -0.0984048 M E_gmm 0 12a01Fb -0.122088 M A_gmm 0 12a01Fb -0.153032 M F_gmm 0 12a01Fb -0.146931 *.ndx & world.gmm *.res ComputeTest
M T_gmm 0 12a01Fb -0.0172853 M N_gmm 0 12a01Fb -0.0531696 - Câu lệnh thực hiện
ComputeTest [options] -- ndxFileName inputfile
-- worldModelName worldfile
--outputFile outputfile
Trong đó:
options: được config với tên file: target_seg.cfg đặt trong thư mục cfg inputfile: *.ndx
worldfile: world outputfile: *.res Ví dụ:
ComputeTest --config ./cfg/target_seg.cfg --ndxFilename ./ndx/12_test.ndx -- outputFilename ./res/12_2.res --inputWorldFilename 2_world -- channelCompensation 12_2
File sinh sau câu lệnh ComputeTest: 12_2.res
Để tính toán điểm số này, xem xét số thuộc tính Gaussian của mô hình. Số Gausian được lựa chọn để huấn luyện mô hình nền và mô hình đích là bao nhiêu thì ở bước này sẽ xem xét số Gaussian tương ứng.
Với bài toán nhận dạng giới tính, cảm xúc của người nói sử dụng công cụ ALIZE, LIA-RAL, SPro phải thực hiện lần lượt 3 bước trên. Để thực hiện được 3 bước trên thì ở mỗi bước đều phải chuẩn bị cơ sở dữ liệu và trước khi thực hiện các bước thì phải tạo ra các thư mục làm việc: input, lst, prm, lbl, ndx, gmm và res.
Để có thể hực hiện tự động hóa một số bước trong quá trình xây dựng hệ thống nhận dạng giới tính, cảm xúc của người nói sử dụng công cụ ALIZE, LIA- RAL, SPro ta có thể kết hợp sử dụng ngôn ngữ Python trên môi trường Linux để xây dựng thành các modul cho mỗi bước.
Phần tiếp theo luận văn sẽ trình bày về hệ thống thử nghiệm nhận dạng giới tính, cảm xúc của người nói sử dụng các công cụ đã tìm hiểu.
CHƢƠNG 3: XÂY DỰNG HỆ THỐNG THỬ NGHIỆM NHẬN DẠNG GIỚI TÍNH, CẢM XÚC NGƢỜI NÓI VÀ ỨNG