ในบทความนี้ เราจะนำเสนอวิธีการสร้าง AI ให้สามารถสังเคราะห์เสียงขึ้นมาได้ด้วย Tacotron2
TTS หรือ Text-to-speech คืออะไร?
ลองนึกถึง Google Translate ที่อ่านออกเสียงให้เราฟัง TTS ก็จะประมาณนั้น คือการที่เรามีคำหรือประโยคใด ๆ แล้วเราจะให้ AI อ่านออกเสียงให้เราฟัง
Tacotron 2
ประกอบด้วย Network 2 ส่วนหลัก ๆ คือ
- Spectrogram Prediction Network (RNN, Attention, CNN) ทำหน้าที่ในการแปลงข้อมูลจาก sequence of character เป็น mel-spectrogram
- 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) คืออะไร บทความข้างต้น คือคำตอบ
Reference :