본문 바로가기
Deep Learning

[논문리뷰] Attention is all you need in speech separation

by 지오는 짱짱걸 입니다 2021. 4. 1.
반응형

논문 제목부터 어그로가 엄청납니다. 근데 speech separation 관련해서 나온 논문 중 RNN없이 transformer를 사용해서 SOTA를 만든 최초의 논문(아마?)이라서 어느 정도 까방권이 있는 느낌입니다.

 

본 논문은 2020825일에 submit된 논문이고, ICASSP 2021accept 된 논문입니다. Transformer 기법을 사용하여 음성 분리(speech separation)를 이뤄냈으며 이 분야의 SOTA 논문입니다(적어도 이 논문에서는 그렇다고 합니다). 먼저 간략하게 본 논문에 대해서 말씀드리겠습니다.

 

먼저 이 논문에서는 RNNSeq2Seq 학습에서 좋았었지만, 병렬화에서 성능이 떨어지는 모델이었기 때문에 transformer가 그 대안으로 나왔다는 말부터 시작합니다(원래 논문은 기존 방법들 까주고 시작해야 제맛이죠). 이러한 이유로 이 논문에서도 음성 분리 기법을 기존 모델인 RNN을 사용하지 않고, transformer 베이스의 뉴럴 네트워크를 통해 새롭게 만들었다고 합니다(진짜 새로운 것인지는 따지지 맙시다 크흠). 무튼 이렇게 만들어진 네트워크의 이름을 ‘SepFormer’라고 명명했습니다(separationtransformer를 합쳐서 이름을 만든 것 같습니다). 이 모델은 transformer를 기반으로 하는 multi-scale 방식이므로 short-termlong-term dependency를 학습할 수 있다고 합니다. 여튼 이 네트워크를 사용해서 ‘WSJ0-2/3mix’ 데이터셋(요 데이터셋은 뒤에서 따로 설명할게요)을 사용한 결과로 SOTA를 달성했으며, 최근의 비슷한 성능을 보이는 음성 분리 시스템들과 비교했을 때, 더 빠르고 메모리가 덜 필요했다고 합니다.

 

이제 본격적으로 들어가 봅시다. 일단 transformer기법을 사용하면 결국 attention-based 매카니즘을 사용하는 거니까 전체 문장을 한 번에 확인할 수 있게 됩니다(원피스에서 에넬이 사용하던 만트라 생각하시면 될 거 같네요). 이러한 방법을 사용하니까 결국 멀리 떨어진 요소끼리 직접 연결을 설정할 수 있고 이로 인해 transformerlong-term dependency를 쉽게 학습할 수 있다고 합니다. 이런 이유로 transformer기법이 speech recognition, 음성 합성, enhancement 등의 분야에서 잉기쟁이라고 합니다(BTS쯤 되나 봅니다).

 

원피스에 출현한 에넬(하늘섬 편)

 

그런데 사실 모노 오디오(마이크가 하나인 조건인데 인간으로 표현하면 한 쪽 귀로만 들어서 공간 정보가 없는 조건을 말하는 것이다. 마이크 개수를 언급할 때는 channel로 표기함(e.g., single-channel, multi-channel etc.))를 사용한 음성 분리 분야에서는 transformer-based model을 사용한 연구가 아주 조금만 진행되고 있다고 합니다(이제 이걸로 연구 엄청나게 하고 있다는 의미일까?). 근데 왜 long-term dependency가 필요할까요? 그 이유는 요즘 음성 분리 테크닉에서는 길이가 긴 입력 데이터가 사용되기 때문이라고 합니다. 무튼 요즘에는 이러한 문제를 가장 잘 해결하는 아주 유명한~ 논문인 Conv-TasNet(아직! 안읽어 봤지만,,,, multi-speaker source separation에서 SOTA의 성능을 기록했던 모델이라고 해요)을 응용해서 문제를 해결한다고 합니다. 또한 DPRNN에서는 long-term modeling의 성능이 음성 분리의 성능에 중요한 이슈가 되는 것을 보여줬다고 합니다(이 논문도 읽어봐야겠어요). 즉 여기까지 보면 음성 분리에서 중요하게 생각되는 것 중 하나가 long-term dependency인 것을 알 수 있습니다. 무튼 이렇게 보면 딱 봐도 transformer기법을 사용하는 것이 성능이 좋게 나온다는 것이 느낌적인 느낌으로 받아들여집니다. 근데 실제로 음성 분리 기법에 transformer를 최초로 적용한 논문인 DPTNet이 나왔고 이 논문의 결과가 DPRNN보다 좋게 나왔다고 합니다(이 논문도 읽어보자). 근데 지금까지 열거한 논문들은 여전히 RNN을 내장하고 있기 때문에 순수하게 attention model을 사용했을 때처럼 모델 병렬화를 수행하지 못한다고 합니다.

 

