decode.sh 및 lm rescore 등 여러 질문 드립니다..!

202 views
Skip to first unread message

AronGs

unread,
Sep 20, 2021, 12:24:06 AM9/20/21
to zeroth-help
항상 감사드립니다. 
현재 zeroth 데이터 포멧에 맞추어서 데이터셋을 추가하고 dnn 학습까지 진행하여 모델 사용까지 완료해보았습니다.

다만 추출된 모델을 사용하다보니 여러 의문점이 들어서 질문 남깁니다!
1.  decode.sh 에서 #### Decoding #### 부분에
--do-endpointing, --frames-per-chunk, --extra-left-context-initial, --online, --config, 
--verbose, --min-active, --max-active, --beam, --lattice-beam, --acoustic-scale, 
--word-symbol-table 과 같이 여러 옵션들을 주고 있는데, 해당 옵션들이 각각 어떤 의미인지 궁금합니다..! 
그리고 decode.sh를 실행 시에 stt 결과값만 받아보고 싶은데, 표준출력, 표준에러 리다이렉션을 해도 계속 log가 같이 저장이 됩니다. 혹시 stt 결과값만 보여주는 옵션이 존재할까요?

2. "백만스물하나" 를 녹음한 파일을 디코딩하였을때
rescore 이전에는 백만 [20] [1]
rescore 이후에는 백만 스물 [1] 
과 같은 결과를 받아볼 수 있었습니다.

data/local/lm/zeroth_lexicon을 보면
스물 - s eu m u l2
[20] -  s eu m u l2
하나 - h a n a
[1] - h a n a

둘 다 동일한 값을 볼 수 있는데 [20]은  rescore 이후 스물이 되고
[1]은 rescore 이후에도 [1]입니다.
rescore가 조금 더 큰 언어모델을 사용하여 바뀐다고만 알고 있는지라..
혹시 [20]과 [1]이 무슨 차이로 인해 바뀌었는지 알려주실 수 있을까요?

읽어주셔서 감사합니다.
항상 많은 도움 받고있습니다!! 

이승현

unread,
Sep 24, 2021, 2:15:45 AM9/24/21
to zeroth-help
>>> 1.  decode.sh 에서 #### Decoding #### 부분에
--do-endpointing, --frames-per-chunk, --extra-left-context-initial, --online, --config, 
--verbose, --min-active, --max-active, --beam, --lattice-beam, --acoustic-scale, 
--word-symbol-table 과 같이 여러 옵션들을 주고 있는데, 해당 옵션들이 각각 어떤 의미인지 궁금합니다..! 
그리고 decode.sh를 실행 시에 stt 결과값만 받아보고 싶은데, 표준출력, 표준에러 리다이렉션을 해도 계속 log가 같이 저장이 됩니다. 혹시 stt 결과값만 보여주는 옵션이 존재할까요?

각 옵션들은 kaldi 소스 코드를 살펴보시면 어느 정도 설명이 되어 있습니다.

--do-endpointing, --word-symbol-table,  --online 옵션은 decode.sh에서 사용하는 decoder 소스 코드인 kaldi/src/online2bin/online2-wav-nnet3-latgen-faster.cc를 보시면 됩니다. https://github.com/kaldi-asr/kaldi/blob/master/src/online2bin/online2-wav-nnet3-latgen-faster.cc

--frames-pre-chunk, --extra-left-context-initial, --acoustic-scale 옵션은 아래 링크를 참고하시면 됩니다.

--beam, --min-active, --max-active, --lattice-beam 옵션은 아래 링크를 참고하시면 됩니다.

--verbose 옵션은 아래 링크들을 참고하시면 됩니다. 디코더와 직접적으로 연관된 옵션은 아니고 Logging과 관련된 옵션입니다.

--conf 옵션은 config 파일을 지정하는 옵션입니다. 기본 레시피에서는 conf/online.conf 파일을 지정합니다.
이 파일에는 --feature-type, --mfcc-config, --ivector-extraction-config, --endpoint.silence-phones 옵션이 적혀져 있습니다.
 --feature-type, --mfcc-config, --ivector-extraction-config 옵션은 아래 링크를 참고하시면 됩니다.

--endpoint.silence-phones 옵션은 아래 링크를 참고하십쇼

STT 결과만 뽑아내는 옵션은 제가 아는 한에서는 없는 것 같습니다.
또 결과만 뽑아내도록 하는 것도 kaldi 소스 코드를 건드려야 해서 번거롭고요.
가장 편한 방법은 Log 결과에서 STT 부분만 뽑아내도록 후처리를 하는 것이라 생각됩니다.

