"facebook/wav2vec2-base-100h"의 korean 음성인식 성능이 WER=1.0으로 매우 안좋은 결과를 보였다.
model config에 "ctc_zero_infinity":True
를 추가
config.update(
{,,,
"ctc_zero_infinity": True
}
)
CTC모델은 input_data lenght > output_data length 임을 가정하고 있다. 따라서 만약에 input_data에 길이가 더 긴 데이터가 있다면 model loss가 infinite하게 나와 model train에 방해가 된다. 이러한 오류를 막고자 ctc_zero_infinity
parameter을 추가해준다. 만약 input data가 더 긴 데이터가 들어온다면 loss를 '0'으로 바꾸어버린다.
결과) 여전히 WER=1.0이 나왔다.
text data를 '음절'이 아닌 '음소(자음, 모음)'로 처리 - Tokenizer 사용x, jamo 라이브러리 사용
ex. 안녕: '안', '녕' -> 'ㅇ', 'ㅏ', 'ㄴ', 'ㄴ', 'ㅕ', 'ㅇ'
1) '안녕'을 'ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ'으로 바꿔준다. with jamo_decode()
2) 'ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ'을 대응하는 숫자 index로 바꿔준다.
-> Question. vocab dictionary를 따로 안만들고 ord(ㄱ)으로 쓰면 안되나?
3) train
4) 모델 train이 끝났으면 test dataset을 model에 넣는다.
5) output으로 나온 index를 다시 'ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ'으로 바꿔준다.
6) 'ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ'을 '안녕'으로 바꿔준다. with join_jamos()
wav2vec2 pre-train tokenizer는 영어로만 tokenize가 되서 처음에는 jamo함수만을 사용하고 tokenizer는 그냥 지워버렸음. 그랬더니 다음과 같은 error가 발생.
1. OSError: Can't load tokenizer for 'checkpoints_ko_3'. If you were trying to load it from 'https://huggingface.co/models', make sure you don't have a local directory with the same name. Otherwise, make sure 'checkpoints_ko_3' is the correct path to a directory containing all relevant files for a Wav2Vec2CTCTokenizer tokenizer.
=> processor에 왜 tokenizer이 필요하지?
processor는 tokenizer와 feature extractor이 모두 포함된 것, AutoProcessor 수정 필요
2. DataCollatorCTCWithPadding error
processor에 tokenizer가 없어서 text data는 padding할 수가 없음.
3. vocab_size error
facebook/wav2vec2-base
의 CTC모델은 English로만 pre-train된 것이다. 즉 CTC layer의 output dimension은 32(=English 알파벳 29+<unk, pad, /s>). 따라서 CTC layer의 output dimension을 한국어 51(자음, 모음)+영어 29+<unk, pad, /s>로 바꿔줘야 한다.
wav2vec2Tokenizer를 그대로 가져오돼, 한국어 자모 분리로 가능하게 직접 Tokenizer를 수정
1) Import Module
2) Create Vocab
3) Load and Modify Tokenizer
4) Make Processor
5) Save Processor
6) Load and Modify CTCmodel
결과)
WER=1.0 -> WER=0.3935 성능 향상
batch size에 제한을 두고 학습을 시켰는데, 이 제한을 풀고 다시 학습시켜보기. WER=0.2 이하로 까지 낮춰보기.
"facebook/wav2vec2-large-xlsr-53" 한국어로도 pre-train된 모델 사용해보기.