+4

Tóm tắt vài mô hình Text-to-Speech (p4) - GlowTTS

1. Tổng quan

  • Các mô hình non-autogressive TTS song song trước đó, ví dụ như FastSpeech, có thể sinh mel-spectrogram nhanh hơn rõ rết so với autogressive models như Tacotron, cũng như giảm các lỗi về ngữ âm (lặp, mất từ). Tuy vậy, các nhược điểm trên được xử lý phần lớn nhờ attention map giữa text và speech.
  • Các mô hình TTS song song trước thường sử dụng aligners từ bên ngoài như pre-trained autogressive TTS models (ví dụ là FastSpeech) khiến cho performance bị phụ thuộc vào chúng

=> Qua bài báo Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search, các tác giả giới thiệu mô hình GlowTTS, một flow-based generative model có thể tự học các alignment mà không cần aligners từ bên ngoài bằng thuật toán Monotonic Alignment Search

2. Normalizing Flows

GlowTTS dựa trên Normalizing Flows, một lớp các mô hình sinh biểu diễn sự biến đổi của mật độ xác suất bằng cách sử dụng phép đổi biến thông qua một chuỗi các phép biến đổi khả nghịch (sequence of invertible mappings) được tham số hóa và học từ dữ liệu để biến đổi phân bố từ phức tạp thành đơn giản giúp tính toán xác suất dễ dàng hơn

  • Normalizing: qua các phép đổi biến, ta có hàm mật độ xác suất (probability density function - PDF) được chuẩn hóa
  • Flows: hàm mật độ ban đầu flows (đổi biến liên tục) qua chuỗi các phép biến đổi khả nghịch

Flow-based models được huấn luyện sử dụng hàm mất mát negative-log likelihood

với p(z)p(z) là PDF, detdet là định thức và đạo hàm là ma trận Jacobian, hih_i là kết quả biến đổi khả nghịch từ x sang z thông qua fif_i. Nhìn hình dưới cho dễ hiểu:

Hàm biến đổi fif_i cần thỏa mãn:

  • Dễ tính hàm nghịch đảo (fi1f^{-1}_{i})
  • Dễ tính ma trận đạo hàm Jacobian

3. Monotonic Alignment Search (MAS)

Tác giả cần tìm 1 ma trận alignment AA mà không sử dụng aligners từ bên ngoài, vậy làm thế nào? Họ đã giả sử A là song ánh để đảm bảo GlowTTS không lặp hoặc mất text input, và giới thiệu hàm Monotonic alignment search (MAS). MAS có nhiệm vụ tìm kiếm monotonic alignment khả dĩ nhất giữa biến tiềm ẩn (latent variable) và thống kê phân phối xác suất trước, gọi là AA*

Gọi Qi,jQ_{i,j} là giá trị log-likelihood cực đại với ii là thống kê phân phối xác suất trước, jj là biến tiềm ẩn. Qi,jQ_{i,j} có thể được tính đệ quy theo Qi1,j1Q_{i-1,j-1}Qi,j1Q_{i,j-1}:

Qi,j=maxAk=1jlogN(zk;μA(k),σA(k))=max(Qi1,j1,Qi,j1)+logN(zj;μi,σi)Q _ { i, j } = \max _ { A } \sum _ { k = 1 } ^ { j } \log N \left ( z _ { k } ; \mu _ { A \left ( k \right ) }, \sigma _ { A \left ( k \right ) } \right ) = \max \left ( Q _ { i - 1, j - 1 }, Q _ { i, j - 1 } \right ) + \log N \left ( z _ { j } ; \mu _ { i }, \sigma _ { i } \right )

Ta tính tất cả giá trị QQ đến QTtext,TmelQ_{T_{text}, T_{mel}} (TmelT_{mel} là độ dài chuỗi mel-spectrogram, TtextT_{text} là độ dài chuỗi text input). Ta có thể tìm các phần tử trong AA* bằng cách xác định giá trị QQ lớn hơn trong mỗi phương trình trên. Do vậy, việc tìm AA* có thể được thực hiện bằng quy hoạch động, và thực hiện quay lui ở cuối alignment. Bạn có thể nhìn hình cho dễ hiểu hơn:

