2019년 7월 14일 일요일

음성인식 메모(kaldi) 19 - Toolkit script(3)

「原作者へ」

連絡先を存じ上げませんでしたので、不本意ながら無断で翻訳しました。 
正式に翻訳を許可されたいです。 
gogyzzz@gmail.comでご連絡ください。

아래 포스트를 번역한 것입니다.

http://work-in-progress.hatenablog.com/entry/2018/07/08/084903


이전 포스트의 「Kaldi for Dummies tutorial」에서는 Triphone의 초기 학습까지 진행했다.

TRI1 - simple triphone training (first triphone pass).

그 후의 처리를 확인하고자 한다.

「egs/rm/s5/RESULTS」에는 각 실험(experiments)의 WER가 만들어져 있는데, 몇가지를 나열해보면 아래와 같다.

mono

Monophone, MFCC + delta + accel

tri1

MFCC + delta + accel

tri2a

MFCC + delta + accel (on top of better alignments)

tri2b

LDA + MLLT

tri3b

LDA + MLLT + SAT

tri3c

raw-fMLLR ( fMLLR on the raw MFCCs )

sgmm2_4[a-c]

SGMM2 is a new version of the code that has tying of the substates a bit like "state-clustered tied mixture" systems; and which has speaker-dependent mixture weights.

nnet4[a-e]

Deep neural net -- various types of hybrid system.

dnn4b

MFCC, LDA, fMLLR feaures, (Karel - 30.7.2015)

cnn4c

FBANK + pitch features, (Karel - 30.7.2015)

이 중 「nnet4d」(nnet2의 primary recipe)를 타겟으로, triphone 초기 모델(tri1)까지의 흐름을 역으로 돌아가보고자 한다.

(GPU를 사용하지 않는 환경에서 하고 있으므로, GPU를 사용하지 않는 조건에서 확인하였다)

공식사이트 설명에 따라, 「rm/s5/local/run_nnet2.sh」가 기점이 되는 스크립트라는 것을 확인.

The first place to look to get a top level overview of the neural net training is probably the scripts. In the standard example scripts in egs/rm/s5, egs/wsj/s5 and egs/swbd/s5b, the top-level script is run.sh. This script calls (sometimes commented out) a script called local/run_nnet2.sh. This is the top-level example script for Dan's setup.

rm/s5/local/run_nnet2.sh의 내용 중

# **THIS IS THE PRIMARY RECIPE (40-dim + fMLLR + p-norm neural net)**
local/nnet2/run_4d.sh --use-gpu false

egs/rm/s5/local/nnet2/run_4d.sh의 내용 중

steps/nnet2/train_pnorm_fast.sh
    data/train \
    data/lang \
    exp/tri3b_ali \
    exp/nnet4d

학습 output「exp/nnet4d」을 생성하기 위해선 input으로 alignment 데이터 「exp/tri3b_ali」가 필요하다.

egs/rm/s5/run.sh의 내용 중

# Align all data with LDA+MLLT+SAT system (tri3b)
steps/align_fmllr.sh \
    --use-graphs true \
    data/train \
    data/lang \
    exp/tri3b \
    exp/tri3b_ali

alignment의 output「exp/tri3b_ali」을 생성하기 위해서는, input으로 「exp/tri3b」이 필요하다.

egs/rm/s5/run.sh의 내용 중

## Do LDA+MLLT+SAT
steps/train_sat.sh \
 1800 \          # <#leaves>
 9000 \          # <#gauss>
 data/train \    # <data>
 data/lang \     # <lang>
 exp/tri2b_ali \ # <ali-dir>
 exp/tri3b       # <exp-dir>

학습의 output 「exp/tri3b」을 생성하기 위해서는, input으로 alignment 데이터 「exp/tri2b_ali」가 필요하다.

egs/rm/s5/run.sh의 내용 중

# Align all data with LDA+MLLT system (tri2b)
steps/align_si.sh \
 --use-graphs true \
 data/train \
 data/lang \
 exp/tri2b \
 exp/tri2b_ali

alignment 데이터 「exp/tri2b_ali」을 생성하기 위해서는, input으로 「exp/tri2b」가 필요하다.

egs/rm/s5/run.sh의 내용 중

# train and decode tri2b [LDA+MLLT]
steps/train_lda_mllt.sh \
 1800 \         # <#leaves>
 9000 \         # <#gauss>
 data/train \   # <data>
 data/lang \    # <lang>
 exp/tri1_ali \ # <ali-dir>
 exp/tri2b      # <exp-dir>

학습 데이터 「exp/tri2b」을 생성하기 위해서는, input으로 alignment 데이터 「exp/tri1_ali」가 필요하다.

egs/rm/s5/run.sh의 내용 중

# align tri1
steps/align_si.sh \
 --use-graphs true \
 data/train \
 data/lang \
 exp/tri1 \
 exp/tri1_ali

alignment 데이터 「exp/tri1_ali」를 생성하기 위해서는, input으로 학습 데이터 「exp/tri1」가 필요하다.

「exp/tri1」로부터 [exp/nnet4d]까지의 흐름을 정리하면 아래와 같다.

1. Triphone 모델(MFCC + delta + accel)을 사용한 alignment

output은 「exp/tri1_ali」

2. Triphone 모델(LDA + MLLT)의 생성과 학습

output은 「exp/tri2b」

3. Triphone 모델(LDA + MLLT)을 사용한 alignment

output은 「exp/tri2b_ali」

4. Triphone 모델(LDA + MLLT + SAT)의 생성과 학습

output은 「exp/tri3b」

5. Triphone 모델(LDA + MLLT + SAT)을 사용한 alignment

output은 「exp/tri3b_ali」

6. Neural Network 모델의 생성과 학습

output은 「exp/tri4d」

댓글 없음:

댓글 쓰기