「原作者へ」
連絡先を存じ上げませんでしたので、不本意ながら無断で翻訳しました。
正式に翻訳を許可されたいです。
gogyzzz@gmail.comでご連絡ください。
아래 포스트의 번역입니다.
http://work-in-progress.hatenablog.com/entry/2018/06/24/111611
Kaldi는, Bash 스크립트로 실행하는 커맨드를 사용하고 있다.
이번엔 스크립트에 대해 확인해보고자 한다.
GitHub에서 다운로드한 디렉토리 구성은 아래와 같다.
- egs (알아보고자 하는 것)
- src (소스코드)
- misc (논문 등? 미확인)
- tools (외부 툴、OpenFST、ATLAS 등)
- windows (WindowsOS 용)
세부 내용은 kaldi공식사이트 설명을 참고("Kaldi directories structure" 부분)
「egs」에 각 코퍼스에 대응하는 예제 스크립트가 수록되어 있다.
egs – example scripts allowing you to quickly build ASR systems for over 30 popular speech corporas (documentation is attached for each project),
스스로 음성 데이터를 준비한 경우에는 어떻게 할 것인가.
Kaldi공식 튜토리얼을 보면, 「egs/wsj/s5」 내의 스크립트를 이용하면 된다는 설명이 있다.
Project finalization -> Tools attachment의 내용 중
From kaldi-trunk/egs/wsj/s5 copy two folders (with the whole content) - utils and steps - and put them in your kaldi-trunk/egs/digits directory.
You can also create links to these directories.
「wsj」는 Wall Street Journal news text 코퍼스 인것 같다.
egs/wsj/README.txt 내용 중
About the Wall Street Journal corpus:
This is a corpus of read sentences from the Wall Street Journal, recorded under clean conditions.
The vocabulary is quite large. About 80 hours of training data.
Available from the LDC as either: [ catalog numbers LDC93S6A (WSJ0) and LDC94S13A (WSJ1) ]
or: [ catalog numbers LDC93S6B (WSJ0) and LDC94S13B (WSJ1) ]
....
다른 코퍼스의 디렉토리 (예를 들어 「egs/rm/steps」)을 보아도, 「egs/wsj/steps」에 심볼릭 링크되어 있다.
/opt/kaldi/egs/rm/s5% ls -l steps
lrwxrwxrwx 1 ichou1 ichou1 18 2월 5 19:46 steps -> ../../wsj/s5/steps
/opt/kaldi/egs/rm/s5% file steps
steps: symbolic link to `../../wsj/s5/steps'
/opt/kaldi/egs/rm/s5%
코퍼스는 없지만, kaldi를 사용해보고자 하는 경우에 대해 「egs/yesno」가 준비되어 있다.
이것은 음성 데이터(.wav)도 수록되어 있기 때문에, 바로 사용해볼 수 있다.
("YES"와"NO" 둘 중 하나를 8회, 패턴을 바꿔가며 발화. 학습용으로 31파일, 테스트용으로 29파일)
egs/yesno/README 내용 중
The "yesno" corpus is a very small dataset of recordings of one individual saying yes or no multiple times per recording, in Hebrew.
egs/yesno/s5/waves_yesno/README 내용 중
The archive "waves_yesno.tar.gz" contains 60 .wav files, sampled at 8 kHz.
All were recorded by the same male speaker, in English (although the individual is not a native speaker).
In each file, the individual says 8 words;
each word is either "yes" or "no", so each file is a random sequence of 8 yes-es or noes.
There is no separate transcription provided;
the sequence is encoded in the filename, with 1 for yes and 0 for no, for instance:
실행 방법
```bash cd egs/yesno/s5 ./run.sh
### 내부에서 하고 있는 것들
- Data preparation
--> 「local/prepare_dict.sh」、「local/prepare_dict.sh」、「utils/prepare_lang.sh」、「local/prepare_lm.sh」을 실행
- Feature extraction
--> 「steps/make_mfcc.sh」、「steps/compute_cmvn_stats.sh」、「utils/fix_data_dir.sh」을 실행
(「steps」、「utils」는、 「egs/wsj/s5/steps」、「egs/wsj/s5/utils」에 링크되어 있음)
- Mono training
--> 「steps/train_mono.sh」을 실행
- Graph compilation(그래프 생성)
--> 「utils/mkgraph.sh」를 실행
- Decoding(인식)
--> 「steps/decode.sh」를 실행
실행하는 console 상에는 WER(단어 오류율)이 표시된다.
decode의 결과는, (egs/yesno/s5/exp/mono0a/decode_test_yesno/log/decode.1.log)에서 확인 가능하다.
### 예시)「egs/yesno/s5/waves_yesno/1_0_0_0_0_0_0_0.wav」의 인식결과
plaintext 1000000_0 YES NO NO NO NO NO NO NO
상위 디렉토리가 「/opt/kaldi」로, decode를 직접 실행하는 경우의 커맨드(결과는 표준출력에 텍스트 형식으로 출력)
### decode(lattice없이 수행)
bash /opt/kaldi/src/gmmbin/gmm-decode-faster \ --word-symbol-table=/opt/kaldi/egs/yesno/s5/exp/mono0a/graphtgpr/words.txt \ /opt/kaldi/egs/yesno/s5/exp/mono0a/40.mdl \ /opt/kaldi/egs/yesno/s5/exp/mono0a/graphtgpr/HCLG.fst \ "ark,s,cs:/opt/kaldi/src/featbin/apply-cmvn --utt2spk=ark:/opt/kaldi/egs/yesno/s5/data/testyesno/split1/1/utt2spk scp:/opt/kaldi/egs/yesno/s5/data/testyesno/split1/1/cmvn.scp scp:/opt/kaldi/egs/yesno/s5/data/test_yesno/split1/1/feats.scp ark:- | /opt/kaldi/src/featbin/add-deltas ark:- ark:- |" \ ark,t:-
전달하는 파라미터에 대해서는 이전 포스팅을 참고
### 결과(lattice없이 수행)
plaintext 10000000 3 2 2 2 2 2 2 2 10000000 YES NO NO NO NO NO NO NO LOG (gmm-decode-faster[5.3.106~1389-9e2d8]:main():gmm-decode-faster.cc:196) Log-like per frame for utterance 1000000_0 is -8.37946 over 668 frames.
「3」은 words.txt에서 "YES"、「2」는 "NO"에 대응
### decode(lattice를 사용하여 수행)
bash /opt/kaldi/src/gmmbin/gmm-latgen-faster \ --word-symbol-table=/opt/kaldi/egs/yesno/s5/exp/mono0a/graphtgpr/words.txt \ /opt/kaldi/egs/yesno/s5/exp/mono0a/final.mdl \ /opt/kaldi/egs/yesno/s5/exp/mono0a/graphtgpr/HCLG.fst \ "ark,s,cs:/opt/kaldi/src/featbin/apply-cmvn --utt2spk=ark:/opt/kaldi/egs/yesno/s5/data/testyesno/split1/1/utt2spk scp:/opt/kaldi/egs/yesno/s5/data/testyesno/split1/1/cmvn.scp scp:/opt/kaldi/egs/yesno/s5/data/test_yesno/split1/1/feats.scp ark:- | /opt/kaldi/src/featbin/add-deltas ark:- ark:- |" \ ark,t:-
### 결과(lattice를 사용하여 수행)
plaintext
10000000 YES NO NO NO NO NO NO NO
10000000
0 1 3 9.34174, 10746.4, 4111111618
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance 1000000_0 is -8.37946 over 668 frames.
### 모델(egs/yesno/s5/exp/mono0a/final.mdl)을 텍스트 형식으로 나타낸 것
plaintext
「YES」(/jes/)를 「j-e+s」 와 같이 자르지 않고, 한 덩어리로 취급하고 있다. (예제이기 때문에 단순하게 한 것)
### phone transcriptions(egs/yesno/s5/data/local/dict/lexicon.txt)
plaintext
댓글 없음:
댓글 쓰기