4. Kiến trúc mô hình

4.1. Encoder và Duration Predictor

Kiến trúc phần Encoder dựa trên kiến trúc Encoder của Transformer TTS với vài thay đổi nhỏ:

  • Thay thế positional encoding bởi relative position representations trong các self-attention modules
  • Thêm residual connection vào encoder pre-net
  • Thêm lớp linear projection vào cuối encoder nhằm ước lượng phân phối xác suất trước

Duration Predictor: kiến trúc và các tham số thiết lập đều giống với FastSpeech

4.2 Decoder

Phần cốt lõi của GlowTTS là flow-based Decoder. Decoder nhận đầu vào là mel-spectrogram, squeeze nó trước khi được xử lý qua nhiều block (mô hình trong paper gồm 12 blocks), cuối cùng được unsqueeze về hình dạng ban đầu.

Quá trình squeezeunsqueeze: Khi squeeze, channel size tăng gấp đôi và số lượng time step giảm 1 nửa (nếu số time step lẻ, ta bỏ qua phần tử cuối của mel-spectrogram sequence). Unsqueeze là quá trình đưa mel-spectrogram về hình dạng ban đầu

Về các block, chúng gồm:

  • Activation Normalization (ActNorm) Layer: thường được sử dụng trong flow-based generative models. Nó thực hiện biến đổi affine, sử dụng các tham số scale và bias có thể huấn luyện được (tương tự batch normalization)
  • 1x1 Convolution khả nghịch: hình dưới là ví dụ được cung cấp trong Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search. 2 phần được sử dụng cho coupling layer được tô màu trắng và xanh. Với input channel là 8 như hình, ta dùng chung 1 ma trận 4x4 như là kernel cho 1x1 convolution khả nghịch. Sau khi mix channel, ta chia input thành các nhóm rồi thực hiện phép 1x1 convolution

  • Affine Coupling Layer: kiến trúc tương tự trong WaveGlow bỏ đi local conditioning

Ta có thể xem thêm về 3 thành phần trên qua bảng dưới (từ Glow: Generative Flow with Invertible 1×1 Convolutions)

4.3. Hyperparemeters

Trái với suy nghĩ của nhiều người rằng flow-based generative models cần số lượng tham số lớn, số lượng tham số của GlowTTS (28.6 triệu) thấp hơn FastSpeech (30.1 triệu)

5. GlowTTS Pipeline

5.1. Training (hình a)

GlowTTS mô hình hóa phân phối có điều kiện của mel-spectrgram (PX(xc))(P_X(x|c)) bằng cách biến đổi phân phối trước có điều kiện (conditional prior distribution) PZ(zc)P_Z(z|c) thông qua flow-based decoder fdec:zxf_{dec}: z \rightarrow x, với xxcc lần lượt là mel-spectrogram và chuỗi văn bản đầu vào. Bằng phương pháp đổi biến, ta có thể tính log-likelihood của dữ liệu:

logPX(xc)=logPZ(zc)+logdetfdec1(x)x\log P _ { X } \left ( x | c \right ) = \log P _ { Z } \left ( z | c \right ) + \log \left | \operatorname { d e t } \frac { \partial f _ { dec } ^ { - 1 } \left ( x \right ) } { \partial x } \right |

Ta tham số hóa dữ liệu và phân phối trước bởi tham số θ\theta và alignment AA. Text encoder fencf_{enc} ánh xạ từ text condition c=c1:Ttextc=c_{1:T_{text}} sang các giá trị thống kê μ=μ1:Ttext\mu=\mu_{1:T_{text}}σ=σ1:Ttext\sigma=\sigma_{1:T_{text}}. Phân phối trước có thể biểu diễn theo công thức: dưới đây:

logPZ(zc;θ,A)=j=1TmellogN(zj;μA(j),σA(j))\log P _ { Z } \left ( z | c ; \theta, A \right ) = \sum _ { j = 1 } ^ { T_{mel} } \log \mathcal{N} \left ( z _ { j } ; \mu _ { A \left ( j \right ) }, \sigma _ { A \left ( j \right ) } \right )

