728x90

이번에 리뷰를 진행할 논문은 Parrtron 이라는 논문인데, Google에서 작성한 논문이다. 이전에 리뷰한 논문에서의 저자가 1저자로 작성한 논문이다.  https://arxiv.org/abs/1904.04169 여기에서 확인할 수 있다.

 

 

Abstract & Intro

이 논문은 Translatotron처럼 중간 이산 표현(text)를 통하지 않고, 입력 spectrum을 다른 spectrum으로 직접 매핑하는 end-to-end 음성 변환 모델이다. 인코더, 스펙트로그램 및 음소 디코더로 구성 되며, 보코더가 음성으로 변환하는 역할을 맡는다. 악센트, 프로소디 및 배경 소음에 관계없이 모든 입력 스피커의 음성을 고정 된 억양과 일관된 조음 및 단일 표준 대상 스피커의 음성으로 정규화하도록 학습하였고, 또한 청각 스피커(목소리에 장애가 있는)로부터의 음성을 표준화하도록 조정하였으며, 이는 성공하고, 이를 통한 비정형 목소리를 음성 인식기를 통한 WER measurement및 무작위 대상으로부터의 Mean Opinion Score (MOS) 측정을 통해 제안한 모델이 명료도 및 자연스러움이 얼만큼 개선되었는지 보여주고 있다. 마지막으로 화자 8명에 대하여, 1명과 나머지 7명 중 1개를 합성하고, 잡음(배경음)을 합성한 뒤 분리하는 것을 보여준다. 

 

Model Architecture

 

먼저 이 모델의 목적은, "소스 음성을 입력으로 넣고, 대상 음성을 출력으로 생성/합성하는 end-to-end Seq2Seq model architecture"를 사용하여 타겟 신호를 직접 생성하며 처음부터 합성하는 end-to-end architecture이다. 즉, 화자 특성을 포함하여 모든 비언어적 정보를 투사하고 누가, 어디서, 어떻게 말하는지가 아니라 말하는 내용만 유지 하는 것이다. 이렇기 위해서는 텍스트로부터 indenpendent한, N:1 음성 변환 작업에 해당한다. 다르게 말하면 화자는 여러명이고 target 음성의 화자는 1명이라는 것이다. 사용되는 데이터는 쌍을 이루는 입력/출력 음성 발화의 병렬 모음이 필요하다.

 

Google에서는 Parallel WaveNet 기반 TTS 시스템을 이용하여 손으로 작성한 script로 부터 TTS를 합성하여 target set을 만들었다. TTS를 사용함으로서 다음을 보장 할 수 있다고 밝히는데, 1) 대상은 항상 일관된 스피커 및 악센트로 말하고, 2) 배경 소음이나 불쾌감이 없으며, 3)마지막으로, 필요한 만큼의 데이터셋을 합성할 수 있다.

 

Google은 2천 2백만 건의 영어 음성으로 구성된 30,000시간의 교육 세트에서 모델을 훈련시켰다고 한다. 이 모음을 사용하여 TTS 시스템을 통한 여성 음성으로 대상 발화를 생성했다고 한다. (엄청난 데이터 양...)

 

이제부터 모델 아키텍처에 대해 설명한다.

Parrtron model architecture

전체 모델 아키텍처는 이렇다. Encoder, Spectrogram decoder, ASR decoder가 사용되고 있다. 

 

 

 

1) Encoder

Parrotron encoder part

빨간색 표시한 부분이 Encoder이다. Encoder에서 소개드릴 내용이 많다. 우선 이 모델에서 사용되는 핵심 아키텍처는 최근의 Attention 기반 end-to-end ASR 모델(1: Listen, Attend and Spell, 2: Spectral and Prosodic Transformations of Hearing-impaired Mandarin Speech)과 Tacotron(1: Tacotron2-Natural TTS synthesis by conditioning WaveNet on mel spectrogram predictions, 2: Tacotron-Towards end-to-end speech synthesis) 과 같은 TTS 모델을 기반으로 한다.

 

