728x90

이번에 진행할 논문은 Translatotron: Direct speech-to-speech translation with a sequence-to-sequence model 이다. Google Research에서 published 하였으며, https://arxiv.org/abs/1904.06037 에서 확인해볼 수 있다.

(그림을 업로드하다가 중간에 렉이먹어서 도중에 쓴 것들이 다 날아갔다... 다시 씁니다ㅜ.ㅜ)

 

Intro, Related Work

한국인과 미국인이 서로 대화를 나누려 한다. 하지만 이 둘은 서로간의 언어 정보에 대해 하나도 모른다고 가정하겠다. 즉 한국인은 영어를 하나도 할 줄 모르고, 미국인도 마찬가지라고 가정한다.

 

한국인이 미국인에게 대화를 걸려면 1) 말을 하고, 2)이를 음성 인식하여, 3)인식 된 text를 번역하고, 4)얻은 text를 음성으로 합성해야 대화가 가능하다. 너무나 복잡하다. 사실 우리는 이 방법을 사용하여 외국인들과 대화를 하고 있지 않은가? 그만큼 우리는 대단한 존재일 수 있다.

 

어찌됐든, 위의 복잡한 단계를 해결할 중요한 이유가 하나 더 있다. 바로 중간에서 잘못 된 오류를 범할 경우, 마지막으로 음성 합성 된 결과값이 미국인에게 잘못 전달 될 수 있다. 예를 들어,

 

한국인: 제가 저기에 가려면 어떻게 해야하나요?

1) 음성 인식: 제가 저기에 가려면 어떻게 해야하나요?

2) 번역: How can I get there?

3) 음성 합성: ~~

4) 미국인에게 전달

 

이렇게 잘 전달되면 문제가 없다. 하지만 가령,

 

2) 번역: Can I go there?

 

라고 번역이 잘못 되었을 경우, 미국인은 yes라 할 것이고, 한국인은 pardon?을 외칠 것이다.

 

이러한 복잡한 문제를 해결한 연구 결과가 있다. 바로 지금 review할 논문인데, translatotron이다. 내가 생각한 이 논문의 novelty는 서로 다른 언어간의 음성 번역을 한 번에 진행 한 시발점(starting research) 이라고 생각한다.

 

딥러닝은 많은 발전이 이루어 졌고, 음성 인식, 번역, 음성 합성에서 굉장한 성능을 내고 있다. 하지만 위의 사례처럼 이용하려면 음성 인식 -> 번역 -> 합성이 이루어져야 한다. 하지만 이 논문은 이것을 한 번에 다 해내고 있다. 심지어 목소리까지 바꿀 수 있다.

 

이 논문의 실험은 스페인어-영어 데이터셋으로 진행하였다.

 

자 그럼 이 논문에 대해 알아 가 봅시다.

 

 

Method

모델 구조는 별도로 훈련 된 여러 구성 요소로 구성된다. 즉 이 모델은 end-to-end가 아니고, pretrain된 것들도 사용한다.

전체 모델 아키텍처는 아래 그림과 같다.

 

- Primary task: target spectrogram을 생성하는 attention based Seq2Seq

- Speaker Encoder: 이 부분은 선택적으로 쓰이는 부분인데, 대상의 목소리를 원할 경우 바꿔서 번역할 수 있음

- Vocoder: target spectrogram을 시간도메인인 waveform형태로(음성) 바꾸는 부분

- Auxiliary tasks: source와 target의 phoneme sequence 예측 하는 부분

 

차례차례 보도록 해봅시다.

 

- Primary task, Encoder

먼저 Translatotron의 Encoder부분은 아래 빨간 표시한 곳이다.

Translatotron Encoder Part(빨간 표시)

Encoder의 input은 80channel log-mel-spectrogram이 사용된다. 여기에서 80channel은 mel을 80 dimension으로 뽑았단 얘기이다. librosa의 n_mels와 같다. 그렇게 뽑은 mel-spectrogram에 log값을 취해준 것이다.

그 다음 8-layer Stacked Bidrectional LSTM을 사용한 것으로 나와있다. BLSTM을 8개 쌓은것이다. 이 최종 output은 speaker encoder를 사용했을 경우 i-vector와 concat하여 decoder ouptut과 transformer 에서 사용되는 multi-head attention을 통해 encoder-decoder간 scaled-dot product attention이 이루어진다. speaker encoder가 사용되지 않았을 경우엔 저 concat 부분은 사용되지 않는다. 중간에 Auxiliary recogniton tasks로 가는 화살표가 있는데 이것은 마지막에 설명할 예정

 