그래서 이 논문에서는 새로운 모델인 ‘SepFormer(Separation Transformer 오잉 진짜 이거를 합쳐서 만든 이름이었네)’를 제안합니다. ‘SepFormer’는 대부분 multi-head attentionfeed-forward layers로 구성되어있습니다. 이렇게 만들었기 때문에 최근 RNN-based model보다 빠르고 메모리도 적게 들 수 있었다고 합니다.

 

이제 모델에 대해서 자세하게 살펴봅시다. 에구 힘들어라. 이 논문에서 제안한 모델은 learned-domain masking approach를 기반으로 사용한다고 합니다(근데 이게 뭔지 모르겠어요.. 관련 논문 읽고 업데이트 하도록 할게요). 먼저 모델은 위와 같이 생겼습니다. Encoder blockinput(audio) 신호에 대해서 learned-representation(이제 보니 이게 learned-domain을 의미하는 것 같긴 하네요)을 추청 합니다. 반면에 Masking Netmixture에 존재하는 sources를 분리하기 위해 optimal masks를 추정합니다. 마지막으로 Decoder에서는 Masking Net에서 제공한 masks를 사용해서 time domain상에서 추정된 sourcesreconstruct 합니다.

 

조금 더 자세하게 살펴보면 Encoderfully convolutional으로 되어있고, making NetDPRNN에서 제안된 dual-path processing block(이거 진짜 봐야겠다) 내부에 transformer 두 개를 내장시킨 것을 사용합니다. 마지막으로 decodermasking Net에서 예측된 masks를 사용해서 time domain에서 신호를 분리하고 reconstruct하게 됩니다.

 

 

 

Encoder

여기까지 모델을 개략적으로 살펴본 것이고 이제 Encoder부터 하나하나 자세하게 살펴봅시다. 먼저 encodertime-domain mixture-signal(입력 음성이 여러 개 섞여 있었죠?)xR^T input으로 받습니다. 이렇게 입력으로 받은 signalsingle conv layer에 의해서 계산되는데 이는 STFT와 유사한 representationhR^(FxT)를 학습합니다(저의 생각에는 STFT representation대신 conv layer를 사용해서 representation을 만들어준 이유가 speech separationoptimizedaudio representation을 만들어주기 위해 사용한 것 같아요). 최종 식은 다음과 같습니다.

 

이렇게 만들어진 conv layerstride factor는 모델의 성능, 속도 그리고 메모리에 상당한 영향을 미치는데 이는 결과 부분에서 다시 알아봅시다.

 

Masking Network

다음으로 Mask Net입니다. 위의 그림이 Mask Net에 대한 상세한 구조입니다. 먼저 Mask Net의 개략적인 역할을 살펴보겠습니다. Mask Net는 이미 위에서 살펴본바와 같이 encoder로부터 출력된 representationhR^(FxT)가 입력으로 들어오고, mixture에 포함된 Ns명의 speakers에 대한 각각의 mask{m_1, ..., m_Ns}를 추정합니다.

여기서 입력으로 들어온 hLayer normalization(batch norm이랑은 다른 방법인데 공부해봐야겠다)이라는 방법으로 정규화가 되고난 후 linear layer에 의해서 processing 됩니다(코드상에서는 conv1d()padding=‘same’ 옵션을 통해 processing 하고 있어요). 그런 다음 h50%overlap factor를 사용해서 시간 축으로 잘게 자릅니다. 이렇게 자르면 크기 Coverlapping chunks를 만들 수 있습니다. h를 시간 축으로 잘라서 C크기의 chunk들을 만든 것이고 이러한 operationchunking이라고 합니다. 그러면 chunking에 의해 hh′∈R^(FxCxNc) 로 변경됩니다. 여기서 Cchunk의 크기라고 했으므로 각 chunklength라고 봐도 됩니다. 그리고 Ncchunking으로부터 나온 chunk의 개수입니다. 따라서 h이 왜 저러한 크기를 가지는지 알아볼 수 있었습니다.

이렇게 나온 hMask Net의 메인 componentSepFormer block의 입력으로 사용됩니다. 위의 그림에서 남색으로 칠해져있는 blockSepFormer block입니다. block에서 드디어 short-termlong-term을 학습할 수 있는 두 개의 transformer가 사용됩니다.

