논문 먹는 여우
VALL-E 리뷰 - Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers (2) 본문
VALL-E 리뷰 - Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers (2)
abujiho 2023. 3. 19. 19:463. Background: Speech Quantization
오디오는 일반적으로 16비트 정수 값의 시퀀스로 저장되므로 raw audio를 출력하려면 생성 모델이 time step 2^16 = 65,536 를 생성해야합니다. 또한 오디오 샘플 속도가 10,000을 초과하면 시퀀스 길이가 엄청나게 길어져 원시 오디오 합성이 더 어려워집니다. 이를 위해서는 정수 값과 시퀀스 길이를 압축하기 위한 음성 양자화가 필요하다. u-법칙 변환은 각 시간 단계를 256개 값으로 양자화하고 고품질 원시 오디오를 재구성할 수 있습니다. speech generative 모델에서는 WaveNet을 사용하지만, 그러나 시퀀스 길이가 줄어들지 않았기 때문에 추론 속도는 여전히 느립니다. 최근 벡터 양자화는 vq-wav2vec 및 HuBERT를 사용하는데 추론 속도가 WaveNet보다 빠르다는 것을 보여줍니다. 그러나 화자 신원이 없어지며 재구성 품질이 낮습니다. AudioLM는 자체 감독 모델의 k-평균 토큰과 신경 코덱 모델의 음향 토큰 모두에서 음성-음성 언어 모델을 훈련하여 고품질 speech-speech 생성을 유도합니다.
µ-law transformation : https://en.wikipedia.org/wiki/%CE%9C-law_algorithm
-> raw audio로 작업하는 것은 계산량이 많기 때문에 speech quantization을 진행한다. quantization에는 WaveNet, vq-wav2vec, HuBERT를 사용하는데 성능이 낮거나 속도가 느리다. AudioLM은 quantization을 활용해서 고품질 speech-speech를 진행했음.
AudioLM은 신경 코덱 모델을 활용하여 음성을 개별 토큰으로 표현합니다. 네트워크 전송을 위해 오디오를 압축하기 위해 코덱 모델은 파형을 개별 음향 코드로 인코딩하고 화자가 훈련 중에 보이지 않더라도 고품질 파형을 재구성할 수 있습니다. 기존의 오디오 코덱 접근 방식과 비교하여 신경 기반 코덱은 낮은 비트 전송률에서 훨씬 우수하며 양자화된 토큰에는 화자와 녹음 조건에 대한 충분한 정보가 포함되어 있다고 생각합니다. 오디오 코덱은 다른 양자화 방법에 비해 다음과 같은 장점을 보인다.
1) 화자 정보와 음향 정보가 풍부하여 HuBERT 코드에 비해 재구성 시 화자 정체성을 유지할 수 있다.
2) 스펙트럼에서 동작하는 VQ 기반 방법과 같은 보코더 훈련에 대한 추가적인 노력 없이 개별 토큰을 파형으로 변환하는 기성품 코덱 디코더가 있습니다.
3)효율성을 위해 시간 단계를 줄여 u-law 변환의 문제를 해결할 수 있습니다
-> audio codec의 장점 : 1) 화자 정보 유지 2) 디코더가 있기 때문에 vocoder를 따로 학습시킬 필요 없다. 3) 효율성 증가
논문은 토크나이저로 사전 훈련된 신경 오디오 코덱 모델인 EnCodec을 사용한다. EnCodec은 입력 및 출력이 모두 24kHz 오디오인 컨벌루션 인코더-디코더 모델입니다. 인코더는 24kHz의 입력 파형에 대해 75Hz에서 임베딩을 생성하며, 이는 샘플링 속도가 320배 감소한 것입니다. 각 임베딩은 residual vector quantization (RVQ)에 의해 모델링되며, 여기에서 그림2 와 같이 각각 1024개의 항목이 있는 8개의 hierarchy quantizer를 선택합니다. 이 구성은 24kHz 오디오 재구성을 위한 6K 비트 전송률의 EnCodec에 해당합니다. 이 설정에서 10초 파형이 주어지면 불연속 표현은750×8항목, 여기서 750=(24,000×10)/320 다운샘플링된 시간 단계이고 8은 양자화기의 수입니다. 다른 비트 전송률 설정을 선택해도 좋습니다. 더 큰 비트 전송률은 더 많은 양자화기와 더 나은 재구성 품질에 해당합니다. 모든 양자화기의 개별 코드를 사용하여 EnCodec의 컨벌루션 디코더는 실제 값 임베딩을 생성하고 24kHz에서 파형을 재구성합니다.