- Primary task, Decoder

Translatotron Decoder Part(빨간 표시)

Spectrogram Decoder는 Text-to-Speech에서 좋은 평가를 받고 있는, 마찬가지로 구글에서 published 한 Tacotron2 구조와 유사하다. Pre-net, Autoregressive LSTM, Post-net 을 포함하고 있다. 여기에서,

 

Pre-net: 2-layer FC

Autoregressive LSTM: Bi-directiona LSTM(Tacotron2 encoder), LSTM(2-Uni-directional layers in Tacotron2 decoder)

Post-net: 5-layer CNN with residual connections 으로서, mel scaled filter bank spectrogram을 개선하는 역할

 

로 정의할 수 있다.

Tacotron2 model architecture

Tacotron2의 Encoder는 text를 character 단위의 embedding을 하고, Pre-net을 거친다. Pre-net은 정확히,

Pre-net: (Dense -> ReLu -> Dropout) X 2

 

로 이루어져 있다. 그 후, CBHG를 통과하는데,

 

CBHG: Conv1D Bank -> Max pooling -> Conv1D projection -> Conv1D layer, Conv1D layer + First input(이 부분이 residual connections) -> Highway Network(4 layers of Dense - ReLu) -> Bidirectional RNN

으로 이루어져 있다. Encoder의 최종 결과는 embedding result가 나온다. 위의 모든 process를 mel-spectrogram과 최적의 alignment를 하기 위해서라고 생각하면 좋을 것 같다. 너무 복잡하지만..

 

Tacotron2의 Decoder는 Encoder와 거의 비슷한데, RNN의 구조를 띄고 있다. 즉 각 step마다 output (1개의 spectrogram frame)을 출력한다. 그리고 autoregressive 한 형태이므로, 이전 step을 사용하여 현재 step의 frame을 예측한다. 매 step마다 encoder의 context vector와 attention을 통해 output 1개를 얻는 것이다. 최종적으로 projection 하는 decoder의 hidden layer의 output은 2개의 256으로 이루어진 FC가 를 가장 먼저 통과한다. 즉 Dense 형태로, (256, 1)의 형태를 얻는다.

 

그 후 LSTM과 이루어진 context vector는 80개의 neurons을 갖는 FC로 통과한다. 이게 바로 mel-spectrogram의 channel인 n_mel와 동일하다! 이 최종 부분이 spectrogram을 frame by frame으로 예측한다. 그 후 PreNet으로 다시 들어가고, linear scale spectrogram을 얻는다. 아마 Reduction Factor 를 3으로 사용했던 것 같은데, 그렇다면 3개의 predicted spectrogram을 사용하여 1개의 linear scale spectrogram을 얻는다.

 

attended ecoder outputs

Attention 부분에 대해 조금 더 언급하고 싶어서 수식을 캡쳐했다. context vector Ci 는 encoder의 output(h)와 attention weights(alpha)의 product로 연산되는데, alpha_ij는 아래의 식에 의해 연산된다.

 

Attention weights

자 많이 보던거 나왔죠? exp/exp합은 softmax이다. 대충 눈 도장 익히면 아~확률 구하는구나 라고 생각하면 편하다.

e_ij = vaT tanh(Wsi-1 + Vhj + Ufi,j + b) 인데,

si-1: decoder LSTM의 이전 hidden state

alpha_i-1 : 이전 attention weight

hj: j번째 encoder hidden state

W, V, U, va 그리고 b: 학습시 사용된 parameter들

fi, j: 공식에 의한 계산된 위치

fi: F * alpha_i -1

F: CNN 연산

이다.. 복잡한데, 제 설명이 부족하시다 생각하신 분께서는  Tacotron2 와 attentive-attention mechanism을 읽어보시는 것을 추천드립니다.

 

정리하면, Tacotron2는 encoder에서 text를 입력받아 Pre-net, CBHG를 통해 character embedding result를 얻고, decoder에서는 80channel의 log-mel-spectrogram 입력을 받아 encoder-decoder attention을 통해, 256 dense로 1개를 예측하고, 다시 그 값이 80 dense를 통해 80channel의 spectrogram이 통과한다. 이 때, frame by frame, autoregressive방식으로 진행되고, 위의 output은 Post-Net을 통과하여 linear scale spectrogram으로 얻는다. 이게 다 ~~끝나고 vocoder를 통해 음성이 복원된다.

 

