이전에 준비한 오디오와 텍스트 파일을 이용해서 각 개별 음소에 대한 확률값을 학습하는 과정이다. monophone 학습 과정은 다음과 같고, 이와 관련된 파일들이 exp/mono0a(폴더)와 data/$x/split1 에 저장된다.
1. 오디오와 텍스트 정보를 가지고 음소 세트로 변환
2. 소리와 음소를 동일한 간격으로 잘라서 그 구간이 이 음소가 발생한 구간일 것이라고 정의
3. 다양한 소리를 학습함으로써 그 간격을 학습하면서 음소에 적합한 구간만 지정하도록 변화
- train_mono.sh
① exp/mono0a (폴더) = final.mdl 이라는 모델 생성
② exp/mono0a/ali.1.gz = 학습한 음향 모델을 통해 학습 데이터의 음소 구간을 의미있게 잘라주는 작업을 align(정렬)이라고 하고, 모든 학습 데이터에 대한 align 정보를 담고 있는 파일
# Mono training 실행 코드
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
--totgauss 400 \
data/train_yesno data/lang exp/mono0a
Kaldi는 음성인식에 사용할 최종 모델은 fst형태로 변환하여 사용하므로 지금까지 생성한 모델들을 최종적으로 결합해주는 과정을 거쳐야한다.
이러한 과정은 mkgraph.sh를 통해 진행된다.
총 4가지 모델이 필요하며 이 모델들을 다 결합하면, HCLG.fst가 완성된다. HCLG 심볼의 의미는 다음과 같다. (참고 : https://kaldi-asr.org/doc/graph.html)
H = HMM 정의
C = Context-dependent, 컨텍스트 종속성
L = Lexicon, 사전
G = Grammar, 문법
HCLG를 자세히 살펴보면,
# Graph compilation 실행 코드
utils/mkgraph.sh data/lang_test_tg exp/mono0a exp/mono0a/graph_tgpr