Huấn luyện mô hình âm học

Một phần của tài liệu xây dựng hệ thống nhận dạng tiếng việt nói trên nền bộ công cụ kaldi tích hợp mạng nơ ron sâu (Trang 78)

1. Tổng quan về mạng Nơ ron sâụ

3.4. Huấn luyện mô hình âm học

3.4.1. Kịch bản mô hình âm học

Các bản ghi và phiên âm của chúng từ tập dữ liệu huấn luyện được sử dụng cho mô hình âm học. Các mô hình âm học được đánh giá trên tập kiểm thử. Việc giải mã tiếng nói trong tập kiểm thử luôn được thực hiện với các tham số tương tự nhau,

69

do đó các mô hình âm học khác nhau có thể so sánh với nhaụ Bảng 3.7 liệt kê các mô hình âm học được huấn luyện trong kịch bản. Một AM cao cấp thường được khởi tạo bởi các liên kết âm thanh (tương ứng với các liên kết tham số âm học) sử dụng một AM đơn giản hơn.

Các phương pháp được sử dụng được liệt kê trong hình 3.8 với hệ thống phân cấp của chúng. Các hệ phân cấp cho thấy một phương pháp cao cấp điển hình là tái sử dụng giá trị huấn luyện ban đầu từ các AM đơn giản.

Đầu tiên, một mô hình mono-phone được huấn luyện sử dụng bộ tham số MFCC (Mel Frequency Cepstral Coefficient) cùng với các tham số ∆ và ∆∆. Các vec tơ tham số được liên kết với các trạng thái HMM sử dụng các phiên âm của tiếng nóị Sau đó, chúng huấn luyện lại mô hình triphone (tri1a). Một phần của quá trình kết thúc bởi huấn luyện mô hình MFCC+∆ + ∆∆ triphone (tri2a). Một phần khác, phần thứ hai của quá trình thay vì chuyển hóa ∆ + ∆∆, sử dụng LDA+MLTT để huấn luyện mô hình âm học (tri2b). Sử dụng mô hình thứ ba tri2b được huấn luyện Discriminative (hay còn gọi là mô hình có điều kiện), sử dụng LDA+MLTT+SAT để huấn luyện mô hình tri3b và sử dụng công thức DNN Hybrid để thực hiện huấn luyện mạng nơ ron sâu (tri4_DNN) sử dụng các phương pháp:

- MMI (Maximum Mutual Information). [6]

- BMMI (Boosted Maximum Mutual Information). [7] - MPE (Minimum Phone Error). [8]

- SAT (Speaker Adaptive Training). [22] - DNN Hybrid (Dan’s recipe). [14]

mono tri1 tri2a tri2b tri2b_mmi tri2b_mmi_b0.05 tri2b_mpe tri3 sgmm sgmm_mmi_b0.1 tri4_DNN 2 3 4 5 6 7 8 9 10 1

70

Hình 3.8: Hệ thống phân cấp các mô hình âm học được huấn luyện

Bảng 3.7: Các phương thức huấn luyện của hệ thống

Phương thức huấn luyện Mô tả

Monophone Mono

Triphone Tri1

∆ + ∆∆ Tri2a

LDA + MLLT Tri2b

LDA + MLLT + MMI Tri2b_mmi

LDA + MLLT + bMMI Tri2b_mmi_b0.05

MPE Tri2b_mpe

LDA + MLLT + SAT Tri3

SGMM Sgmm

SGMM+bMMI Sgmm_mmi_b0.1

DNN Hybrid (Dan’s recipe) Tri4_DNN

3.4.2. Chuẩn bị thư mục

- Tạo thư mục để huấn luyện dữ liệu và mô hình $cd Kaldi-trunk/egs

$mkdir VS/s5

- Mục đích của bước này là tạo cấu trúc thư mục làm việc. Cấu trúc này được xây dựng bắt đầu từ S5.

- Copy kịch bản path.sh và các tập tin steps, utils, src từ thư mục WSJ sang thư mục VS/S5 (xem hình 3.8).

- Chỉnh sửa tập tin path.sh để đường dẫn tới thư mục KALDI-ROOT đúng (export KALDI_ROOT=../../..)

- Tạo thư mục /data và hai thư mục con là /train/test nhằm lưu các tập tin âm thanh tách riêng thành 2 phần để thực hiện huấn luyện và kiểm thử.

