- vừa được xem lúc

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

0 0 25

Người đăng: Đinh Trọng Huy

Theo Viblo Asia

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/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hành trình AI của một sinh viên tồi

Mình ngồi gõ những dòng này vào lúc 2h sáng (chính xác là 2h 2 phút), quả là một đêm khó ngủ. Có lẽ vì lúc chiều đã uống cốc nâu đá mà giờ mắt mình tỉnh như sáo, cũng có thể là vì những trăn trở về lý thuyết chồng chất ánh xạ mình đọc ban sáng khiến không tài nào chợp mắt được hoặc cũng có thể do mì

0 0 131

- vừa được xem lúc

[Deep Learning] Key Information Extraction from document using Graph Convolution Network - Bài toán trích rút thông tin từ hóa đơn với Graph Convolution Network

Các nội dung sẽ được đề cập trong bài blog lần này. . Tổng quan về GNN, GCN. Bài toán Key Information Extraction, trích rút thông tin trong văn bản từ ảnh.

0 0 204

- vừa được xem lúc

Tìm hiểu về YOLO trong bài toán real-time object detection

1.Yolo là gì. . Họ các mô hình RCNN ( Region-Based Convolutional Neural Networks) để giải quyết các bài toán về định vị và nhận diện vật thể.

0 0 272

- vừa được xem lúc

Encoding categorical features in Machine learning

Khi tiếp cận với một bài toán machine learning, khả năng cao là chúng ta sẽ phải đối mặt với dữ liệu dạng phân loại (categorical data). Khác với các dữ liệu dạng số, máy tính sẽ không thể hiểu và làm việc trực tiếp với categorical variable.

0 0 244

- vừa được xem lúc

TF Lite with Android Mobile

Như các bạn đã biết việc đưa ứng dụng đến với người sử dụng thực tế là một thành công lớn trong Machine Learning.Việc làm AI nó không chỉ dừng lại ở mức nghiên cứu, tìm ra giải pháp, chứng minh một giải pháp mới,... mà quan trọng là đưa được những nghiên cứu đó vào ứng dụng thực tế, được sử dụng để

0 0 55

- vừa được xem lúc

Xây dựng hệ thống Real-time Multi-person Tracking với YOLOv3 và DeepSORT

Trong bài này chúng ta sẽ xây dựng một hệ thống sử dụng YOLOv3 kết hợp với DeepSORT để tracking được các đối tượng trên camera, YOLO là một thuật toán deep learning ra đời vào tháng 5 năm 2016 và nó nhanh chóng trở nên phổ biến vì nó quá nhanh so với thuật toán deep learning trước đó, sử dụng YOLO t

0 0 303