Ta cần tìm θ\thetaAA sao cho giá trị log-likelihood của dữ liệu đạt cực đại: maxθ,AL(θ,A)=maxθ,AlogPX(xc;A,θ)\max _ { \theta, A } L \left ( \theta, A \right ) = \max _ { \theta, A } \log P _ { X } \left ( x | c ; A, \theta \right ). Ta chia việc này thành 2 phần, thực hiện lần lượt ở mỗi traing step:

  • Tìm alignment khả dĩ nhất AA* ứng với θ\theta hiện tại: sử dụng MAS đã trình bày ở trên

A=argmaxAlogPX(xc;A,θ)=argmaxATmellogX(zj;μA(j),σA(j))A ^ { * } = \arg \max _ { A } \log P _ { X } \left ( x | c ; A, \theta \right ) = \arg \max _ { A } ^ { T _ {mel} } \log X \left ( z _ { j } ; \mu _ { A \left ( j \right ) }, \sigma _ { A \left ( j \right ) } \right )

  • Cập nhật θ\theta bằng gradient descent sao cho log-likelihood logPX(xc;θ,A)\log P _ { X } \left ( x | c ; \theta, A \right ) là lớn nhất

Để ước lượng AA* trong quá trình suy luận, ta huấn luyện duration predictor fdurf_{dur} để có thể cho kết quả giống duration label được tính bởi AA*:

di=j=1Tmel1A(j)=i,i=1,,Ttextd _ { i } = \sum _ { j = 1 } ^ { T _ { mel } } 1 _ { A ^ { * } \left ( j \right ) = i }, i = 1, \ldots, T _ { t e x t }

Duration predictor có kiến trúc gần tương tự trong FastSpeech và cũng được đặt sau encoder. Điểm khác biệt là đầu vào của duration predictor có thêm phép toán stop gradient sg[]sg[\cdot], nhằm loại bỏ đạo hàm ở đầu vào trong quá trình backward để chúng không ảnh hưởng tới maximum likelihood.

Hàm mất mát của duration predictor:

Ldur=MSE(fdur(sg[fenc(c)]),d)L _ { d u r } = M S E \left ( f _ { d u r } \left ( s g \left [ f _ { e n c } \left ( c \right ) \right ] \right ), d \right )

với MSE là mean square error giữa các giá trị logarithm

5.2. Inference (hình b)

Trong quá trình suy luận, phân phối trước và alignment được dự đoán bởi text encoder và duration predictor. Sau đó, biến tiềm ẩn được lấy mẫu từ phân phối trước, và mel-spectrogram được sinh song song bằng việc sử dụng flow-based decoder để biến đổi các biến tiềm ẩn.

6. Kết quả

6.1. Chất lượng âm thanh

Trong 3 giá trị temperature TT của phân phối trước được thử nghiệm trong suy luận, GlowTTS đạt performance tốt nhất khi T=0.333T=0.333. Với cả 3 giá trị TT, MOS của GlowTTS đều nhỉnh hơn Tacotron2

6.2. Tốc độ suy luận

Trên tập test, tốc độ suy luận của GlowTTS ổn định ở 40ms bất kể độ dài, còn tốc độ của Tacotron2 giảm dần tuyến tính khi độ dài chuỗi text input tăng dần. GlowTTS suy luận nhanh hơn trung bình 15.6 lần so với Tacotron2

6.3. Robustness

  • Tỉ lệ ký tự lỗi (character error rate - CER) của Tacotron2 bắt đầu tăng khi độ dài chuỗi ký tự đầu vào vượt quá 260, còn GlowTTS vẫn ổn định với văn bản dài dù chúng không được sử dụng trong quá trình huấn luyện

  • Tỷ lệ các lỗi về ngữ điệu (lặp, mất từ, phát âm sai) cũng rất thấp khi so sánh với nhiều TTS model khác. Dù tệ hơn Tacotron2, robustness của GlowTTS vẫn được giữ vững với chuỗi text input độ dài lớn, điều mà Tacotron2 không làm được

Reference

Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search

Glow: Generative Flow with Invertible 1×1 Convolutions

WaveGlow

Variational Inference with Normalizing Flows

https://jaketae.github.io/study/glowtts/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí