Kaldi 기반 GoP(Goodness of Pronunciation) 구현 분석 및 코드 탐색

Source

  • Field Notes/ReturnZero/Daily Notes/Day 267. 2022-03-24.md

Summary

이 노트는 Kaldi 프레임워크를 사용하여 GoP(Goodness of Pronunciation) 시스템을 구현하기 위한 코드 리뷰 과정과 기술적 고민을 기록한 일기 형식의 메모입니다. 저자는 GMM 기반과 DNN 기반 GoP 구현체(jimbozhang, tbright17 등)를 비교 분석하며, compute-gopcompute-dnn-gop의 입력 인자(tree, model, lexicon, feature 등)와 처리 파이프라인(OnlineNnet2FeaturePipeline, MFCC 추출 등)을 추적했습니다. 특히 DNN 기반 구현의 컴파일 문제, LPP/LPR 벡터 계산 방식, 그리고 디코딩 과정과의 관계에 대한 의문점을 남겼으며, 향후 David와의 논의와 추가 코드 실험을 계획하고 있습니다.

Key Points

  • Kaldi 레시피 내 GoP 관련 코드(compute-mfcc-feats, OnlineNnet2FeaturePipeline 등)를 리스트업하고 분석 중임.
  • GMM 기반 GoP(jimbozhang)와 DNN 기반 GoP(tbright17) 구현체를 비교하며 API 구조와 입력 파일(tree, final.mdl, L.fst 등)을 파악함.
  • DNN 기반 GoP는 nnet3 확률로부터 GoP를 계산하며, compute-dnn-gop가 디코딩을 수행하지 않는다는 점 확인.
  • LPP/LPR 벡터(phoneme_log_likelihood)가 최종 출력 피처 벡터인지 확인 중이며, 컴파일 오류로 인한 실행 지연 발생.
  • 한글 발음 코드화 및 오답 피드백 방식에 대한 개념적 의문점 존재, 향후 동료(David)와 디코딩 과정 논의 예정.