티스토리 뷰
빅프로젝트를 진행하면서 ARC(Auto Speech Recognition) 모델을 만들 일이 생겼다.
또한 음성 인식 모델을 거친 output을 텍스트 데이터와 멀티 모달로 묶어야 할 일도 생겼다.
그래서 이번 기회에 그냥 AI 음성인식에 대해서 간단하게 정리해보려고 한다.
이론만 정리할 것이고, 나중에 내가 봐도 알아볼 수 있게 요약정리해본다.
AI의 음성 인식은 도대체 어떻게 이루어지는가?
생각을 해보자. 우리는 어떻게 음성을 듣는가?
처음 생각해보면, 가장 간단하게 귀에 있는 고막이 있고, 해당하는 고막이 진동하면서 소리를 듣는다.
마이크가 이와 똑같은 원리이다. 마이크에는 코일이 있고, 이 코일이 진동하면서 내는 전기 신호를 해석하여 마이크가 소리를 알아듣는 것이다.
이런 소리 데이터는 결국 스펙트로그램이라고 하는, 우리가 흔히 아는 음파의 그림으로 그려진다.
어떠한 부분은 튀어나고, 어떠한 부분은 들어가 있다.
그렇기에 우리는 이 부분을 인간의 음성으로 제한하면, 잡음을 제거하고 인간의 음성 부분만 추출할 수 있다.
음성 파일이 만들어지는 것이다.
이 과정을 음성 입력라고 하며, 이는 음성의 특징을 추출하는 부분이므로 중요하다.
이 과정에는 소리 캡처, 디지털 변환, 샘플링(연속적인 아날로그 신호를 우리가 아는 주파수로 바꾸는 행위), 양자화, 노이즈 제거가 수반된다.
샘플링과 양자화의 개념이 중요한데, 다음과 같다.
샘플링 - 연속적인 아날로그 신호를 숫자 형태의 주파수로 바꾼다.
샘플링레이트는 단위 시간당 샘플의 수를 결정하며, 이것이 높을수록 음성의 품질이 향상되지만 데이터의 양이 늘어난다.
양자화 - 샘플링 된 신호가 비트 수에 따라 일정한 레벨로 표현되는 과정이다.
양자화 수준은 데이터를 표현하는 정밀도에 영향을 준다. 양자화 수준이 높을수록 정밀한 값으로 표현되지만, 데이터 크기가 커진다.
음성 전처리
음성을 입력받은 다음에는 음성 전처리를 한다.
음성 전처리는 다음과 같은 과정으로 이루어진다.
음성 신호 준비 - 프레임 분할, 윈도우 함수 적용, 전력 스펙트럼 업데이트 등이 수행된다.
프레임 분할 - 음성 데이터는 일정한 시간 간격으로 나누어 처리하는 것이 효과적이다(영상을 사진 데이터로 처리하듯이)
주로 20~30ms 길이의 프레임으로 잘라 분석한다.
윈도우 함수 - 프레임의 양쪽 끝부분에서 발생하는 음성 데이터의 왜곡을 줄이기 위해서 각 프레임에 하나의 창 함수(햄밍 창, 핸빈 창 등)을 적용하여 왜곡을 줄여준다.
전력 스펙트럽 업데이트 - 각 프레임의 주파수 영역 데이터를 분석하기 위해, 소리의 시간-주파수 특성을 나타내는 전력 스펙스럼을 업데이트한다.
특징 추출 - 음성에서 중요한 정보를 찾아내는 과정이다.
사용자의 발음, 톤, 강세와 같은 차별적인 소리 특성을 찾아낸다. 이 부분이 음성 처리 모델의 가장 중요한 부분이다.
- MFCC - 사람이 소리를 인식하는 방식을 모방하여 특정 주파수 영역에 대해 민감하게 반응하는 방식을 활용한다. 사람의 청각 특성에 맞는 특징을 추출한다.
- LPC - 이 기법은 현재 샘플의 값이 이전 샘플값들의 선형 조합으로 예측될 수 있다고 가정(시계열 데이터)한 후, 예측된 결과와 실제 값 사이의 차이를 최소화한다. 시계열 데이터의 예측과 같다.
음성 인식
이제 전처리를 마쳤으면, 가장 중요한 인식 단계이다.
이 단계에서는 위에서 얻은 특징들을 이용해서, 어떠한 단어나 문장을 말했는지 추측하는 단계이다.
결론적으로는 여기서부터 딥러닝과 같은 확률 모델이 된다.
HMM - 음성 신호가 시간에 따른 패턴을 가진(시계열 데이터) 데이터 이기 때문에, 이러한 패턴을 분석하기 위해 음성 신호의 변화를 확률로 나타내는 HMM이 쓰인다. 이를 통해 단어나 발음을 확률로 예측한다.
딥러닝 기반 - 너무 잘 알고 있을 거 같아 패스.
서포트 벡터 머신 - 딥러닝을 알고 있다면 필수적으로 알고 있어야 한다. 그러므로 이것도 패스.
분류 - 인식된 음성 결과를 특정 범주로 분류한다.
그 후에는 텍스트로 변환해서 출력하거나 사용자에게 제공한다.