Câu lệnh thực hiện: $cd VS/s5

71 $cd data

$mkdir train $mkdir test

- Dữ liệu thu âm và văn bản chuẩn bị được đặt trong một thư mục chung /home/thanh/Resource, thực hiện tách thành 2 phần train và test.

+ Tập train lấy các tập tin âm thanh có định danh người nói từ 01 đến 27 + Tập test lấy các tập tin âm thanh có định danh người nói từ 28 đến 35 - Lệnh thực hiện lấy các tập tin âm thanh và văn bản từ /home/thanh/Resource tách thành tập train và test riêng biệt được đặt trong thư mục VS/s5/data:

local/data_split.sh --every_n $EVERY_N $DATA_ROOT

- Cùng với việc chia dữ liệu âm thanh thành 2 tập, dòng lệnh trên tạo thư mục làm việc lang_prep chứa các thư mục con: local, train, test_build0 và test_build2.

- Trong đó thư mục /local gồm 2 thư mục con local/trainlocal/test, hai thư mục này là giống nhau về thông tin dữ liệu, chỉ khác nhau ở chỗ một dành cho thông tin người nói trong tập huấn luyện, một dành cho thông tin người nói trong tập kiểm thử. Chúng đều chứa các tập tin: spk2utt, trans.txt, utt2spk, wav.scp

1. spk2utt: spk2utt là một tập tin chứa ánh xạ từ người nói tới lời nói tương

ứng.

Ví dụ: 01 01-ds0000

2. spk2utt: chứa các ánh xạ của mỗi một lời nói tương ứng với người nóị Tập tin utt2spk có dạng: utt_id spk

utt_id = utterance ID spk = speaker ID Ví dụ:

01-ds0001 01 (ID của người nói là 01, ID của lời nói là 01-ds0001) 02-kd0001 02

03-ox0002 03

3. trans.txt: chứa nội dung lời nói ghi âm Ví dụ:

72

01-ds0000 SỞ HỮU CỦA CẢI KHỔNG LỒ BẢO NGHĨ MÌNH SẼ BÙ ĐẮP ĐƯỢC NHỮNG THIỆT THÒI CHO VŨ VÀ MANG ĐẾN CHO HẢI NHỮNG NGÀY HẠNH PHÚC MĨ MÃN

4. wav.scp: định dạng của tập tin này là: <ID file âm thanh> <đường dẫn đến file âm thanh tương ứng>

01-ds0000 /home/thanh/kaldi-trunk/egs/VS/s5/data/train/01-ds0000.wav 01-ds0001 /home/thanh/kaldi-trunk/egs/VS/s5/data/train/01-ds0001.wav - Thư mục /test_build0/test_build2 trong đó

+ /test_build0 chứa mô hình ngôn ngữ bigram cho tập huấn luyện, được ước lượng sử dụng bộ công cụ SRILM được cài đặt cùng bộ công cụ Kaldị

+ /test_build2 chứa mô hình ngôn ngữ zerogram cho tập kiểm thử, được ước lượng sử dụng bộ công cụ SRILM.

3.4.3. Tạo mô hình ngôn ngữ

Sử dụng dòng lệnh sau để tạo mô hình ngôn ngữ, với đầu vào …, đầu ra là mô hình dữ liệu được lưu trong thư mục /lang_prep/local/lm

$ local/create_LMs.sh $WORK/local $WORK/local/train/trans.txt \ $WORK/local/test/trans.txt $WORK/local/lm "$LMs"

3.4.4.Tạo các tập tin cho lang_prep/local/dict và lang_prep/local/lang

(Thư mục 5.1.2 và 5.1.3 trong cây thư mục hình 3.6)

Các tập tin trong thư mục lang_prep/local/dict chứa các thông tin chi tiết về các tập tin âm thanh, các bản ghi âm lời nói và thông tin về người nóị Các tập tin trong thư mục lang_prep/local/dict được tạo ra bởi dòng lệnh:

$ local/prepare_cs_transcription.sh $WORK/local $WORK/local/dict || exit 1 $ local/create_phone_lists.sh $WORK/local/dict || exit 1

1. Thư mục lang_prep/local/dict chứa các tập tin sau: text.txt

wav.scp utt2spk spk2utt

73

a) Text

Tập tin này chứa các cách phát âm theo lời nói của văn bản. Tập tin này có định dạng: utterance_id WORD1 WORD2 WORD3 WORD4 ...

