decoding시 3-gram 모델과 4-gram 모델 차이

232 views
Skip to first unread message

거우니

unread,
Aug 25, 2021, 3:29:28 AM8/25/21
to zeroth-help
안녕하세요, 현재 3-gram과 4-gram 두종류로 학습을 진행하고 있습니다.
정상적으로 트레이닝이 끝났다면
3-gram으로 돌린 final.mdl과 4-gram의 final.mdl은 다르게 생성되었을 것으로 생각합니다.

이때 export.sh에서
두개를 구분해서 사용하기 위해서는
final_graph_dir, final_model_dir, small_lm, large_lm 중에서 바꿔주어야 할 부분이 있을까요? 

그리고 기본으로 4-gram으로 돌렸을때 fglarge모델이 생기는것으로 이해하였는데
3-gram으로 돌렸을때 lm rescore에 사용하는 fglare 모델은 자동으로 생성되는 것일까요?

또 한가지 질문은
decode.sh를 통해 decoding하고 문자가 나왔을때 wer을 확인하고 싶은데 이는 어디서 보아야할지 질문드립니다. 

이승현

unread,
Aug 26, 2021, 4:26:08 AM8/26/21
to zeroth-help
안녕하세요

3-gram과 4-gram 두 종류로 학습을 진행하셨다는 것은

학습이 완료된 음향 모델(final.mdl)에 3-gram LM으로 디코딩 그래프를 생성하고 4-gram LM으로 rescoring한 것이 아니라
3-gram과 4-gram LM을 이용해 각각의 디코딩 그래프를 구축하셨다는 말씀이신가요?
2021년 8월 25일 수요일 오후 4시 29분 28초 UTC+9에 miz...@gmail.com님이 작성:

거우니

unread,
Aug 26, 2021, 8:47:25 AM8/26/21
to zeroth-help

제가 잘못이해하고 있는지는 모르겠지만
제생각에는 tg모델이 3-gram으로 학습한 모델, fg모델이 4-gram으로 학습한 모델이라고 생각이 됩니다.

그래서 디코딩시에 3-gram으로 학습한 모델로 디코딩을 하는것은 이해가 되는데 rescore에 필요한 fglarge모델은 어떻게 생성되어 사용되는것인지 궁금합니다.
2021년 8월 26일 목요일 오후 5시 26분 8초 UTC+9에 이승현님이 작성:

이승현

unread,
Aug 26, 2021, 9:14:38 PM8/26/21
to zeroth-help

tg 모델은 3-gram으로 학습한 언어 모델, fg 모델은 4-gram으로 학습한 언어 모델이 맞습니다.
그러나 위에서 말씀하신 final.mdl이란 모델 파일은 이와는 별개로 학습이 된 음향 모델을 의미합니다. 
이 모델들을 가지고 steps/mkgraph.sh 스크립트를 이용해 최종 디코딩 그래프인 HCLG.fst를 생성하게 됩니다.

zeroth 기본 레시피를 기준으로
언어 모델들(data/local/lm 아래의 zeroth.lm.*.arpa.gz 파일들)이 이미 있다고 가정할 때,
local/format_lms.sh 스크립트를 실행하면 3-gram 언어 모델을 디코딩 그래프에 합성할 수 있도록 생성합니다.(data/lang_test_tgsmall)

이와 별개로 4-gram 모델을 rescoring에 사용하시려면 utils/build_const_arpa_lm.sh 스크립트를 사용하면 됩니다. 이 또한 기본 레시피에서는 자동으로 생성하도록 되어 있습니다.

따라서 말씀하신대로 fglarge모델을 사용하고 싶으시면

일단 data/local/lm/run.sh를 참고하셔서 fglarge arpa LM 생성하시고(또는 다운로드받으시고)

이를 이용해 utils/build_const_arpa_lm.sh을 이용해 data/lang_test_fglarge를 만드시면 됩니다.

최종적으로 이 4-gram 언어 모델을 rescore에 사용하려면 steps/lmrescore_const_arpa.sh 를 사용하시면 됩니다. 이 스크립트들은 모두 기본 레시피(run.sh)를 보시면 어떻게 사용하는지 알 수 있으실 겁니다.

LM들이 정상적으로 생성이 완료되었다고 가정하고 아래 질문에 답변드리자면,

>>> 이때 export.sh에서
>>> 두개를 구분해서 사용하기 위해서는
>>> final_graph_dir, final_model_dir, small_lm, large_lm 중에서 바꿔주어야 할 부분이 있을까요? 

zeroth 프로젝트가 위치한 경로를 제외하고는
small_lm과 large_lm을 굳이 구분짓지 않으셔도(아무것도 건드리지 않아도) 알아서 모델 파일들을 복사할 것입니다.

물론 생성 도중 파일 명이나 디렉터리 명을 임의로 변경하셨다면 그에 맞춰서 변경하시면 됩니다.

>>> 또 한가지 질문은
>>> decode.sh를 통해 decoding하고 문자가 나왔을때 wer을 확인하고 싶은데 이는 어디서 보아야할지 질문드립니다. 

exp/chain_rvb/tdnn1n_rvb_online/decode_tgsmall_test_clean 아래의 wer* 파일들을 확인하시면 됩니다.
2021년 8월 26일 목요일 오후 9시 47분 25초 UTC+9에 miz...@gmail.com님이 작성:
Reply all
Reply to author
Forward
0 new messages