Tacotron 2 Thai TTS with phoneme

Pawit Dev
3 min readApr 13, 2022

--

ในบทความนี้ เราจะนำเสนอวิธีการสร้าง AI ให้สามารถสังเคราะห์เสียงขึ้นมาได้ด้วย Tacotron2

TTS หรือ Text-to-speech คืออะไร?

ลองนึกถึง Google Translate ที่อ่านออกเสียงให้เราฟัง TTS ก็จะประมาณนั้น คือการที่เรามีคำหรือประโยคใด ๆ แล้วเราจะให้ AI อ่านออกเสียงให้เราฟัง

Tacotron 2

ประกอบด้วย Network 2 ส่วนหลัก ๆ คือ

Ref and Description : กรอบสีฟ้าคือส่วนของ Spectrogram Prediction Network และกรอบสีส้มคือส่วนของ WaveNet Vocoder
  1. Spectrogram Prediction Network (RNN, Attention, CNN) ทำหน้าที่ในการแปลงข้อมูลจาก sequence of character เป็น mel-spectrogram
  2. WaveNet Vocoder ทำหน้าที่แปลงข้อมูลจาก mel-spectrogram เป็น waveform

mel-spectrogram คือสเปกโตรแกรมที่ความถี่ถูกแปลงเป็นสเกลเมล ซึ่งได้มาจากการนำเสียง (Waveform) ไปเข้า Fourier transform (แปลงจาก Time domain → Frequency domain หรือเรียกว่า spectrum) เพื่อให้ได้สัญญานของเสียงที่ให้ความสำคัญกับคลื่นเสียงต่ำที่เป็นคลื่นเสียงพูดของมนุษย์ ลดความสำคัญของคลื่นเสียงสูงที่ปกติจะเป็นเสียง noise ทำให้ประสิทธิภาพในการทำ TTS ออกมาดีขึ้น

ในปี ค.ศ. 1937 Stevens, Volkmann และ Newmann ได้เสนอหน่วยของระดับเสียงที่ระยะห่างเท่ากันในระดับเสียงฟัง นี่เรียกว่ามาตราส่วนเมล หรือ Mel scale เราสามารถทำการคำนวณทางคณิตศาสตร์เกี่ยวกับความถี่เพื่อแปลงให้เป็น Mel scale ได้

Setting Environment, Training, Inference

Data ที่ใช้อยู่ภายใต้ NECTEC licensed TSync2 under CC-BY-NC-SA

ในบทความนี้จะนำเสนอวิธีการ Train Tacotron 2 จาก pretrain บน google colab

Edit : แก้ชื่อไฟล์ใน hparams ให้ตรงกับไฟล์ Training/Testing ใหม่

Result

TTS from checkpoint 8000
Download

On training set

On testing set

Why using phoneme as Input ?

สำหรับโมเดลเสียง tacotron2 การใช้ phoneme แทน wordseg จะช่วยแก้ปัญหาการอ่านผิด ๆ ถูก ๆ ที่เคยเกิดขึ้น ยิ่งไปกว่านั้น จำนวน unique word จะลดลง ซึ่งจะช่วยให้ node network ลดลงด้วย

ทั้งนี้ เวลา Inference เราก็ต้องส่ง phoneme เข้าไป แทนที่จะเป็นประโยคหรือเป็นคำ ซึ่งอาจจะเพิ่มความยุ่งยากในการแปลงเป็น phoneme เอาเข้าโมเดล แต่ก็เป็นการ Trade-off ระหว่าง preprocess กับ คุณภาพการอ่านที่ดีขึ้น

หากสนใจการใช้ wordseg ในการเทรน (Main Reference)

ทั้งนี้ การจะ prove ว่า Model ที่ทำออกมานั้นดีจริง ๆ ไหม เราอาจจะต้องวัดผลด้วย Mean Opinion Score (MOS)

เอ๊ะ แล้วใครจะมานั่งสะกด phoneme เพื่อให้สังเคราะห์เสียงได้กันล่ะ

ในบทความนี้ ผมได้นำเสนอวิธีการ Train G2P seq-to-seq โดยเราใส่แค่คำลงไปเราก็ได้ phoneme ออกมาแล้ว !!!

ใครยังสงสัยว่า G2P (Ganeme to Phoneme) คืออะไร บทความข้างต้น คือคำตอบ

--

--

Pawit Dev

Super AI Engineer student who fascinated with AI technology such as NLP, Computer vision and especially in the field of TTS and Chatbot.