Ví dụ: 01-ds0007 Ở NGƯỜI BỊ HỘI CHỨNG ĂN KHI NGỦ PHẦN NÃO PHẢI VẪN THỨC VÀ SAU ĐÓ LÀ CẢ CÁC DẠNG HOẠT ĐỘNG THỂ CHẤT

Khi tạo ra tập tin text này, bộ từ vựng (lexicon) cũng cần đảm bảo chỉ chứa các từ có trong dữ liệu, không có các âm vị không liên quan mà đang huấn luyện.

b) Wav.scp

- Wav.scp chứa thông tin vị trí (đường dẫn) đến các tập tin âm thanh định dạng wav. Tập tin wav.scp có dạng: file_id /path/filẹ

Ví dụ:

01-ds0000 /home/thanh/kaldi-trunk/egs/VS/s5/data/train/01-ds0000.wav 01-ds0001 /home/thanh/kaldi-trunk/egs/VS/s5/data/train/01-ds0001.wav 01-ds0002 /home/thanh/kaldi-trunk/egs/VS/s5/data/train/01-ds0002.wav

c) utt2spk

- utt2spk chứa các ánh xạ của mỗi một lời nói tương ứng với người nóị Tập tin utt2spk có dạng: utt_id spk utt_id = utterance ID spk = speaker ID Ví dụ: 01-ds0000 01 02-kd0001 02 03-ox0002 03 d) spk2utt

spk2utt là một tập tin chứa ánh xạ từ người nói tới lời nói tương ứng. Ví dụ: 01 01-ds0000

74

Thư mục /lang_prep/local/lang là thư mục chứa dữ liệu ngôn ngữ cụ thể ví dụ như tập từ vựng (lexicon) chỉ chứa các từ và cách phát âm của chúng có mặt trong dữ liệu ta thực hiện. Thư mục này chứa:

- Lexicon.txt - nonsilence_phones.txt - optional_silencẹtxt - silence_phones.txt - extra_questions.txt (optional) a) Lexicon.txt

- Lexicon.txt chứa bộ từ vựng của ngôn ngữ đang thực hiện. được tạo thành từ đầu vào là tập tin cs_transcriptions.txt

- lexicon.txt có định dạng: <word> <phone1> <phone2> ... Các từ vựng được liệt kê mỗi từ một dòng riêng.

Ví dụ: AI a i AN a n ANH a n h BA b a BAN b a n BAO b a o BAY b a y

(Nếu muốn sử dụng xác suất phát âm, thay vì tạo ra tập tin lexicon.txt, thì tạo tập tin lexiconp.txt mà có chữa xác suất ở trường thứ hai).

b) nonsilence_phones.txt

Tập tin này chứa một danh sách của tất cả các âm vị không chứa khoảng lặng. Tập tin được tạo bằng cách chỉnh sửa tập tin phones.txt, các âm vị giống nhau được để trên cùng một dòng.

75

lence_phones.txt chứa mô hình ‘SIL’ (silence) và ‘oov’ (out of vocabulary) optional_silencẹtxt sẽ chỉ chứa mô hình ‘SIL’. Tập tin này được tạo ra với lệnh sau:

echo –e 'SIL'\\n'oov' > silence_phones.txt

d) optional_silencẹtxt

optional_silencẹtxt đơn giản chỉ chứa mô hình ‘SIL’. Sử dụng dòng lệnh sau để tạo tập tin.

echo 'SIL' > optional_silencẹtxt

e) extra_questions.txt (optional)

Kịch bản Kaldi sẽ tạo một tập tin cơ sở extra_questions.txt cho ta, nhưng trong lang_prep/lang/phones. Tập tin này “asks questions” về thông tin theo ngữ cảnh của âm vị bằng cách chia âm vị thành 2 phần khác nhaụ Một thuật toán sẽ xác định liệu nó có hữu ích cho mô hình trong một bối cảnh cụ thể. Các extra_questions.txt chuẩn sẽ chứa các “questions” phổ biến nhất, ví dụ: liệu âm vị là từ khởi tạo hay từ kết thúc. Nếu ta có câu hỏi mà không thuộc tập tin extra_questions.txt chuẩn, chúng cần phải được thêm vào tập tin nàỵ

3.4.5. Tạo các tập tin cho lang_prep/lang

(Thư mục 5.2 trong cây thư mục hình 3.5)