-> Vall-E에서는 토크나이저로 Encodec을 사용한다. (즉, Vall-E는 Encodec을 quntaization token을 input으로 받고 Encodec의 quntaization token을 생성한다.) [(text, 3 sec Encodec qnt token) -> Vall-E -> (target Encodec qnt token)]
4. VALL-E
4.1 Problem Formulation: Regarding TTS as Conditional Codec Language Modeling
주어진 데이터 세트 D = {xi , yi}, 여기서 y는 오디오 샘플이고 x = {x0, x1, . . . , xL} 은 phoneme transcription이다. 사전 훈련된 신경 코덱 모델을 사용하여 각 오디오 샘플을 Encodec(y) = C^(T×8)으로 인코딩합니다. 여기서 C는 Two-dimensional acoustic code matrix이고 T는 다운샘플링된 Speech 길이입니다. acoustic maxtrix c는 행 벡터 c t,:는 8 codes를 나타내고 열 벡터 c :,j 는 j번째 codebook을 표현한다. j ∈ {1, . . . , 8}. quantization 후 신경 코덱 디코더는 Decodec(C) ≈ yˆ 으로 파형을 재구성 된다.
<참고>

* Cokde book 이란?
신호같은 경우 푸리에나 웨이브렛 처럼 basis function의 선형적인 결합으로 표현 가능하다.

위 수식은 데이터 x를 A라는 기저함수의 집합에 s라고 불리는 벡터를 곱해주는 형식인데 여기서 A를 Codebook(또는 Dictionary)라고 부른다. (ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=laonple&logNo=220914873095)
-> 파라미터 소개, 여기서는 codebook이 encodec에서 나온 벡터 값을 표현하는것 같다. <개인 의견>
Zero-shot TTS는 모델이 보이지 않는 화자의 고품질 음성을 합성해야 합니다. 본 논문에서는 Zero-shot TTS를 조건부 코덱 언어 모델링 작업으로 간주한다. Vall-E는 음향 코드 매트릭스 C를 생성하도록 학습합니다. C는 phoneme transcription x 와 3초 음성 프롬프트 C~ 를 조건부로 p(C|x, C˜)를 최대화 한다. (C~ 또한 Encodec에서 생성됨) 이 논문에서는 Vall-E가 각각 phoneme transcription와 음향 프롬프트(3초 녹음 C)에서 내용과 화자 정보를 추출하도록 학습할 것으로 기대합니다. 추론하는 동안 음소 시퀀스와 unseen speaker의 3초 등록 녹음이 주어지면 해당 콘텐츠와 화자의 음성이 포함된 음향 코드 매트릭스(3초 녹음 C)가 먼저 훈련된 언어 모델에 의해 추정됩니다. 그런 다음 신경 코덱 디코더가 고품질 음성을 합성합니다.
-> Vall-E 논문에서는 zero shot TTS를 코덱 언어 모델링 작업으로 간주한다.
4.2 Training: Conditional Codec Language Modeling
신경망 음성 코덱 모델(Encodec)을 사용하면 discrete audio representation으로 동작한다. 신경 코덱 모델의 hierachical 구조를 가지고 있다. 이전 양자화기의 토큰은 화자 식별과 같은 음향 속성을 복구하는 반면 연속 양자화기는 미세한 음향 세부 정보를 학습합니다. 각 양자화기는 이전 양자화기의 residual를 모델링하도록 훈련됩니다. 두 가지 조건부 언어 모델을 계층적으로 설계합니다.
-> Encodec 모델 설명 (이전 quantizer 는 speaker identity를 후자의 quantizer는 acoustic detail를 학습한다.) 이를 잘 모델링 하기 위해서 이 논문은 계층적으로 설계했다.
첫번째 quantizer(Encodec의 첫 줄) c:,1를 생성하기 위해서 언어 모델의 decoder-only autoregressive(AR)로 교육합니다. 입력으로는 phoneme sequence x 그리고 acoustic prompt (3초 음성이 encodec에서 C˜를 뽑은 후 첫번째 줄) C˜:,1 가 들어간다.