그 이후 SepFormer에 의해 나온 h′′∈R^(FxCxNc) linear layerPReLU activation에 의해 process되고 이를 h′′′∈R^((FxNs)xCxNc) 라고 표현합니다. 여기서 Ns는 위에서 봤듯이 speaker의 수입니다. 그 후에 overlap-add라는 방법을 통해 h′′′′∈R^(FxNsxT) 를 얻습니다(overlap-addDPRNN에 나오는 내용인데 나중에 논문리뷰하면서 정리할게요). 이렇게 얻어진 representation을 두 개의 ReLU activation을 적용한 feed-forward layers를 통해 각 speaker에 대한 maskm_k를 얻게 됩니다.

 

SepFormer Block

이제 메인블록이라고 할 수 있는 SepFormer Block에 대해서 자세히 알아보겠습니다. SepFormer Block은 위 Mask Net 그림의 가운데 부분에서 확인할 수 있습니다. SepFormer BlockDPRNNdual-scale approach를 사용해서 short-termlong-term dependency를 모두 가지도록 디자인 되었습니다. 위에 그림에서 보면 transformer가 두 종류 있습니다. 첫 번째 transformerIntraTransformer(IntraT)short-term dependency를 위한 모델이며 InterTransformer(InterT)long-term dependency를 위한 모델입니다. 여기서 IntraTh의 두 번째 차원에 대해 processes되므로 각각의 chunk에 대해서 독립적으로 작동하여 각 chunk내의 short-term dependency를 모델링 합니다. 이렇게해서 나온 값에 대해서 마지막 두 차원을 permute합니다(여기서 permutepytorchpermute와 같은 말이예용). 왜냐하면 현재 h의 차원은 FxCxNc 인데 여기서 마지막 두 차원을 서로 바꾸면 FxNcxC가 되고 InterT 또한 두 번째 차원에 대해서 processes되면 chunk간에 대해서 작동해서 결과적으로 long-term dependency를 학습할 수 있기 때문입니다. 이렇게 구해지는 SepFormer BlockN번 반복합니다. 아래의 식은 SepFormer의 전체 식을 나타낸 것입니다. 이 식에서 Ppermute에 해당합니다.

이제 IntraInter Transformer에 대해서 자세히 살펴보겠습니다. Mask Net 그림에서 마지막 그림이 IntraTInterT에서 사용되는 Transformer 구조입니다. 그림의 구조를 보면 ‘Attention is all you need’에서 사용되는 transformer의 구조와 비슷한 것을 볼 수 있습니다.

 

우리는 이제부터 변수 z를 사용해서 transformer의 입력을 나타낼 겁니다. 아래 수식은 ‘Attention is all you need’ 논문에서 소개된 positional encodingsinusoidal 함수 einput z에 적용한 것을 나타냅니다(Transformer의 원본 논문과 정말 비슷하죠?).

이렇게 positional encoding을 적용해주는 이유는 원본논문에서의 이유와 비슷한데 sequence를 구성하는 다양한 element들의 순서에 대한 정보를 적용하여 결과적으로 음성 분리 성능을 향상시킨다고 합니다. 즉 입력 sequence에 대한 순서가 중요하다는 것입니다(이는 원본논문과 비슷하죠?). 그러고 나서 원본논문과 마찬가지로 정규화를 진행한 다음 multi-head attention을 진행합니다(원본논문과 완전 똑같죠?). 이에 대한 수식은 아래와 같습니다.

다음으로 원본논문과 같이 feed-forward network를 통과시켜줍니다. 여기까지의 수식이 다음과 같습니다.

이로서 마지막 전체 수식은 아래와 같이 나타납니다. 여기서 g^K()transformer layerK layer를 의미합니다. transformer layer가 그림처럼 한 개가 아니라 InfraTInterT에 대해서 여러 개라는 것을 의미하겠죠? 아래의 수식을 보면 residual connection이 적용된 것도 알 수 있는데, 이는 gradient backpropagation을 개선하는 효과를 가져 온다고 합니다(개인적인 생각이지만 입력 z를 다시 마지막으로 끌고 와서 덧셈연산을 해줌으로서 입력에 대한 정보를 전파해주기 위해 사용하는 것 같아요).

Decoder