Để tạo các tập tin trong thư mục lang_prep/lang, chúng ta cần sử dụng các tập tin trong thư mục lang_prep/local/dict vừa tạo ở bước trước.

Dòng lệnh thực hiện tạo các tập tin:

$ utils/prepare_lang.sh $WORK/local/dict '_SIL_' $WORK/local/lang $WORK/lang || exit 1

Các tập tin mới trong thư mục /lang_prep/langL.fst, L_disambig.fst, oov.int, oov.txt, phones.txt, topo, words.txt, và phones. phones là một thư mục chứa rất nhiều tập tin lưu thông tin về âm vị.

3.4.6. Thiết lập huấn luyện song song

Huấn luyện có thể được tính toán rất tốn kém; tuy nhiên, nếu ta có nhiều bộ xử lý hoặc nhiều máy tính thì sẽ có nhiều cách để cải thiện tốc độ đáng kể. Cả huấn luyện và sắp xếp có thể thực hiện hiệu quả hơn bằng cách phân chia sữ liệu thành

76

nhiều phần nhỏ và xử lý song song. Số công việc xử lý song song sẽ được thiết lập trong các bước huấn luyện và sắp xếp. Kaldi cung cấp một gói để thực thi song song để từng bước tính toán có thể tận dụng được lợi thế của nhiều bộ xử lý. Các gói kịch bản của Kaldi là run.pl, queuẹpl, …Các kịch bản và các tham số được áp dụng sẽ được quy định trong một tập tin là cmd.sh nằm ở cấp cao nhất của thư mục huấn luyện (VS/s5/cmd.sh).

- run.pl cho phép ta chạy các tác vụ trên máy cục bộ (ví dụ máy tính cá nhân). - queuẹpl cho phép ta phân bổ công việc trên nhiều máy tính sử dụng Sun Grid

Enginẹ

- slurm.pl cho phép ta phân bổ công việc trên nhiều máy tính sử dụng nhiều phần mềm công cụ lưới được gọi là SLURM.

Việc thực hiện song song có thể được quy định riêng cho huấn luyện và giải mã trong tập tin cmd.sh. Trong đề tài đang thực hiện trên máy tính cá nhân nên có thể thiếp lập train_cmd và decode_cmd trong “run.sh”.

3.4.7. Tạo tập tin mfcc.conf trong thư mục common

Tập tin mfcc.conf chứa các tham số cho trích chọn tham sô MFCC. Tập tin này chứa các thông tin sau:

--use-energy=false

--sample-frequency=16000

Tần số lấy mẫu được lấy bằng tần số dữ liệu ghi âm. Tập tin này có thể được tạo bằng cách thông thường mà không cần shell.

cd VS/s5/common vi mfcc.conf

# Nhấn i để thêm; esc để thoát chế độ chèn; ‘:wq’ để lưu thoát; ‘:q’ để thoát; ‘:q!’ để thoát mà không lưụ

# Chèn dòng văn bản sau vào mfcc.conf --use-energy=false

77

3.4.8. Trích chọn tham số MFCC

Mã lệnh sau đây sẽ thực hiện trích chọn tham số MFCC và tính giá trị trung bình phương sai bình phương (CMVN - Cepstral Mean Variance Normalization).

Tùy chọn --nj thiết lập số công việc được thực hiện song song, trong đề tài con số này là 4, nghĩa là dữ liệu được chia làm 4 phần.

cd VS/s5

$ steps/make_mfcc.sh --cmd "$train_cmd" --nj 4 $x exp/make_mfcc/$x $mfccdir $ steps/compute_cmvn_stats.sh $x exp/make_mfcc/$x $mfccdir

-> Dòng lệnh trên tạo tập tin feats.scp, mỗi tập tin th có định dạng: <ID lời nói> <Tên tên tin mở rộng của các tham số>

Ví dụ:

01-ds0000 /home/Thanh/kaldi/ trunk/ egs/ VS /s5 /lang_prep /mfcc raw_mfcc_train .1.ark:10

01-ds0001 /home/Thanh/kaldi-trunk /egs /VS /s5 /lang_prep /mfcc /raw_mfcc_train .1.ark:9817

3.4.9. Sắp xếp và huấn luyện Monophone

Tạo tập con dữ liệu cho huấn luyện monophone