Translatotron도 유사하다. 이 떄, 4 or 6 LSTM이 성능이 좋다고 언급되어있다.

Translatotron의 decoder에서의 예측은 1025dimension의 log spectrogram의 frame을 예측한다. 각 디코딩 단계마다 2개의 스펙트로그램 frame을 예측한다. 이렇게 사용하는 이유는 음성 신호가 연속성을 띄고 있기 때문이고, decoder의 부하를 줄여주기 때문이다. 

 

쓰고 보니 Tacotron2 리뷰를 따로 안해도 될듯 ㅎㅎ

 

- Vocoder

아래 부분의 빨간색 표시가 Vocoder 부분이다.

Griffin-Lim을 기본적으로 사용하였다. 하지만 MOS테스트에서 음성의 자연성을 평가할 때 WaveRNN을 사용하였다. Griffin-Lim은 CPU로 돌릴 수 있지만, WaveRNN은 시간이 더 오래걸리고, GPU 기반이다. 그러나 음성 복원 품질은 WaveRNN이 더 좋기때문에 이를 이용하여 테스트한 듯.

 

또한 Vocoder에서 reduction factor를 사용하여 감소 계수 2로 frame을 계수만큼 예측한다. 이 계수만큼의 log-spectrogram을 생성한다. 이렇게 복원된 음성을 직접 들을 수 있다. 

 

- Speaker Encoder

이 부분에서는, D-벡터를 뽑아서 사용한다. D-벡터는 Speaker Independent System의 특징인데, 화자별 차이의 벡터값 정도로 생각하면 될 것 같다. Speaker vefirication를 위한 pretrained 된 것을 여기에서 사용한다.

 

위 논문에서, 851k 스피커, 8개 언어에 대한 정보를 사용했다고 밝혔다. training 시에는 사용하지 않았고, inference에 합성할때에만 썼다고 한다. 256차원으로 값이 나오면, 이를 linear projection을 통해 16으로 줄이고, 마지막 encoder BLSTM layer의 output과 concat했다고 밝혔다. 오직 tanfer task에만 사용되었다.

 

- Auxiliary recognition tasks

각각 attention이 구성되어 있는 소스 및 대상 음소 시퀀스를 예측하는 파트이다. BLSTM의 마지막 값이 여기에 연결된다. single head attention이 있는 2 layer LSTM으로 구성되어 있다. 여기에서, 한 입력은 소스 음소 (스페인어) 이고 다른 입력은 대상 (영어) 이다. signal-to-signal의 변환이 모델에서 버거워 하기 때문에, multitask learning 기법을 사용하여 음성을 phoneme 단위로 인식하여, 이 정보를 decoder 단에 전해주어 음성 변환을 도운 task라고 보면 되겠다. 3개의 loss가 사용되었다. 이 task를 통해 BLEU score가 개선되었다고 밝히고 있다.

 

 

Experiments & Results

아래 그림은 사용된 Hyperparameter들이다.

결과는 실제로 들어보는 것이 좋을 것 같다. 아래 사이트에서 들을 수 있다.

 

https://google-research.github.io/lingvo-lab/translatotron/

 

Speech-to-speech translation

Audio samples from "Direct speech-to-speech translation with a sequence-to-sequence model" Paper: arXiv Authors: Ye Jia *, Ron J. Weiss *, Fadi Biadsy, Wolfgang Macherey, Melvin Johnson, Zhifeng Chen, Yonghui Wu. Abstract: We present an attention-based seq

google-research.github.io

 

 

 

Conclusion

저자가 정리한 부분은 아래와 같다.

- 한 언어에서 다른 언어로 된 음성으로 직접 번역하는 최초의 모델

- 향후 연구점의 출발점으로 고려

- training하는 동안 speech transcripts를 사용하는것이 중요하다고 함

 

아마도 signal-to-signal간의 학습이 잘 안되었기 때문이지 않았을까 싶다.

 

내 느낌점은, 처음 이 논문이 나오고, demonstration을 들어보고나서 정말 놀라웠었다. 작년 5월에 처음 봤는데 나는 무슨 연구를 하고 있는 건가 싶었다. 새로운 길을 개척한 논문이라고 평가하고 싶다. 벌써 8개월 정도가 지났는데 어떤 성능을 갖는 end-to-end 가 나올지 기대된다.

 

728x90

+ Recent posts