c˜:,1 와 c:,1는 concat 되어서 들어간다. 두개를 구별하기 위해서 <sep> 같은 특별한 토큰을 사용하지 않는다. inference할때는 c:,1는 c˜:,1로 autoregrssive하게 predicted 된다.
-> AR 모델 설명 (Autoregressive 한 모델, 여기서 acoutic prompt 도 1층만 사용했음. 아마도 AR 모델에서는 화자 ID에만 집중하고 싶어하는 것 같음 <아님 말구...>)
두 번째부터 마지막 quantizer(Encodec의 2번째 ~ 8번째, c:,j -> j∈[2,8])는 다음과 같이 표현된다. NAR(Non-autoregressive) 언어 모델을 교육합니다. 토큰은 NAR 방식으로 서로 접근할 수 없기 때문에(다른 층을 참고할 수 없다는 뜻인듯 왜냐면 NAR self attention으로 같은 층에 있는 애들은 참고할 수 있기 때문에) 화자 신원을 제한하기 위해 acoustic prompt C^~ 전체를 사용합니다. 따라서 모델의 입력으로 phoneme sequence x, acoustic prompt 𝐂^~, 이전 층에서 추정한 코드북 C :, <j 를 받는다..

-> NAR 모델 설명(AR 과 다르게 acoutic prompt C^~ 를 모두 사용한다.)
4.2.1 Autoregressive Codec Language Modeling
AR 모델에서 토큰을 생성합니다. 이는 phoneme embedding Wx , acoustic embedding Wa, a transformer decoder, prediction layer로 구성되어 있습니다. phoneme prompt는 language model(g2p -> IPA)의 음소 시퀀스를 사용합니다. 모델 입력의 x 와 c:,1 뒤에 두 개의 특수 <EOS> 토큰이 각각 추가됩니다. 토큰에는 sinuous 위치 임베딩을 사용합니다. causal transformer model의 경우 ct,1 는 그림 3 처럼 x 와 c≤t,1 를 attent 할수 있다. AR 모델은 다음 토큰의 확률을 최대화하도록 최적화됩니다. output projection layer의 매개변수를 acoustic embedding Wa 와 공유한다.
-> AR 모델 구성 요소 및 학습 방법 설명

AR 모델에서는 학습 시 audio clip을 추출하지 않습니다(하지만 first layer로도 음성이 생성되긴 함). 훈련 과정은 기존의 causal한 LM 학습 방법이다. 이런 식으로 이전 시퀀스 c<t,1 는 뒤에 나올 c≥t,1 를 생성할때 attention 할 수 있게 됩니다.추론하는 동안 등록된 녹음이 주어지면 등록된 녹음의 음소 시퀀스와 합성을 위한 음소 시퀀스를 함께 연결해야 합니다. 한편, c:,1은 AR 식과 같이 prefix로 사용됩니다. 우리는 expriment에서 이러한 점이 얼마나 효과적인지 확인할 것입니다.
-> AR이 next token을 생성할 때 어떻게 생성하는지 설명
4.2.1 Non-Autoregressive Codec Language Modeling
AR 모델로 첫 번째 줄의 결과 값(first quantizer codes)을 얻을 때 NAR(Non-autoregressive) 모델을 사용하여 나머지 7개의 결과값(seven quantizers)을 생성합니다. NAR 모델은 8개의 acoustic embedding layers를 포함한다는 점을 제외하면 AR 모델과 유사한 아키텍처를 가지고 있습니다. (AR c^~를 한줄만 사용했고 NAR은 C^~ 전체를 사용했기 때문에) 각 훈련 단계에서 무작위로 훈련 단계 i ∈ [2, 8]에서 샘플링합니다. (7층이 생성되니까 전체의 loss를 구하지 않고 한층만 뽑는다.) 모델은 i-번째 음향 토큰들을(quantizer codebook) 최대화하도록 훈련됩니다. (NAR은 한 줄, AR 은 토큰 하나 하나(어쨌든 이 친구도 한줄이긴함) ) 1단계부터 i-1 단계까지의 acoustic tokens 은 embedded 되고 더해져서 모델 input으로 다음과 같이 들어갑니다.
-> NAR이 AR과 다른 점을 설명한다.

