음성 처리 과정에서 잡음을 제거하는 기술은 1970년까지 거슬러 올라가는 아주 오래된 주제다. 최대한 많은 잡음을 제거해 소리의 품질을 올리는 것이 목적이다.

잡음 제거 과정은 크게 '음성 활동 검출', '잡음 스펙트럼 판단', '스펙트럼 잘라내기' 등 세 가지로 구성된다. 환경, 시간, 종류에 상관없이 모든 잡음을 잘 처리하는 알고리듬은 만들기 쉽지 않다.

진 마크 발린(Jean-Marc Valin) 모질라 멀티미디어 코덱 엔지니어는 마소 391호에서 잡음을 처리하는 기술 'RNNoise'에 대해 설명했다.


잡음 억제 알고리듬 구상도 / 마이크로소프트웨어 391호 발췌
잡음 억제 알고리듬 구상도 / 마이크로소프트웨어 391호 발췌
순환신경망(Recurrent Neural Network, RNN)은 입출력 프레임을 독립적으로 고려하지 않아도 타임 시퀀스(Time Sequences) 모델링을 할 수 있다. 잡음을 잘 추정하기 위해서는 시간을 들여야 하기 때문에, 이 과정은 매우 중요하다.

하지만 기존 RNN은 오래된 정보와 그라디언트(Gradient) 소실 문제가 있었다. 이 문제는 장단기기억 기술(Long Short-Term Memory, LSTM), GRU(Gated Recurrent Unit) 등의 기술로 해결할 수 있다. RNNoise에서는 GRU를 사용했다.

진 마크 발린 엔지니어는 잡음 억제 모델에 심층신경망(Deep Neural Networks, DNN)을 사용했다. 심층신경망은 매우 강력하지만, 비용이 많이 들고 데이터의 크기가 크다는 단점이 있다. 이를 개선하기 위해 샘플이나 스펙트럼 자체(480개)를 직접 작업하지 않고, 바크 척도(Bark Scale)의 주파수 대역(22개)을 사용했다. 바크 척도는 우리가 소리를 이해하는 방식에 대응하는 주파수 대역이다.

바크 척도를 도입해 훨씬 단순한 모델을 얻을 수 있었고, 뮤지컬 노이즈(Musical Noise)를 막는 등 부가적인 장점을 얻을 수 있었다.

진 마크 발린 엔지니어의 '소리 속 잡음을 지워보자, RNNoise'에 대한 자세한 내용은 '마이크로소프트웨어 391호(www.imaso.co.kr/archives/1301)'에서 확인할 수 있다.