한국어 음성인식 모델이 종합된 Kospeech의 경우 다양한 모델을 지원함에 따라 코드 복잡도가 높아 단순 모델 학습에는 용의하지 않습니다. 그래서 본 git은 Kospeech의 모델 코드를 이용하여 몇몇 버그 수정 및 단순화에 집중하였습니다.
DeepSpeech -> LAS-> LAS(SpecAgument) -> Transformer -> Conformer -> RnnT순으로 추가예정입니다.
코드 사용을 허락해주신 Kospeech Author 김수환 님에게 감사드립니다.
Original git (Kospeech): https://github.com/sooftware/KoSpeech
- DeepSpeech2: https://github.com/switiz/deepspeech2.pytorch
- KospoonSpeech preprocess code import
preprocess 과정의 경우 KospoonSpeech방식을 그대로 이용하였기 때문에 아래 git의 코드를 이용하시면 됩니다.
https://github.com/sooftware/KoSpeech/tree/latest/dataset/kspon
data/config.yaml 파일의 내용을 load하여 각 코드에서 사용하고 있기 때문에 custom이 필요시 config.yaml을 변경해주어야합니다.
특히 각각의 PC마다 dataset의 위치가 다르기 때문에 해당 부분을 주요하게 변경해주시면됩니다.
- root : dataset root 디렉토리
- script_data_path : script (kospeech style) 디렉토리
- vocab_path : kosponSpeech-preprocess로 생성된 vocab 파일
#traiin dataset
root : C:/SpeechRecognitionDataset/Dataset/AI_hub
script_data_path: C:/Users/sanma/PycharmProjects/las.pytorch/data/aihub/transcripts.txt
vocab_path: C:/Users/sanma/PycharmProjects/las.pytorch/data/aihub/aihub_labels.csv
#train
batch_size: 8
epochs: 5
use_cuda: True
cer_every: 500
teacher_forcing_step: 0.005
teacher_forcing_ratio: 0.99
min_teacher_forcing_ratio: 0.7
label_smoothing: 0.1
#model_save_load
resume: False
save_every: 1
#inference
inference: False
use_val_data: True
weight_path: C:/Users/sanma/PycharmProjects/las.pytorch/weights/pretrained.pt
#root : C:/SpeechRecognitionDataset/Dataset/AI_hub
#script_data_path: C:/Users/sanma/PycharmProjects/deepspeech2.pytorch/data/aihub/transcripts.txt
#vocab_path: C:/Users/sanma/PycharmProjects/deepspeech2.pytorch/data/aihub/aihub_labels.csv
#model_save_path: C:/Users/sanma/PycharmProjects/deepspeech2.pytorch/data/runs/train.pt
#validation
validation_every: 1
#input feature
feature: logmelspectrogram
n_mels : 40
use_npy: False
split_balance : 0.1
#ENCODER
encoder_hidden_dim : 256
encoder_bidirectional: True
encoder_rnn_type: LSTM
num_encoder_layers: 3
encoder_dropout_p: 0.1
mask_conv: False
#Decoder
decoder_max_length: 150
decoder_embedding_dim: 512
decoder_hidden_dim: 512
decoder_attn_mechanism: dot
decoder_num_heads: 4
decoder_num_layers: 2
decoder_rnn_type: LSTM
decoder_dropout_p: 0.3
decoder_bidirectional: False
decoder_use_beam: False
python train.py
config.yaml의 resume을 True로 변경하거나 --resume arg를 넣어 동작시켜 줍니다. 가장 마지막모델을 기준으로 load하여 resume이 실행됩니다.
python train.py --resume
inference.py를 실행하면 되며 현재는 validation data를 이용하여 inference하도록 되어있습니다.
python inference.py
특정 파일 inference를 위해서는 아래처럼 audio_path argment를 이용하면 됩니다.
python inference.py --audio_path 'audio_file'
데이터셋 : AIHUB 1000h Korean speech data corpus
PC사양 : Windows10, AMD 3600, RAM32, RTX 3080, Pytorch 1.8
소요시간 : EPOCH당 8시간
Train Epoch : 5
CER : 0.40 (40%)
LABEL | PREDICT |
---|---|
아 나도 그 생각을 해봤는데 | 아 나도 그 생각을 해봤는데 |
그런 게 있으면 우리 짝수여야 돼. | 그럼 일 주일 이 작 시야 돼. |
그때. | 그때. |
아 진짜? 근데 많이 생기지 않았을까? 이젠? 조금 뭐 이것저것 번화하고 있잖아 | 아 진짜? 근데 많이 생기지 않았을까? 이제? 두 분 뭐 이것저것 더 나가고 있잖아. |
뭐라 그러지 그 등하원하는 버스가 없대. 그 유치원에 우리 동생네 이사 갔거든. | 뭐라고 이제 주 주나 하면은 버스 카페 그 주원에 우리 동생 얘기 상하거든. |
그래 놓고 공부 끝나니까 홀라당 가 버릴려구 하구. | 그러면 그 공부 끝나니까 돌려달라고? |
그 누구 나오는데. 이름 약간 특이한 배우 말해봐. | 그쪽이다. 언니 이름이 약간 특이한 그 말고? |
하나 둘이면 되지. 근데 하나는 외롭긴 외롭겠다. | 장사 두 개 보내지. 이 인정. 하나는 일 급 일 없겠다. |
그 온양 온천이 대전에 있는 거 아니야? | 그 오늘 언제 하는지 그 전에 있는 거 아니야? |
똑바로 이제 발음을 이렇게 해보겠습니다. | 떡밥을 이케 팔아 먹을 게 그 먹을 순 있다고 하고 먹어 이거. |
쪼 쫌 더 친근한 건 없어? | 진짜 운동 친구랑 그렇게 싸. |
영화표는 내가 살 테니깐 너가 팝콘 사. | 영화 보는 데가 솔직히 간 동화 타고 간 줄 알아? |
아니 워낙 자유분방하니까 돌아다니는 거 좋아하고 | 아 너무 너 자기도 너 하니까 공항에서 좋아하고. |
근데 요즘 내가 그 후레쉬 빵 안 사준 거 같애. | 근데 요즘에 아 그 크리스마스 같은 거 돼? |
어. 그 기 그 소리만 들어. | 야 그 기계 더 원인 안 돼. |
왜 말을 안 해. | 오 너 아는 언니 |
안 갈 수도 있다며. | 어 맛있겠다. |
그래. | 그래. |
게임 뭐 하는데? | 게임 뭐하는데? |
@ARTICLE{2021-kospeech,
author = {Kim, Soohwan and Bae, Seyoung and Won, Cheolhwang},
title = {KoSpeech: Open-Source Toolkit for End-to-End Korean Speech Recognition},
url = {https://www.sciencedirect.com/science/article/pii/S2665963821000026},
month = {February},
year = {2021},
publisher = {ELSEVIER},
journal = {SIMPAC},
pages = {Volume 7, 100054}
}