티스토리 뷰

반응형

화자 분리는 '언제', '누가' 말했는 감지하여 분리하는 기술이다.

 

한마디로 일직선적인 대화를 주고받는 Wav 파일이 있다면, 1초~2초까지는 사람 1, 2~3초까지는 사람 2..이런 식으로 분리해주는 기술인 것이다.

 

그래서 이 화자 분리를 실행할 때는 VAD(Voice Activity Detection)의 역할이 매우 중요하다.

언제 말이 시작되고, 끝났는지를 알면 정확하게 나눌 수 있으니 말이다.

 

거기에 더해 Speaker Segmentation을 한다.

Segmentation이라고 하면 비전 분야에서 많이 들어 보았을 것이다. 객체별로 어떤 객체인지 파악하는 것이다.

그리고 그 원리는 픽셀 단위로 해당 경계가 물체인지 아닌지를 확률적으로 파악해서 합치는 것이다.

 

음성도 마찬가지로 화자별로 어떤 화자인지를 파악하는 것이다. 여기도 매우 짧은 구간을 나누면서 확률적으로 이 화자가 동일 화자인지 아닌지를 판단한다. 그리고 이렇게 모은 화자별 데이터를 전부 임베딩화하여 클러스터링한다.

 

그렇게 되면 군집화가 되고, 결론적으로 경계가 생기므로 화자를 분리할 수 있게 된다.

 

그렇게 군집화된 것 중에 VAD의 시작과 VAD의 끝까지 동일한 화자가 있다면? 전부 동일 화자가 말한 것이므로 타임 스탬프가 찍힌다.

아주 간단해 보이지만, 음성 데이터는 비정형 데이터로서 Feature Extract 작업에서 비전보다 훨씬 자원이 많이 드는 작업이다.

그렇기에 오픈소스나 논문이 많이 없는 것 또한 흠이다.

 

그렇다면 만약 audio가 겹쳤을 때(overlaped)에는 어떻게 해야 할까?

그건 Speaker Seperation, 또는 위에서 말했던 Speaker Segmention으로 화자를 먼저 분리시켜야 한다.

 

또한 정확도를 올리려면 노이즈를 제거하거나 정규화하는 방법이 있다고 한다.

그러나 필자가 시도해 본 바로는 그다지 추천하지 않는다.

왜냐하면 요즘에는 모델 자체가 노이즈의 패턴까지 학습하거나, 정규화한 것 까지 다 고려해서 가중치, 임베딩을 생성하기 때문이다.

그래서 오히려 결과가 안 나올 가능성이 높다.

 

차라리 AMP 증폭을 하는 게 더 나을 수도 있다. Feature Extract에는 더 높은 차이가 도움이 되니 말이다.

아무튼 음성 분야는 굉장히 많이 연구가 되어야 할 분야인 거 같다.

 

반응형