Parrotron의 기본 encoder 구성은 "Sequence-to-sequence models can directly translate foreign speech" 와 유사하며, 일부 변형이 되어있다. 위에 언급한 reference 논문에 대해 간단히 모델 부분만 체크하겠다. (https://arxiv.org/abs/1703.08581)

 

Sequence-to-sequence models can directly translate foreign speech

우선 이 논문은 음성 인식하는 논문이다.

1-1> Encoder

- 이 논문의 인코더 입력은 80channel log mel spectrogram이다.

- 25ms로 frame length를 두었고, 10ms hop을 사용하여 40%만큼 겹쳤다. 90 symbol로 출력하는데, phoneme기반의 음성인식이다.

- Encoder는 8개의 layer로 이루어져있으며, Time X 80 X 3 tensor형태이다. 

- 그 후, 2개의 CNN + ReLU 활성화를 통과한다. 여기에서 각 CNN은 32kernels로 이루어진 3 X 3 X에서 time X frequency이다. 이 CNN의 stride 는 2 X 2를 사용하였고, 결국 total factor는 4로 downsampling된다.

- 이후 Batch Normalization을 적용한다. CNN~Batch까지 다른 관점에서 바라보면 vgg랑 비슷하다고 볼 수 있지 않을까?

- 그 후, single bidrectional convolution LSTM (CLSTM)을 통과하는데, 이 때 filter 가 1 X 3 으로 통과한다.

- 마지막으로, 각 방향당 256크기의 LSTM을 갖는 BiLSTM을 통과하는데, 이 후 512차원의 Dense를 통과한다. Dense를 통해 Linear Projection을 하고 (512), Batch normalization과 ReLU가 함께 쓰인다.

- 즉 최종 Encoder의 ouptut은 512-dimensonal의 인코더 representation으로 나온다.

 

1-2> Decoder

- 64-dimensional의 word embedding된 y_{k-1}가 입력인데, 즉 text가 입력이다. 음성~ -> 인식 이므로 음성이 text로 바뀜. 심볼은 이전 time-step을 이용하며, 512-dimensional의 attention context vector를 사용한다.

- 128개의 Single hidden layer (attention)으로 이루어져있다.

- 이것들이 256-dimensional의 4개의 Unidirectional LSTM으로 통과한다.

- 마지막의 attention context와 LSTM output은 concatenation되어 출력 단어(vocabulary)를 예측하는 softmax로 통과한다.

 

1-3> Etc

- 9.8 parameter들을 가지고 있다. 생각보다 크지 않다.

- 전형적인 Seq2Seq으로, Teacher forcing을 사용하여 batch 당 64개의 utterances들을 구성하여 사용하였다.

- Adam optimizer를 사용하여 10개의 copy에서 비동기적 확률론적 경사하강(Stochastic gradient descent)를 사용하였다.

- 초기 lr은 1e-3이고, 백만 step 지나고 factor of 10을 decay한다.

- Beam search를 사용하였으며, Beam width는 3이며, 어떤 Language Model도 사용하지 않았다.

여기까지가 "Sequence-to-sequence models can directly translate foreign speech"의 Model Architecture와 Experimental Setup 부분을 정리한 내용이다.

 

다시 Parrotron으로 돌아가서,

 

16 kHz의 샘플링 된 waveform으로부터, 125-7600 Hz의 범위에서 80-channel log mel-spectrogram을 추출하였으며, 이 때, Hanning 윈도우를 사용하였고, 50ms 프레임 길이, 12.5ms 프레임을 겹쳤고, 1024-STFT 계수를 사용하여 추출하였다. (기존 위에 ref 삼은 논문보다 겹치는것을 줄였다.)

 

- 입력: 80channel log mel-spectrogram

- 2-layers CNN with 32 kernels (ReLU + BatchNormalization)

- Convolutional Bidirectional LSTM with 1x3 filter ==> 이를 통해 time step 마다 주파수 축을 통해서 뭉친다.

- 256-dimensional 3-layers LSTM

- 512 Dense + ReLU + Batchnormalization

- Get representation of Encoder input

 

위의 6줄이 Encoder의 구성이다.

 

 

2) Decoder (Spectrogram decoder)

Parrotron decoder part

최대한 쉽게 설명하기 위해 구분하여 진행해보자면,

- 디코더 타겟은 1025-dim STFT이며, 왜 이러냐면... NFFT를 1024으로 사용하고 hop을 25%사용했기 때문에 1025차원의 Spectrum을 얻는다. 마지막 1은 허수부분이다.

- Autoregressive RNN을 사용하여 decoder를 구성하였으며, 1번의 decoder step당 1 frame씩 인코딩 된 입력 sequence에서 출력 spectrogram으로 predict를 진행한다.

- previous(이전의) decoder time step으로부터의 예측은 256 ReLU가 연결된 2개의 layer를 포함하는 Pre-Net을 통과하는 것이 attention이 잘 먹힌다고 밝혔다. ***여기에서 Pre-Net은 이전에 review한 논문에 자세하게 나와 있음***

- Pre-Net 출력과 attention context vector가 연결되어 1024 unit의 2-layers Unidirectional LSTM을 통과함

- LSTM 출력과 attention context vector을 concatenation하여 Linear transformation을 통해 target spectrogram을 예측한다.

- 마지막으로, ***마찬가지로 이전 논문에서의 Post-Net이 나옴*** 5-layers CNN Post-Net을 통과한다. 각각의 Post-Net은 5 x 1 형태의 512 filter를 갖고, BatchNormalization도 있으며, tanh activation 을 통해 출력 된다.

- 예측된 spectrogram에서 오디오 신호를 합성하기 위해 Griffin-Lim 알고리즘을 사용하여 예측된 magnitude와 일치하는 phase를 추정한 뒤 Inverse Short-Time Fourier Transform을 통해 waveform으로 변환한다.

- Griffin-Lim은 음질이 그닥 좋지 않으므로, Griffin-Lim보다 시간이 오래걸리지만 음성의 품질이 더 좋은 WaveRNN을 사용하여 사람들에게 평가하였다.

 

3) ASR 디코더를 이용한 Multitask Learning

Parrotron ASR decoder part

앞서 Translatotron에서의 구조와 비슷하다. 이 ASR decoder의 목적은 기본 언어의 높은 수준의 표현을 동시에 배우기 위해 인코더 네트워크에 multitask learning 기법을 사용하여 공동으로 train을 하면, encoder 의 음성의 feature를 더 잘 배운다고 한다. 쉽게 말해서, Signal-to-Signal로의 변환이 어렵기 때문에 중간에 ASR 디코더를 달아서 음성 부분을 학습시키는 것이다. 인코더 latent 표현에 따라 출력 음성의 (grapheme:자소 or phoneme:음소) transcript를 예측하는 역할을 맡는다. 이러한 multitask learning으로 train된 인코더는 기초적인 transcript에 대한 정보를 유지하는 입력의 latent 표현을 학습하는 것으로 생각할 수 있다.

 

ASR decoder의 input은 이전 step의 grapheme에 대한 64-dimensional 임베딩과(ASR decoder part) 512-dimensional의 attention context를 concatenate하여 생성된다.  그 후 256 unit LSTM layer로 전달 되고, 마지막으로 attention context와 LSTM의 output은 concatenated되어 softmax로 전달되고, 그 후 phoneme으로 출력 될 확률을 예측한다.

 

 

Application

 

1) 음성 정규화

이 실험은 임의의 speaker로 부터 사전 정의 된 target의 음성으로 변환된 음성을 정규화하는 목적이다. 임의의 speaker는, 크게 말해서 화자 별 특성에 따라 같은 script를 말해도 신호의 크기 및 세기, 잡음, 명료도가 다를 수 있다. Google은 input speaker가 누구든지 mapping된 target data로의 변환에 정규화하는 것을 목적으로 실험을 진행했다. 

 

제안한 model의 output을 원래 입력 신호의 lingustic information을 보존하는지 평가하기 위해 음성 명료도를 측정하고(MOS), ASR 엔진을 사용하여 단어 오류율인 Word Error Rate (WER)를 평가했다. ASR 엔진은 WaveRNN으로 진행한 결과에 대해서만 평가했다. 

 

보유한 음성의 ASR WER은 8.3%이라고 한다. 표에는 기입이 안되어 있다. 고품질 TTS 모델을 사용하여 ASR 엔진으로 평가하면 WER이 7.4%이라고 논문에 밝혀져있다.

 

위의 Table 1에서 맨 윗줄은 보조 ASR decoder가 없는 결과이다. 27.1%의 비교적 낮은 WER을 갖고 있다. 두번 째 줄인 Grapheme 단위로 예측하는 ASR decoder를 추가할 경우 19.9%로 약 7.3%가량 크게 개선되었다. Phoneme 단위로 ASR decoder를 달아도 맨 윗줄과는 확연한 차이가 보이는데, CLSTM 대신 decay(parameter 미세 조정)를 사용하며 LSTM을 2개 추가할 경우 가장 좋은 성능인 WER 17.6%을 달성하였다.

 

논문에서, CLSTM을 제거하여 매개 변수 수를 줄이면 성능이 크게 저하되며, 그러나 CLSTM 대신 2개의 additonal BLSTM을 사용하면 약간 향상 되는 동시에 모델이 단순화 된다고 한다. 이것이 마지막 줄의 결과이다. 

 

위의 Table 2는 강력한 악센트와 배경 소음이 포함 된 보다 까다로운 테스트 셋에 대한 MOS 평가 와 ASR 성능의 평가 결과이다. 이 표에서 WER이 높은것이 중요한 것이 아니라, Real speech와 Parrotron의 결과에 대한 WER의 큰 차이가 없음으로 인해 언어적 내용을 보존하고 있음을 확인한다. 라고 주장하고있다.

 

정규화 실험 중 마지막으로, 모델이 동일한 TTS 음성으로 정규화 된 음성을 지속적으로 생성하는지에 대한 증명을 Table3을 통해 하였다. 8명의 영어 native들에게 발화된 model output 음성을 주고 평가하였는데, 질문 내용은 

- 5점 척도에서 Parrotron 음성이 TTS 음성과 얼마나 유사한가? ==> 4.6점

- 출력 음성에서 배경 소음이 있는가? ==> 0%

- 출력 음성에서 불일치가 포함되어 있는가? (Transcript와 다른지에 대한 평가인듯) ==> 0%

- 출력 언어는 일관된 조음, 표준 억양 및 prosody를 사용하는가? ==> 83.3%

 

위와 같고, 위와 같은 결과를 얻었다. 

 

2) 청각 장애 연설의 정규화

위의 정규화 모델을 사용하여 standard 음성이 아닌, 청각 장애인을 유창한 음성으로 변환 할 수 있는지에 대한 실험이다. 이를 통해 사람들의 음성을 통한 의사 소통을 향상시키는 것으로 사용 될 수 있다고 주장한다.

 

실험은 러시아에서 태어난 10대에 청각장애를 소유한채로 영어를 배운 사람을 대상으로 진행된다. 

요약하면, 표준어로부터 학습된 Parrotron 은 위의 청각 장애 언어르 완전히 정규화 하지 못하지만, 이를 해결 하기 위해 Google은 모든 매개 변수를 조정하고 모든 파라미터를 청각 장애 음성으로 적응(인코더만 미세 조정, 디코더와 음소 디코더 파라미터 모두 hold)시켰다. 그리하여 아래 표와 같은 결과를 얻었다.

 

첫째 줄의 Real speech는 청각 장애의 언어이며, MOS가 매우 낮고, 위에서 사용된 ASR 엔진의 WER은 89.2이다. 즉 워드 단위로 100개가 입력 될경우 10.8개 밖에 못맞춘 것이다.

두번째 줄의 Parrotron (male)은 위의 정규화 시스템을 그대로 사용했을 경우, MOS는 조금 나아지지만 마찬가지로 음성 인식 결과는 더 나빠졌다.

2)에서 제안한 fine tuning 기법(적응)으로 뽑은 결과는 MOS에서 1점 가량의 상승을 보였으며, WER도 일반인과 같은 성능을 내고 있다. 놀라운 결과라고 볼 수 있다.

 

위의 실험을 통해, 모든 fine tuning 전략이 음성을 이해하기 쉽고 훨씬 더 자연스러운 speech로 이어진다는 것을 밝혀냈다. 최고의 fine tuning은 모든 매개 변수를 조정하는 것이라고 논문에서 언급하고있다.

 

3) 음성 분리

이 실험은 Parrotron이 다양한 음성 응용에 사용될 수 있음을 설명하기 위해 만든 섹션이라고 한다. 중첩 된 혼합 음성 중 magnitude가 가장 큰 스피커의 신호를 재구성하는 음성 분리 작업이다. 최대 8개의 서로 다른 스피커의 즉각적인 혼합과 잡음(배경)을 넣어서 평가한다.

 

이 섹션은 SOTA separation 모델을 말하는 것이 아니다. 일반화 된 개방형 speaker set으로부터 speech를 생성할 수 있는지 평가하기 위해 분리를 진행한다고 한다. 솔직히 잘 이해가 안된다.

 

Google은 음성 신호의 즉각적인 혼합을 인위적으로 진행하기 위해, train set의 각 target 음성에 대해 1~7개의 발화를 무작위로 선택하여 배경 소음으로 혼합하였다. 백그라운드 발화 수도 임의로 선택된다. 혼합하기 전, 모든 발화를 비슷한 세기로 정규화한다.

 

배경에 대해 무작위로 샘플링 된 가중치 w(0.1~0.5)와 목표 발화에 대한 1-w로 두 신호를 평균화하여 target 발화와 배경 잡음을 혼합하였다. 이로 인해 인위적으로 구성된 모든 발화에서 12.15dB의 평균 SNR이 발생하고, 이에 대한 표준 편차는 4.7이라고 한다.

 

Parrotron이 분리 작업을 할 수 있는지 평가하기 위해 위의 정규화 파트 부분의 학습된 것을 가져와서 혼합 발화를 입력으로 넣고 모델을 훈련 시켜 해당하는 원래의 발화를 생성하는 식으로 진행하였다고 한다. 이를 ASR 엔진을 사용하여 분리 모델의 영향을 평가하였는데, 1) 배경 잡음을 넣기 전의 원래 깨끗한 발화, 2) 시끄러운 잡음인 배경 음과 음성을 혼합 한 후, 3) Parrotron을 실행하여 생성된 출력

형식으로 평가하였다고 한다.

 

위의 표를 보면, 잡음이 많은 세트인 "Noisy"에서의 WER은 33.2%이다. 이를 Parrotron을 사용하여(분리) denoising하면 17.3%의 WER를 얻었다고 한다. (음 근데 사실 이부분은 real time demonstration을 좀 보고 싶다.) 이를 통해 모델이 target speaker의 음성을 보존하고 다른 스피커로부터 분리 할 수 있음을 보여준다고 한다. 

 

 

Conclusion

위 논문에선 이전 논문처럼 End-to-End 로 음성 변환을 진행하였는데, 필수적으로 script가 필요하지 않았다. 하지만 signal-to-signal 간의 음성 변환을 위하여 multitask learning 관점에서 음성 인식 디코더를 auxiliary part로 사용하였고, 이는 성능 개선에 도움이 되었다고 밝혔다. 위 논문의 목적은 "언어적 콘텐츠를 보존하고, 다른 스피커의 음성을 단일 대상 스피커의 음성으로 표준화하는 것" 이다. 청각 장애인의 음성이 model을 거쳐 단일 대상 스피커 (TTS)로 나올 경우, 제안 된 모델의 방법이 WER 개선에 영향을 미쳤다고 밝혔다. 또한 악센트가 많은 음성을 정규화를 통하여 표준 음성으로 변환하여 명료성을 향상시켰다. 추후 input 화자의 특성을 보존하며 정규화 및 개선하는 것을 목표로 두고 있다.

 

가장 큰 novelty는 N:1의 음성 변환을 정규화로 시키면서 좋은 성능을 내고 있다는 점, ASR 엔진을 이용한 명확한 평가를 하였다는 점, 그리고 청각 장애인 데이터셋으로부터 fine tuning을 통해 성능 개선을 했다는 점이라고 뽑고 싶다.

 

추가적으로, Google의 ASR엔진을 쉽게 사용할 수 있도록 API나 weight를 공유해주면 연구용으로 비교 및 사용하기 편할텐데... 아쉽다.

 

 

728x90

+ Recent posts