여기서 ⊙ 인덱스 선택을 나타냅니다. phoneme sequence는 또한 language model의 프롬프트로 간주됩니다. 또한 주어진 화자의 고유한 음성을 복제하기 위해 등록된 acoustic token을 acoustic prompt로 사용합니다. 구체적으로, 먼저 Encodec을 사용하여 등록된 음성(3초 녹음 음성)을 C˜^T ×8 처럼 토큰화합니다. 8개 코드북 모두에서 포함된 표현은 음향 프롬프트 e_ct로 더해집니다. i-th 째 줄 (codebook)을 맞추기 위해 transformer의 input은 ex, ec^~, ec:<i 가 들어갑니다. 위치 임베딩도 prompt와 acoustic sequence에 대해 별도로 계산됩니다. i 번째 stage 네트워크에 Adaptive layer normalization operator를 추가한다. AdaLN(h, i) = ai * LayerNorm(h) + bi , h는 intermediate activations, ai 와 bi는 a linear projection of the stage embedding이다. AR과 달리 NAR 모델에서는 모든 input을 self-attention 계층에서 attention 할 수 있습니다. 또한 acoustic embedding layer와 output prediction layer의 매개변수를 공유합니다. j-th prediction layer는 (j+1)-th acoutic embedding layer와 같습니다.
-> NAR의 자세한 모델 구성 및 학습 방법 설명

4.3 Inference: In-Context Learning via Prompting
In-context learning은 추가 parameter 업데이트 없이 unseen input에 대한 레이블을 예측할 수 있는 텍스트 기반 언어 모델의 놀라운 기능입니다. TTS의 경우 모델이 미세 조정 없이 보이지 않는 화자의 고품질 음성을 합성할 수 있다면 해당 모델은 in-context learning 기능이 있는 것으로 간주됩니다. 그러나 기존 TTS 시스템의 상황 내 학습 기능은 추가 미세 조정이 필요하거나 보이지 않는 스피커에 대해 크게 저하되기 때문에 강력하지 않습니다.
-> In-context learning에 대한 설명 및 기존 TTS의 단점
언어 모델의 경우 zero-shot 시나리오에서 in-context learning을 활성화하려면 prompt가 필요합니다. 우리는 프롬프트와 추론을 다음과 같이 설계합니다. 먼저 텍스트를 음소 시퀀스로 변환하고 등록된 녹음을 음향 매트릭스로 인코딩하여 음소 프롬프트와 음향 프롬프트를 형성합니다. 두 프롬프트 모두 AR 및 NAR 모델에서 사용됩니다. AR 모델의 경우 beam search가 LM을 무한 루프로 이끌 수 있다는 것을 관찰했기 때문에 프롬프트에 따라 sampling based 디코딩을 사용합니다. 또한 sampling based 방법은 출력의 다양성을 크게 높일 수 있습니다. NAR 모델의 경우 greedy 디코딩을 사용하여 확률이 가장 높은 토큰을 선택합니다. 마지막으로 Encodec의 디코더를 사용하여 8개의 코드 시퀀스에 따라 wav를 생성합니다. 음향 프롬프트는 합성할 음성과 의미적으로 관련이 있을 수도 있고 없을 수도 있으며, 그 결과 다음과 같은 두 가지 경우가 발생한다:
VALL-E : 우리의 주요 관심사는 unseen speaker 화자를 위해 주어진 콘텐츠를 생성하는 것입니다. 모델에는 텍스트 문장, 등록된 음성 세그먼트 및 해당 전사가 제공됩니다. 주어진 문장의 음소 시퀀스에 등록된 음성의 전사 음소를 음소 프롬프트로 추가하고 등록된 음성의 첫 번째 계층 음향 토큰 acoustic prefix로 c˜:,1을 사용합니다. phoneme prompt와 acoustic prefix를 사용하여 VALL-E는 이 화자의 음성을 복제하는 주어진 텍스트에 대한 음향 토큰을 생성합니다. (이게 메인)
VALL-E -continual : 이 설정에서는 전체 전사와 발화의 처음 3초를 각각 음소 및 음향 프롬프트로 사용하고 모델에 연속을 생성하도록 요청합니다. 등록된 음성과 생성된 음성이 의미적으로 연속적이라는 점을 제외하면 추론 프로세스는 VALL-E 설정과 동일합니다 .
-> Vall-E의 inference 설명 및 다양한 응용