Cài đặt thuật toán biến đổi Fourier nhanh

Một phần của tài liệu nhận dạng tiếng nói việt nam từ vựng lớn (Trang 33 - 67)

L ỜI CẢM ƠN Error! Bookmark not defined.

1.5.5Cà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ì

Một phần của tài liệu nhận dạng tiếng nói việt nam từ vựng lớn (Trang 33 - 67)