마지막으로 decoder를 알아보겠습니다. Decoder는 아주 간단한 구조로 구성되어있습니다. 그저 transposed conv layer로 구성되어져 있습니다. 여기서 stridekernel sizeencoder와 같습니다. 그리고 decoder의 입력으로 사용되는 값은 source kmask m_kencoder h의 출력을 서로 element-wise multiplication을 한 값입니다. Decoder의 수식은 아래와 같습니다. 이 식에서 s-hatk개의 분리된 값을 나타냅니다. , mixed signal에서 speaker의 수만큼 분리된 speech signal이 됩니다.

 

 

결론

본 논문에서는 SepFormer (Separation Transformer)라는 음성 분리를위한 새로운 신경 모델을 제안했습니다. SepFormer는 트랜스포머로만 구성된 마스킹 네트워크를 사용하는 RNN 프리 아키텍처입니다. 여기서 마스킹 네트워크는 multi-scale approach를 사용하여 short-termlong-term dependency를 모두 학습합니다.

 

데이터 셋

이제부터는 데이터 셋에 대해서 알아보겠습니다. 우선 데이터 셋은 WSJ0-2mixWSJ0-3mix 데이터 셋을 사용합니다. 각 데이터 셋은 WSJ0 말뭉치에서 발화를 무작위로 믹싱해서 생성됩니다. 2mix2명의 화자 3mix3명의 화자의 발화를 무작위로 믹싱하는 것입니다.

 

여기서 짧게 데이터 셋에 대해서 설명하자면 다음과 같습니다. 옛날에(1991) DARPA에서 대규모 어휘 음성 연속 시스템(CSR)의 연구를 지원하기 위해서 새로운 corpus를 구축하기 시작했어요. CSR corpus들은 주로 Wall Street Journal 뉴스 기사의 machine-readable corpus 로부터 가져온 문장들을 읽어서 데이터를 만들었다고 해요. 이렇게 만들어진 데이터 셋이 WSJ0WSJ1이예요. 그렇게해서 만들어진 WSJ text corpus에서 5000 ~ 20,000 단어 정도를 읽을 텍스트로 정해요. 이렇게 만들어진 데이터 셋이 WSJ0이예요.

 

다시 논문으로 돌아와서 설명하겠습니다. 이렇게 만들어진 데이터 셋의 예시를 아래에서 들어보실 수 있습니다.

 

데이터는 train, validation, test set으로 나누어지는데 각각 30, 10, 5시간으로 구성되어있습니다. 또한 traintest set의 화자는 다르게 구성되어 있다고 합니다(이건 조금만 생각해봐도 당연한 말입니다. 같은 화자로 구성되어져 있으면 당연히 화자 한 명에 대해서 오버피팅되어져 있으면 뉴럴네트워크는 구분을 잘 할 것이기 때문입니다). 또한 waveform8KHzsample 했습니다.

 

 

 

!!잠깐!! 여기서 8KHZsampled 했다고 하는데 이것이 무슨 의미일지 알아볼게요. 아시는분은 굳이 안보셔도 됩니다.. 위의 그림을 살펴봅시다. 먼저 가장 왼쪽의 파형은 아날로그를 나타냅니다. 즉 자연에서의 소리라고 할 수 있습니다. 우리는 이를 가운데와 같은 디지트한 판에 찍어내고 싶은 겁니다. 가운데 그림을 다시 설명해 드리겠습니다. 먼저 x축의 sample rate1초동안 지나가는 사운드 신호의 샘플 수를 의미합니다. 결국 1초 길이의 사운드를 얼마나 많은 샘플로 나눌 것인가를 의미합니다. Y축의 bit depthsample rate로 결정된 각 샘플에 담긴 정보의 양을 의미합니다. 만약 16비트 컴퓨터라면 2^16=65,536개의 서로 다른 정보를 의미합니다. 그렇다면 y축으로 65,535개의 구분선이 생긴다는 의미로 다르게 받아드릴 수 있습니다(만약 구분선이 3개면 2개의 구간이 생기죠?). 그래서 만약 16비트 컴퓨터이고 8KHzsampled 했다면 아날로그 신호를 1초동안 8000 x 65,535개의 격자로 이루어진 디지털판에 찍었다는 의미입니다(이해가 쏙쏙 되죠?).

위의 그림처럼 격자가 더 많아질수록 아날로그 신호를 더욱 정교하게 컴퓨터로 옮길 수 있습니다.

 

Reference

arxiv.org/abs/2010.13154

 

Attention is All You Need in Speech Separation

Recurrent Neural Networks (RNNs) have long been the dominant architecture in sequence-to-sequence learning. RNNs, however, are inherently sequential models that do not allow parallelization of their computations. Transformers are emerging as a natural alte

arxiv.org

반응형