>>> 2. "백만스물하나" 를 녹음한 파일을 디코딩하였을때
rescore 이전에는 백만 [20] [1]
rescore 이후에는 백만 스물 [1] 
과 같은 결과를 받아볼 수 있었습니다.

data/local/lm/zeroth_lexicon을 보면
스물 - s eu m u l2
[20] -  s eu m u l2
하나 - h a n a
[1] - h a n a

둘 다 동일한 값을 볼 수 있는데 [20]은  rescore 이후 스물이 되고
[1]은 rescore 이후에도 [1]입니다.
rescore가 조금 더 큰 언어모델을 사용하여 바뀐다고만 알고 있는지라..
혹시 [20]과 [1]이 무슨 차이로 인해 바뀌었는지 알려주실 수 있을까요?

kaldi-zeroth에서는 기본적으로 decoding 시에 3-gram 언어 모델을 사용하고 rescore 시에 4-gram 언어 모델을 사용합니다.
rescore 할 때 더 많은 범위를 고려하여 결과를 도출합니다.

제가 보기에는 언어 모델의 확률 문제라서
큰 이유가 있어서 바뀌었다고 보기는 어렵습니다.
언어 모델의 확률과 관련된 값들은 data/local/lm/zeroth.lm.*.arpa.gz 의 gz 압축을 풀고 vim과 같은 텍스트 편집기로 열면 확인할 수 있습니다.

2021년 9월 20일 월요일 오후 1시 24분 6초 UTC+9에 AronGs님이 작성:

AronGs

unread,
Sep 24, 2021, 2:57:23 AM9/24/21
to zeroth-help

매번 친절하고 상세한 답변 감사드립니다.
말씀해주신 내용 바탕으로 좀 더 삽질하고 오겠습니다.
2021년 9월 24일 금요일 오후 3시 15분 45초 UTC+9에 이승현님이 작성:

AronGs

unread,
Sep 27, 2021, 1:56:49 AM9/27/21
to zeroth-help
혹시 여기서, zeroth_lexicon에서

[20] s eu m u l2 
과 같이 관련된 라인을 모두 삭제하고 학습을 진행한다면
나중에 백만스물하나를 발음하여도 [20]이 절대 나오지 않고 스물로만 올바르게 추출이 되는 결과를 얻을 수 있을까요?

만약 위 방법이 가능하다면
같은 방법으로 kg과 같은 모든 단위줄 및 알파벳을 삭제하여
stt 결과가 무조건 한글만 나오게 모델을 제작하고 싶은데
학습에 문제가 없을지 여쭤보고 싶습니다.
2021년 9월 24일 금요일 오후 3시 57분 23초 UTC+9에 AronGs님이 작성:

이승현

unread,
Sep 27, 2021, 3:15:56 AM9/27/21
to zeroth-help
그렇게 시도해본 적은 없긴 하지만
발음 사전에 없으면 디코딩 결과에서 나올 일은 없습니다.
s eu m u l2 이라는 발음을 가진 단어가 "스물"밖에 없으면 "스물"만 추출될 것입니다.
물론 LM에도 "스물"이 있어야 최종 결과에서 나오겠지만 일반적인 방식으로 zeroth에서 LM과 발음 사전을 만드셨다면 보통은 한 쪽에 있으면 다른 쪽에도 있습니다.

아무튼 학습 자체에는 문제가 없을 것이고 원하시는 방향으로 결과가 나올 것입니다.

2021년 9월 27일 월요일 오후 2시 56분 49초 UTC+9에 AronGs님이 작성:

AronGs

unread,
Sep 27, 2021, 3:36:37 AM9/27/21
to zeroth-help
답변 감사합니다.
한 번 시도해보고 결과 말씀드리겠습니다 :)

2021년 9월 27일 월요일 오후 4시 15분 56초 UTC+9에 이승현님이 작성:

AronGs

unread,
Sep 30, 2021, 12:53:39 AM9/30/21
to zeroth-help

학습을 무사히 마쳤고
실행 결과 원하는 결과를 얻을 수 있었습니다.
감사합니다 :)
2021년 9월 27일 월요일 오후 4시 36분 37초 UTC+9에 AronGs님이 작성:

이승현

unread,
Sep 30, 2021, 1:57:52 AM9/30/21
to zeroth-help
원하시는 결과를 얻으셨다니 축하드립니다!
저도 생각만 하고 있었고 실험해본 적 없던 부분인데 문제가 없는 것을 확인해주셔서 감사합니다.

2021년 9월 30일 목요일 오후 1시 53분 39초 UTC+9에 AronGs님이 작성:
Reply all
Reply to author
Forward
0 new messages