2019년 7월 13일 토요일

음성인식 메모(kaldi) 4 - gmm training

「原作者へ」

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

아래 포스트의 번역입니다.

http://work-in-progress.hatenablog.com/entry/2018/03/21/111613


kaldi의 모델 학습과정을 따라가보자.

모델을 업데이트하기 위해서는 'gmmbin/gmm-est' 커맨드를 사용한다.

Do Maximum Likelihood re-estimation of GMM-based acoustic model
Usage:  gmm-est [options] <model-in> <stats-in> <model-out>
e.g.: gmm-est 1.mdl 1.acc 2.mdl

학습 시의 input은 다음이 필요하다.

  • 업데이트 전의 모델
  • 통계량(statistics)

statistics의 생성에는 「gmmbin/gmm-acc-stats-ali」 커맨드를 사용한다.

Usage:  gmm-acc-stats-ali [options] <model-in> <feature-rspecifier> <alignments-rspecifier> <stats-out>
e.g.: gmm-acc-stats-ali 1.mdl scp:train.scp ark:1.ali 1.acc

input으로는 다음이 필요하다.

  • 초기모델
  • 특징량 파일
  • 균등 분할된 alignment

균등 분할된 alignment의 생성은 「bin/align‐equal‐compiled」 커맨드를 사용한다.

Write an equally spaced alignment (for getting training started)
Usage:  align-equal-compiled <graphs-rspecifier> <features-rspecifier> <alignments-wspecifier>
e.g.:  align-equal-compiled 1.fsts scp:train.scp ark:equal.ali

여기서 input으로 학습용 그래프(FST)가 필요하다.

그래프 생성 시에는 「bin/compile-train-graphs」 커맨드를 사용한다.

Creates training graphs (without transition-probabilities, by default)
Usage:   compile-train-graphs [options] <tree-in> <model-in> <lexicon-fst-in> <transcriptions-rspecifier> <graphs-wspecifier>
e.g.:  compile-train-graphs tree 1.mdl lex.fst 'ark:sym2int.pl -f 2- words.txt text|' ark:graphs.fsts

학습용 그래프 생성에 필요한 input

  • tree
  • 초기모델
  • 그래프(Lexicon FST)
  • text(int형식)

text(int형식)

utterance_id_001 2

(참고)text(symbol형식)

utterance_id_001 MOSIMOSI

모델 토폴로지(non-silence phone)

<TopologyEntry> 
<ForPhones> 
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
</ForPhones> 
<State> 0 <PdfClass> 0 <Transition> 0 0.75 <Transition> 1 0.25 </State> 
<State> 1 <PdfClass> 1 <Transition> 1 0.75 <Transition> 2 0.25 </State> 
<State> 2 <PdfClass> 2 <Transition> 2 0.75 <Transition> 3 0.25 </State> 
<State> 3 </State> 
</TopologyEntry> 

모델 토폴로지(silence phone)

<Forphones> 
1 2 3 4 5 6 7 8 9 10 
</ForPhones> 
<State> 0 <PdfClass> 0 <Transition> 0 0.25 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 </State> 
<State> 1 <PdfClass> 1 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 <Transition> 4 0.25 </State> 
<State> 2 <PdfClass> 2 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 <Transition> 4 0.25 </State> 
<State> 3 <PdfClass> 3 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 <Transition> 4 0.25 </State> 
<State> 4 <PdfClass> 4 <Transition> 4 0.75 <Transition> 5 0.25 </State> 
<State> 5 </State> 
</TopologyEntry> 

모델을 FST로 변환한 것

그림의 녹색 글자가 나타내는 것

"_"전 : phone(음소)

"_"후 : phone(음소)내부의 위치

_B begin   
_I internal
_E end

FST(Context to word)

이 2개를 합성한다.

    VectorFst<StdArc> *H;
    VectorFst<StdArc> &ctx2word_fst;
    VectorFst<StdArc> trans2word_fst;
    TableCompose(*H, ctx2word_fst, &trans2word_fst);

FST(합성 후)

파란색은 weight

이어서, determinize, miniminize, self-loop 추가를 진행하고, 학습용 FST를 생성한다.

댓글 없음:

댓글 쓰기