Kaldi ASR 2) Tutorial

윤혜원·2022년 10월 27일

음성인식기 Kaldi

목록 보기
2/4

Kaldi 설치는 아래 링크 참고▼
Kaldi ASR 1) 설치 방법

Kaldi는 크게 4가지 구조로 이루어져있다.
1. Kaldi 연산용 외부 라이브러리 (tools)
2. 음성인식 수행에 필요한 Kaldi C++라이브러리 (src)
3. Kaldi C++ 실행용 파일
4. recipe용 bash/python shell, 전처리용 perl 등

kaldi 샘플을 통해 동작 과정을 알아보자.

각 데이터셋마다 다운로드 받으려면 용량이 너무 크고 시간이 오래걸리기 때문에 kaldi가 가지고있는 샘플을 활용한다.

모든 샘플은 kaldi/egs 폴더에서 확인할 수 있으며, yesno 샘플의 처음 파일 구조는 다음과 같다.

├── conf
├── input
├── local
├── steps -> ../../wsj/s5/steps
└── utils -> ../../wsj/s5/utils

만약, yesno파일을 처음부터 돌리면서 변화하는 과정을 확인하고싶다면, yesno파일을 지우고, 해당 파일을 다운 받은 후, 아래의 명령어를 참고하여 steps와 utils를 wsj로 향하는 심볼링 링크를 만들어주면 된다. 만약 에러가 뜬다면, 권한을 확인해보자. (명령어 : chmod -R 777 yesno/)

ln -s ../../wsj/s5/steps steps
ln -s ../../wsj/s5/utils utils

 

yesno 샘플로 분석한 kaldi

run.sh을 살펴보면, 크게 다음과 같은 순서로 동작한다.

1. Data Preparation
2. Feature extraction
3. Mono training
4. Graph compilation
5. Decoding

세부적으로 알아보자.

1. Data Preparation

Data preparation은 음향 모델 학습에 필요한 데이터를 준비하고, 언어모델을 생성하는 단계이다. 각 쉘을 통과할 때마다 생성되는 파일을 아래에 정리하였다. 여기서, "데이터명"은 확장자를 제외한 파일명이고, "파일명"은 확장자를 포함한 이름으로 정의한다.

  1. prepare_data.sh
    ① waves_yesno = wav 데이터셋 다운로드
    ② wav.scp = [wav 데이터명][wav 파일 절대 경로]
    ③ text = [wav 파일명][발화 문장]
    ④ utt2spk = [wav 데이터명][화자 ID (지정하지 않으면, global)]
    ⑤ spk2utt = [화자 ID][wav 데이터명][wav 데이터명][wav 데이터명]
  2. prepare_dict.sh
    ① nonsilence_phones = [학습에 사용될 유음 종류의 음소]
    ② silence_phones = [학습에 사용될 묵음 종류의 음소]
    ③ opitional_silence = [학습에 사용될 묵음 종류의 음소]
    ④ lexicon = [단어][단어의 음소]
    ⑤ lexiconp = 한 단어가 발화될 수 있는 음소들의 확률값(0~1)
    [단어][확률값][단어의 음소]
  3. prepare_lang.sh
    ① L.fst = lexicon을 fst의 형태로 만든 결과물
    (monophone 시퀀스를 단어에 매핑)
    ② L_diasambig.fst = 동음이의어에 대한 표식
    ③ oov.txt / oov.int = out of vocabulary / 숫자로 표현
    ④ phones (폴더) = 학습에 사용할 음소 파일들
    (*.txt=음소 기호, *.int=기호를 숫자로 정의,*.csl=colon-separated list, 콜론을 이용하여 기호 숫자를 정의)
    ⑤ phones (txt) = 학습에 사용하는 모든 음소에 대한 정보
    ⑥ words = 각 단어와 그 단어를 연결해주는 숫자
    ⑦ topo = 이해 못했음
  4. prepare_lm.sh
    ① lm_tg.arpa = srilm 툴을 사용하여 학습한 언어모델
# Data Preparation 실행 코드
local/prepare_data.sh waves_yesno
local/prepare_dict.sh
utils/prepare_lang.sh --position-dependent-phones false data/local/dict "<SIL>" data/local/lang data/lang
local/prepare_lm.sh
(kaldi-venv) [hyyun@STT_node2 s5]$ ./run.sh 
# Data Preparation 실행 결과 코드
... (생략 : wav 데이터 다운로드 & 파일 정상 체크)
Preparing language models for test
arpa2fst --disambig-symbol=#0 --read-symbol-table=data/lang_test_tg/words.txt input/task.arpabo data/lang_test_tg/G.fst 
LOG (arpa2fst[5.5.1056~2-f6f4c]:Read():arpa-file-parser.cc:94) Reading \data\ section.
LOG (arpa2fst[5.5.1056~2-f6f4c]:Read():arpa-file-parser.cc:149) Reading \1-grams: section.
LOG (arpa2fst[5.5.1056~2-f6f4c]:RemoveRedundantStates():arpa-lm-compiler.cc:359) Reduced num-states from 1 to 1
fstisstochastic data/lang_test_tg/G.fst 
1.20397 1.20397
Succeeded in formatting data.
profile
음성인식 연구개발자 (Speech Recognition Researcher)

0개의 댓글