elevne's Study Note

Speech-to-Text 본문

Machine Learning/STT

Speech-to-Text

elevne 2022. 11. 8. 21:14

음성인식은 사람의 음성으로부터 발화한 Text를 얻어내는 기술이다. 영어로는 Speech-to-Text로, STT라고 많이 쓰인다.

 

 

 

현재 음성인식 기능은 기능대화 음성인식이 주를 이룬다고 한다. 왜냐하면 사용자가 어느 질문/발화를 할지 어느정도 예측이 가능하기 때문이다. 기능대화 음성인식은 예측 가능한 범위 내에서 시나리오를 만들거나 모델을 만들 수 있다. 하지만 기능대화가 아니라 일상적인 대화의 음성인식은 난이도가 매우 높다고 한다. 무한한 경우의 문맥, 음성파일에 있는 노이즈 등 너무 많은 변수가 있다. 하지만 다행히도 최근 몇 년간 딥러닝의 발전으로 음성인식 기술의 발전이 빠르게 이루어지고 있다고 한다.

 

 

 

딥러닝 음성인식 모델은 End-to-End로 이루어진다. 통째로 Input audio 파일을 넣으면 문법, 발음까지 한 번에 모두 학습하여 Output이 나오게 되는 것이다. End-to-End 모델의 파이프라인은 다음과 같을 것이다.

 

 

 

STT Pipeline

 

 

 

위 Pipeline에서 Audio File은 일반적으로 16,000Hz의 샘플 레이트를 가지는 신호라고 한다. 이 Raw한 Audio 파일만으로는 많은 정보를 얻기는 힘들기에 Feature Extraction이 진행된다. Feature Extraction에서는 음성신호의 주파수 변화가 핵심적인 요소로 사용된다고 한다. 이를 위해서는 또 시간 축에서 주파수 변화를 바라봐야 하는데 이 때 사용되는 것이 Short-time Fourier Transform이다.

 

 

 

Short-Time Fourier Transform은 한국어로는 국소 푸리에 변환이라고 불린다. 기존의 Fourier Transform은 해당 신호가 주파수 영역으로 보았을 때 어떤 주파수의 성분을 얼만큼 가지고 있는지 매우 가시적으로 잘 표현해준다. 하지만, Fourier Transform은 시간의 흐름에 따라 신호의 주파수가 변했을 때, 어느 시간대에 주파수가 어떻게 변했는지는 알 수가 없다는 단점이 있다. 이를 보완하기 위해 나온 것이 STFT라고 한다. STFT를 사용하면 해당 음성 신호가 몇 초에 한 번씩 변화했는지를 알아볼 수 있다고 한다. 또, STFT를 사용하면 음성신호에 대해 자신이 알고싶은 시점에서의 주파수 성분을 알 수 있다.

 

 

 

SFTP를 통해 Spectrogram을 얻게되면 여기에 Mel Scale을 적용하여 딥러닝 모델이 사람의 음성인식 과정과 유사하게 작동할 수 있도록 한다. Mel scale(Melody Scale)은 사람의 음을 인지하는 기준을 반영한 Scale 변환 함수이다. 주파수를 linear하게 다루는 것이 아니라 log 함수를 통과시켜 Mel scale로 바꾼다음 linear하게 다루게 되는 것이다.

 

 

 

이제 Modeling 단계에서는 Feature Extraction에서 얻은 Feature을 사용하게 되는데 이를 보통 Acoustic Modeling이라고 부른다고 한다. 음성인식 Modeling에서 어려운 점으로 Signal과 Text의 Alignment를 알기 힘들다는 점이 있다고 한다. 언제 해당되는 Text가 음성에서 나오는지 알기 힘들다는 뜻이다. 이 어려움을 극복하기 위해 사용되는 방법이 크게 2 가지가 있는데 바로 CTC 알고리즘과 Attention 알고리즘이다.

 

 

 

Attention 알고리즘은 Loss Function으로 Cross-Entropy Function이 사용되며, Listener과 Speller로 구성되어 있는 모델이다. Listner은 Encoder으로 음성 신호의 Feature을 High-level feature으로 변환해주는 역할을 하며, Speller은 Attention 기반의 Decoder으로 Listener의 Feature을 받아서 글자를 변환해주는 역할을 한다. (CTC Loss에 대해서는 다음에 알아보기로 하였다...)

 

 

 

마지막으로 Speech Recognition에서 사용되는 Metric으로 CER과 WER에 대해 알아보았다. WER(Word Error Rate)은 단어 기반으로 오류율을 계산하는 것이고, CER(Character Error rate)은 Character 기반으로 오류율을 계산하는 것이다. 한국어 음성인식 모델에서는 주로 CER Metric이 사용된다고 한다.

 

 

 

이제 실제로 음성인식 모델을 코드로 실습해보기 위해 Github에 오픈소스로 공개되어 있는 KoSpeech를 사용하기로 하였다. 다음 시간부터는 실제 코드로 사전학습 모델을 가져와서 STT를 실제로 진행해보도록 하겠다.

 

 

 

출처:

https://jbear.tistory.com/entry/STFT-Short-Time-Furier-Transform-%EC%9D%98-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90-2

https://m.blog.naver.com/PostView.naver?blogId=vmv-tech&logNo=220936084562&targetKeyword=&targetRecommendationCode=1 

https://velog.io/@tobigsvoice1516/2%EC%A3%BC%EC%B0%A8-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D-%EA%B8%B0%EC%B4%88

https://github.com/sooftware/kospeech

https://velog.io/@letgodchan0/%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D-%ED%95%9C%EA%B5%AD%EC%96%B4-STT-1

https://newsight.tistory.com/294

'Machine Learning > STT' 카테고리의 다른 글

STT 모델 적용해보기 (feat. Pytube)  (0) 2022.11.09