Huấn luyện monophone là thành phần đầu tiền của quá trình huấn luyện, mô hình này chủ yếu sử dụng để làm mô hình khởi đầu cho huấn luyện các mô hình saụ

Chia dữ liệu thành hai phần, một phần để huấn luyện và một phần để test, sử dụng dòng lệnh sau:

cd VS/s5

local/data_split.sh --every_n $EVERY_N $DATA_ROOT $WORK/local "$LMs" "$TEST_SETS

Huấn luyện monophone

Mỗi kịch bản huấn luyện đưa ra một cấu trúc các đối số cơ bản tương tự với đối số tùy chọn trước. Một ngoại lệ là huấn luyện monophone đầu tiên, từ một mô hình chưa từng tồn tại, không có thư mục nguồn đặc biệt cho mô hình. Các đối só cần thiết là:

78 - Vị trí của dữ liệu âm thanh: data/train - Vị trí của bộ từ vựng: lang_prep/lang

- Thư mục nguồn cho mô hình: exp/x (x là mô hình huấn luyện cuối cùng) - Thư mục đích cho mô hình: exp/y (y là mô hình huấn luyện hiện tại đang thực

hiện)

Đối số --cmd “$train_cmd” được chỉ định để thực hiện xử lý huấn luyện, được thiết lập trong cmd.sh như đã nói đến ở phần trên. Đối số --nj nên bằng với số công việc đã được thiết lập chuẩn từ trước.

steps/train_monọsh --nj $njobs --cmd "$train_cmd" $WORK/train $WORK/lang $EXP/mono

Sắp xếp monophone

Thực hiện sắp xếp các tập tin âm thanh với các văn bản. Cũng giống như các kịch bản huấn luyện, các kịch bản sắp xếp cũng tuân theo cấu trúc đối số tương tự. Các đối số yêu cầu là:

- Vị trí dữ liệu ấm thanh: data/train - Vị trí của bộ từ vựng: lang_prep/lang

- Thư mục cho mô hình: exp/y (y là thư mục mô hình đang thực hiện) - Thư mục đích cho sự sắp xếp: exp/y_ali

steps/align_sịsh --nj $njobs --cmd "$train_cmd" \

$WORK/train $WORK/lang $EXP/mono $EXP/mono_ali || exit 1; Cấu trúc thư mục như sau:

VS lang_prep exp local lang train lang s5 train dict mono Mono_ali

79

3.4.10. Sắp xếp và huấn luyện Triphone (Tri1)

Huấn luyện triphone dựa trên dealtạ

Huấn luyện các mô hình triphone bao gồm các đối số bổ sung số lượng lá hoặc số trạng thái HMM cho cây quyết định và số Gauss. Trong lệnh này, đối số $pdf và $gauss tương ứng là 1200 và 19200 được thiết lập trong tập tin env_voip_cs.sh, nghĩa là có 1200 trạng thái HMM và 19200 Gaussians. Con số chính xác của lá và Gausian trong cây quyết định được quyết định dựa trên Heuristics. Các con số phần lớn sẽ phụ thuộc vào số lượng dữ liệu, số lượng câu hỏi ngữ âm và mục tiêu của mô hình.

Dòng lệnh thực hiện huấn luyện triphone như sau: $ steps/train_deltas.sh --cmd "$train_cmd" \

$pdf $gauss $WORK/train $WORK/lang $EXP/mono_ali $EXP/tri1 || exit 1; Trong đó, Đối số --cmd “$train_cmd” và --nj là được thiết lập từ trước như phần trên đã đưa rạ Tham số pdf và gauss được thiết lập trong tập tin env_voip_cs.sh, trong đó:

- pdf=1200 là số các trạng thái âm vị huấn luyện. Lệnh thiết lập: export pdf=1200

- gauss là số Gauss lớn nhất sử dụng cho huấn luyện. Lệnh thiết lập: export gauss=19200

Sắp xếp triphone dựa trên Delta

Câu lệnh thực hiện:

$ steps/align_sịsh --nj $njobs --cmd "$train_cmd" \

--use-graphs true $WORK/train $WORK/lang $EXP/tri1 $EXP/tri1_ali || exit 1;

Huấn luyện triphone delta + delta-delta (tri2a)

Một phần của tài liệu xây dựng hệ thống nhận dạng tiếng việt nói trên nền bộ công cụ kaldi tích hợp mạng nơ ron sâu (Trang 78)

Tải bản đầy đủ (PDF)

(103 trang)