L ỜI CẢM ƠN Error! Bookmark not defined.
1.5.5 Cài đặt thuật toán biến đổi Fourier nhanh
Chúng tôi đã cài đặt thành công giải thuật biến đổi Fourier rời rạc để tính toán các
tín hiệu liên tục. Biến đổi Fourier nhanh phân tích tín hiệu thành các thành phần
tần số. Ở đây, chúng tôi phân tích trên một cửa sổ dữ liệu âm thanh thay vì trên toàn thời gian nói. Cửa sổ này là sản phẩm của việc ứng dụng Hamming Window
vào tín hiệu. Kết quả trả về là độ lớn phổ của dữ liệu trong cửa sổ Hamming. Mỗi
giá trị phổ trả về đại diện cho độ lớn của tần số cụ thể cho dữ liệu trong cửa sổ
nói “khoa công nghệ thông tin”. Phổ tần số trục tung là trục tần số, trục hoành là trục thời gian. Bóng tối là độ lớn của tần số tại thời điểm t tương ứng.
Hình 1.16 Tín hiệu của câu nói "khoa công nghệ thông tin” (kết quả của FFT)
CHƯƠNG 2 :HUẤN LUYỆN TIẾNG VIỆT NAM 2.1 Bộ từ điển Lexicom
Lexicon là bộ từ điển dùng để thể hiện các chữ thành các đơn vị phát âm
(phonemes). Nó là một thành phần quan trọng trong hệ thống nhận dạng tiếng nói.
Nhóm chúng em đã xây dựng được lexicon tiếng Việt theo phiên âm chuẩn quốc
tế. Lexicon tiếng Việt hơn 12 nghìn chữ sử dụng 41 phonemes cho cả hai miền
Nam và Bắc. Ví dụ: BIẾC B 4 IY AH K ... NGỜI NG 1 ER Y NGỞ NG 3 ER NGỠ NG 2 ER NGỢ NG 5 ER ... NHA N Y 0 AA ...
Trong đó các dấu “ngang”, “huyền”, “ngã”, “hỏi”. “sắc” và “nặng” được biểu
diễn bằng các số tương ứng “0”, “1”, “2” , “3”, “4” và “5”.
Có nhiều chữ người miền Nam và miền Bắc phát âm khác nhau. Người miền
Trung thì phát âm hoặc giống người Bắc hoặc giống người Nam. Chính vì thế mà nhóm em chỉ làm lexicon cho hai miền Nam và Bắc. Đây là cách phát âm phổ
thông theo hai miền chứ không phải cách phát âm địa phương.
Ví dụ:
BÀN B 1 AA NG Phiên âm theo giọng miền Nam
2.2 Dữ liệu
Dữ liệu học là một phần không thể thiếu trong nhận dạng tiếng nói. Dữ liệu
học quyết định trực tiếp đến kết quả nhận dạng. Dữ liệu học gồm hai phần là dữ
liệu văn bản và dữ liệu âm thanh. Dữ liệu âm thành là những tập tin âm thanh thu
âm những câu trong dữ liệu văn bản.
2.2.1 Dữ liệu văn bản
Tùy vào mục đích của việc nghiên cứu và chương trình ứng dụng nhận dạng
tiếng nói khác nhau thì có bộ dữ liệu văn bản khác nhau. Thường thì bộ dữ liệu văn bản được chọn theo chủ đề của ứng dụng.
Ví dụ:
Bộ dữ liệu văn bản đọc số từ 0 đến 9: kích thước từ vựng là 10 gồm các chữ
“không”, “một” ... “chín” và là bộ dữ liệu có kích thước từ vựng nhỏ nhất. Dưới đây là một số câu trong bộ dữ liệu đọc số mà nhóm em đã làm.
<S> KHÔNG HAI BỐN SÁU TÁM </S>
<S> MỘT KHÔNG NAM BẢY </S> <S> NĂM HAI BỐN BỐN </S>
<S> CHÍN KHÔNG MỘT </S>
<S> BA MỘT KHÔNG BẢY </S> Trong đó: <S> là bắt đầu một câu
</S> là kết thúc một câu.
Bộ dữ liệu từ vựng lớn là bộ dữ liệu gồm tất cả các chữ tiếng Việt: kích
thước từ vựng hơn 8 nghìn chữ. Dưới đây là một số câu trong bộ dữ liệu từ vựng
<S> TRẦN THỊ MAI ANH </S>
<S> ĐÊ HÁT KHÔNG BẢY ĐÊ TÊ HÁT </S> <S> CÔNG NGHỆ PHẦN MỀM </S>
<S> HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU</S>
<S> NGUYỄN CÔNG BÌNH </S>
Để có được một bộ dữ liệu từ vựng lớn thì nhóm chúng em phải thu thập dữ
liệu từ nhiều nguồn như báo chí, tác phẩm văn học, internet... Từ dữ liệu ban đầu
chúng em đã tách đoạn, tách câu, lọc bỏ những chữ không đúng chuẩn tiếng Việt,
những chữ tiếng nước ngoài, những chữ viết tắt, con số để được một bộ dữ liệu
chuẩn có các câu như trên.
2.2.2 Dữ liệu âm thanh
Dữ liệu âm thanh phụ thuộc vào bộ dữ liệu văn bản. Nó bao gồm tất cả các tập
tin âm thanh thu âm các câu trong bộ dữ liệu văn bản. Bộ dữ liệu văn bản cho nhận
dạng số gồm 200 câu thì bộ dữ liệu âm thanh là 200 tập tin âm thanh. Nhóm chúng em đã ghi âm dữ liệu thành tập tin có đuôi là .raw. Tập tin âm thanh .raw có độ nén cao, dung lượng nhỏ thích hợp cho việc ghi âm dữ liệu lớn.
Một tập tin âm thanh chuẩn là một tập tin không có tiếng ồn và nhiễu, các chữ
phải được đọc rõ ràng.
Hình 2.1 Sóng của câu "ba bốn bảy" không bị ồn và nhiễu
Trong qua trình thu âm, người thu âm có thể đọc nhanh làm mất tiếng dẫn đến
các chữ bị dính liền vào nhau. Điều này dẫn đến việc khi chúng ta cho huấn luyện
câu thu âm là “tôi đi” do đọc nhanh làm cho chữ “tôi” dính liền vào chữ “đi”. Khi
nhận dạng có thể cho kết quả sai là “tô đi” chứ không phải “tôi đi”.
Hình 2.2 Câu "tôi đi" được đọc rõ ràng
Hình 2.3 Câu "tôi đi" khi đọc quá nhanh
Ngược lại, nếu người thu âm đọc quá chậm và kéo dài chữ thì cũng dẫn đến
huấn luyện và nhận dạng bị sai. Ví dụ: chữ “tôi” được đọc kéo dài dẫn đến khi
nhận dạng có thể ra kết quả sai là “tôôôi đi” thay vì là “tôi đi”.
Hình 2.4 Chữ “tôi” khi đọc ngân dài
Bộ dữ liệu âm thanh phải được thu âm rõ ràng, dứt khoát từng chữ (đọc như
đọc chính tả). Người thu âm dữ liệu học cũng đóng vai trò rất quan trọng. Người
thu âm nằm trong độ tuổi từ 18 đến 51 chia đều theo độ tuổi, cân bằng cả giọng
nam và giọng nữ. Số lượng người thu âm lớn, trải đều theo lứa tuổi, cân bằng số
nam và nữ làm cho hệ thống trở lên phong phú hơn, linh hoạt hơn và khả năng
thích ứng cao. Ví dụ như huấn luyện 1000 người đọc, khi người thứ 1001 đọc thì hệ thống dễ dàng thích nghi với giọng của người này và cho kết quả nhận dạng
2.2.3 Tiếng ồn và nhiễu trong dữ liệu âm thanh
Tiếng ồn, nhiễu ảnh hưởng rất lớn đến quá trình học dữ liệu và nhận dạng.
Tiếng ồn, nhiễu là do nhiều nguyên nhân như tiếng ồn xe cộ, công trường, người
nói chuyện..., và nhiễu chủ yếu là do microphone.
Hình 2.5 Câu “ba bốn bảy” thu âm bị ồn và nhiễu
Lưu ý: khi thu âm nên chọn thời gian và địa điểm yên tĩnh thích hợp để hạn
chế tiếng ồn, và chọn microphone ít gây nhiễu.
2.3 Huấn luyện tiếng Việt
Bộ huấn luyện mà nhóm em sử dụng là SphinxTrain. Đây là bộ huấn luyện
phát triển bởi trường đại học Carnegie Mellon. Sau đây nhóm em xin trình bày về
quá trình chuẩn bị dữ liệu và huấn luyện đọc số tiếng Việt.
2.3.1 Chuẩn bị dữ liệu
Dữ liệu cho nhận dạng đọc số tương đối đơn giản vì kích thước từ vựng nhỏ
với 10 chữ số. Bộ dữ liệu đọc số nhóm em chuẩn bị là 200 câu và do nhiều người
thu âm. Để học tiếng Việt thì chúng ta phải chuẩn bị các dữ liệu đầu vào như sau:
VT.dic
Là tập tin từ điển tiếng Việt theo phiên âm quốc tế (lexicon). Đây là lexicon
cho đọc số, chỉ có 10 chữ “không”, “một”, ..., “chín”.
Từ điển đọc số tiếng Việt phiên âm quốc tế:
BA B 0 AA B\u1ea2Y B 3 AY B\u1ed0N B 4 AO NG
CH\u00cdN T Y 4 IY N HAI HH 0 AA Y KH\u00d4NG K HH 0 AW NG M\u1ed8T M 5 AO K N\u0102M N 0 AH M S\u00c1U SH 4 AW T\u00c1M T 4 AA M VT.filler
Là một tập tin đóng vai trò là một bộ lọc nhiễu.
<S> SIL <SIL> SIL </S> SIL
Trong đó:
<S> : khoảng nặng đầu câu
<SIL> : khoản nặng trong câu
</S> : khoảng nặng cuối câu
VT.phone
Là tập tin chứa các phonemes xuất hiện trong từ điển đọc số (VT.dic) và trong bộ lọc nhiễu (VT.filler), có 20 phonemes được sử dụng cho 10 chữ từ 0 đến 9 là:
0 3
4 5 AA AH AO AW AY B HH IY K M N NG SH SIL T Y
Các phonemes này phải duy nhất trong tập tin VT.phone và chỉ gồm những
phonemes mà chúng ta cần (xuất hiện trong VT.dic và VT.filler).
VT_train.transcription
Là tập tin chứa các câu mà chúng ta dùng để học. Dưới đây là một số câu trong 200 câu dùng để huấn luyện đọc số:
………... <S> N\u0102M HAI B\u1ed0N B\u1ed0N </S>
<S> CH\u00cdN KH\u00d4NG M\u1ed8T </S> <S> BA M\u1ed8T KH\u00d4NG B\u1ea2Y </S> <S> M\u1ed8T B\u1ea2Y CH\u00cdN </S> <S> BA S\u00c1U N\u0102M </S>
<S> CH\u00cdN B\u1ea2Y HAI </S>
<S> M\u1ed8T KH\u00d4NG HAI B\u1ed0N </S> <S> N\u0102M KH\u00d4NG HAI </S>
<S> M\u1ed8T KH\u00d4NG HAI B\u1ed0N </S>
<S> KH\u00d4NG N\u0102M M\u1ed8T BA KH\u00d4NG M\u1ed8T B\u1ed0N BA </S>
<S> KH\u00d4NG N\u0102M M\u1ed8T BA KH\u00d4NG KH\u00d4NG B\u1ed0N S\u00c1U </S>
<S> KH\u00d4NG N\u0102M M\u1ed8T BA KH\u00d4NG M\u1ed8T B\u1ed0N HAI </S>
<S> CH\u00cdN KH\u00d4NG KH\u00d4NG M\u1ed8T </S> <S> HAI N\u0102M T\u00c1M CH\u00cdN </S>
<S> BA HAI </S>
………... Thu âm 800 câu đọc số và lưu các tập tin âm thanh .raw trong thư mục wav.
VT _train.fileids
Là tập tin chứa tất cả tên các tập tin âm thanh trong thư mục wav (không để đuôi .raw), thứ tự tên tập tin âm thanh trong VT_train.fileids tương ứng với thứ tự
câu được thu âm trong tập tin VT_train.transcription (số dòng trong
VT_train.fileids phải bằng số dòng trong VT_train.transcription). 001
002 003 ... 800 Chú ý kiểm tra:
Các tập tin .dic, .filler, .phones, and .transcription nội dung đều viết hoa.
Mỗi tập tin đều có một dòng trống ở cuối.
Phải có cùng số dòng trong tập tin .transcription và tập tin .fileids.
Chắc chắn rằng tập tin .phone không có dòng nào bị trùng lắp.
2.3.2 Các bước trong quá trình học tiếng Việt
Bước 1 Tạo ra thư mục VT nằm trong cùng một thư mục với SphinxTrain
Bước 2 Mở CMD đưa đường dẫn tới thư mục VT và thực hiện lệnh:
Bước 3 Tạo ra một cấu trúc cây có các tập tin và thư mục như sau VT wav etc VT.dic VT.filler VT.phone VT _train.fileids VT _train.transcription feat.params sphinx_train.cfg
Trong thư mục wav chứa tất cả các tập tin âm thanh mà chúng ta dùng để chạy
Tập tin feat.params và sphinx_train.cfg là của SphinxTrain có sẵn. Các tập tin VT.dic, VT.filler, VT.phone, VT _train.fileids, VT _train.transcription đã được
chuẩn bị trước.
Bước 4: Kiểm tra lại cấu hình
Mở file sphinx_train.cfg và lưu ý đến các thuộc tính $CFG_BASE_DIR, $CFG_SPHINXTRAIN_DIR nếu chúng ta đã di chuyển thư mục.
Ví dụ:
$CFG_BASE_DIR = "C:/VT";
$CFG_SPHINXTRAIN_DIR = "C:/VT";
Tìm thuộc tính $CFG_WAVFILE_EXTENSION và điền thông tin thích hợp
(raw hoặc wav).
Xét thuộc tính $CFG_WAVFILE_TYPE phù hợp.
Mặc định là: $CFG_WAVFILE_TYPE = 'raw';
Chọn loại mô hình huấn luyện:
$CFG_HMM_TYPE = '.cont.'; # Sphinx-3. Sphinx-4
#$CFG_HMM_TYPE = '.semi.'; # Sphinx-2, PocketSphinx
Bước 5: Tạo mô hình: Thực hiện lệnh sau:
Sau đó là lệnh:
Trong quá trình học SphinxTrain đã ghi lại tất cả các bước trong tập tin
CHƯƠNG 3: DEMO ĐỌC SỐ 3.1.Chương trình demo đọc số liên tục
Đây là demo về nhận dạng đọc số tiếng Việt Nam liên tục.
Để chạy demo đọc số: chạy file HelloNGram.java.
Chọn “Bắt Đầu” để bắt đầu đọc nhận dạng, “Đóng” để kết thúc demo.
Kết quả chạy demo đọc số liên tục như sau:
Hình 3.1: Màn hình ban đầu của demo đọc số
Hình 3.2:Màn hình sau khi nhận dạng một câu đọc số 3.2.Zip City
Đây là một demo minh họa về nhận dạng số. ZipCity sẽ nghe đọc mã bưu điện
Sau khi ZipCity chạy, bấm vào nút speak và đọc mã bưu điện Các chữ số được nhận dạng và hiển thị tỉnh, thành phố tương ứng.
CHƯƠNG 4: TẠO MODEL DÙNG CHO SPHINX-4 4.1 Tạo model dùng cho sphinx-4.
Model được tạo ra trong sphinx-4.
Bước 1: Tạo thư mục sphinx-4/models/VT
Bước 2: Trong thư mục VT tạo cấu trúc cây thư mục như sau:
cd_continuous_8gau/means cd_continuous_8gau/mixture_weights cd_continuous_8gau/variances cd_continuous_8gau/transition_matrices dict/ VT.dic dict/ VT.filler etc/VT_8gau_13dCep_16k_40mel_130Hz_6800Hz.4000.mdef etc/VT_8gau_13dCep_16k_40mel_130Hz_6800Hz.ci.mdef
Các file trong thư mục cd_continuous_8gau là các tập tin trong
VT/model_parameters/ VT.ci_cont / là kết quả của quá trình học.
Hai tập tin trong thư mục dict là hai tập tin VT.dic và VT.filler đã được chuẩn
bị khi học dữ liệu.
Thư mục etc sử dụng hai file trong VT/model_architecture/ là kết quả của quá
trình học.
Đổi tên các tập tin cho giống với cây thư mục ở trên.
Giải thích tên tập tin VT_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar:
VT: là tên của bộ dữ liệu được sử dụng để huấn luyện mô hình. 8gau: số gaussians
16k: tỷ lệ mẫu của dữ liệu huấn luyện.
40mel: số lượng các bộ lọc mel
130Hz: tần số tối thiểu.
6800Hz: tần số tối đa.
Trong thư mục sphinx-4/models/VT tạo tập tin model.props với nội dung:
description = any description of your model file
modelClass = edu.cmu.sphinx.model.acoustic.VT_8gau_13dCep_16k_40mel_130Hz_6800Hz.M odel modelLoader = edu.cmu.sphinx.model.acoustic.VT_8gau_13dCep_16k_40mel_130Hz_6800Hz.M odelLoader isBinary = true featureType = 1s_c_d_dd vectorLength = 39 sparseForm = false numberFftPoints = 512 numberFilters = 40 gaussians = 8 minimumFrequency = 130 maximumFrequency = 6800 sampleRate = 16000 dataLocation = cd_continuous_8gau modelDefinition = etc/VT.ci.mdef
Trong thư mục sphinx-4/models/VT/etc tạo tập tin variables.def có nội
dung:
set exptname = VT set vector_length = 13
set dictionary = $base_dir/lists/VT.dic set fillerdict = $base_dir/lists/VT.filler set statesperhmm = 3
set skipstate = no
set gaussiansperstate = 8 set feature = 1s_c_d_dd set n_tied_states = 4000 set agc = none
set cmn = current set varnorm = no
Bước 3: Chỉnh sửa tập tin build.xml trong sphinx-4:
Chú ý thêm các tag tương ứng ở các vị trí thích hợp trong tập tin xml, có thể
sửa name và value của thẻ có sẵn nếu không muốn build cái có trước.
Thêm các thuộc tính:
<property name="test_name" value = "VT_8gau_13dCep_16k_40mel_130Hz_6800Hz"/>
<property name="VT_data_dir" value="models/acoustic/VT"/>
Tìm thẻ target có tên create_all_model_classes thêm vào: <antcall target="create_my_model_classes">
</antcall>
Tìm thẻ target có tên delete_all_model_classes thêm vào: <antcall target="delete_my_model_classes">
<param name="my_model_name" value="${VT_name}"/> </antcall>
Tìm thẻ target có tên create_all_models thêm vào: <antcall target="create_my_model">
<param name="my_model_data_dir" value="${VT_data_dir}"/> <param name="my_model_name" value="${VT_name}"/> </antcall>
Bước 4: Rebuild
Trong cmd tới đường dẫn sphinx-4 rồi thực hiện lệnh:
ant
Chú ý: Máy phải cấu hình biến môi trường cho ant trước đó.
Bước 5: Để sử dụng trong sphinx-4 Sửa file cấu hình:
<component name="VT"
type="edu.cmu.sphinx.model.acoustic.VT_8gau_13dCep_16k_40mel_130Hz_680 0Hz.Model">
<property name="loader" value="sphinx3Loader"/> <property name="unitManager" value="unitManager"/> </component>
Type="edu.cmu.sphinx.model.acoustic.VT_8gau_13dCep_16k_40mel_130Hz_68 00Hz.ModelLoader">
<property name="logMath" value="logMath"/>
<property name="unitManager" value="unitManager"/> </component> <component name="dictionary" type="edu.cmu.sphinx.linguist.dictionary.FullDictionary"> <property name="dictionaryPath" value="resource:/edu.cmu.sphinx.model.acoustic.VT_8gau_13dCep_16k_40mel_1 30Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/VT_8gau_13dCep_16k_40 mel_130Hz_6800Hz/dict/VT.dic"/> ... </component> 4.2 Audio Tool.
Để phục vụ cho việc ghi âm dữ liệu nhóm chúng em đã xây dụng một bộ công
cụ hỗ trợ ghi âm và kiểm tra dữ liệu sau khi ghi âm là Audio Tool. Audio Tool
gồm hai phần là recorder.jar và player.jar
Recorder
Recorder.jar dùng để ghi âm dữ liệu thành tập tin âm thanh .raw có độ nén cao, dung lượng thấp.
Hình 4.1 Màn nhìn cấu hình ghi âm
Chạy file recorder.jar. Khi cửa sổ Audio Tool hiện lên chọn Edit -> Option, màn hình Config suất hiện. Vì tool hỗ trợ tự động save file nên cần phải đặt một số
thông số cấu hình sau:
Record Fotmat: là thông số cấu hình cho file âm thanh.
Output Dir: đường dẫn chỉ nơi sẽ lưu các file âm thanh. Train File: là đường dẫn tới file chứa các câu cần thu âm. Length Name: là độ dài tên file âm thanh.
Jum Line: dòng bắt đầu thu âm.
Init Name: là ký tự gắn trước tên file âm thanh (nếu cần).
Hình 4.2 Màn hình ghi âm
Sau khi cấu hình thì có thể bắt đầu ghi âm. Câu cần ghi âm được hiển thị trên màn hình. Bấm Record để ghi âm, Stop để kết thúc ghi âm. Sau khi bấm Stop thì