มาสอนคอมให้พูดกันเถอะ(TTS)

Jintawat Sangpratoom
Super AI Engineer
Published in
2 min readMar 28, 2021

ในบทความนี้จะมาอธิบายการทำโมเดลสำหรับเปลี่ยนข้อความเป็นเสียงพูดแบบ siri เป็นของตัวเอง โดยได้ทำตาม deepvoice3_pytorch ขั้นแรกให้ download clone project จาก github มาก่อน

การที่เราจะสร้าง model นั้น ก่อนอื่นเราต้องมีข้อมูลสำหรับให้ model เรียนรู้ก่อน ซึ่งในแต่ละ model ก็ต้องการรู้แบบข้อมูลที่ไม่เหมือนกัน สามารถ download เพื่อทดลองใช้ได้ ที่นี่

ในบทความนี้ได้ใช้ข้อมูลภาษาญี่ปุ่นในการสร้าง หน้าตาข้อมูลจะเป็นข้อมูลเสียง และข้อมูลที่บอกว่าเสียงนี้มีคำว่าอะไรบ้าง

สิ่งที่ต้องมีใน env

  • Python> = 3.5
  • CUDA> = 8.0
  • PyTorch >= v1.0.0
  • nnmnkwii >= v0.0.11
  • MeCab (Japanese only)

ในการสร้าง model สามารถปรับค่า hyperparameters ต่างๆได้ ซึ่งจะให้ผลลัพท์ที่ต่างกัน แต่สำหรับคนที่ไม่รู้ว่าจะปรับอะไรยังไงใน github ก็มี preset ที่ทดสอบมาแล้วว่าใช้ได้ผลดีมาให้เราเลือกใช้เหมือนกัน ซึ่งแนะนำว่าในการรันครั้งแรกควรลองรัน preset เพื่อเป็น baseline ในการทำงานของเราก่อน

ขั้นแรกเราจะต้อง preprocessing data ด้วยคำสั่งด้านล่าง

python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>

ชื่อข้างล่างนี้เป็นชื่อdata set สำเร็จรูปที่สามารถลองรันได้ง่ายๆ โดยนำไปใส่แทน dataset_name

  • ljspeech (en, single speaker)
  • vctk (en, multi-speaker)
  • jsut (jp, single speaker)
  • nikl_m (ko, multi-speaker)
  • nikl_s (ko, single speaker)

เราจะได้คำสั่งประมาณนี้

python preprocess.py --preset=presets/nyanko_ljspeech.json jsut ./data/jsut/ ./data/outs

หลังจากรันเสร็จจะได้ไฟล์แบบด้านบน หลังจากนั้นเราจะเริ่มสอน model กันโดยใช้คำสั้งด้านล่าง

python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"

ในที่นี้ให้เราเปลี่ยนตัวแปรตามที่อยู่โปรเจคของเรา โดยการเลือกใช้ presetนั้น เราต้องเลือกให้เหมือนกันทุกครั้ง ในส่วนของ data root ให้ใส่ที่อยู่ของไฟล์ output ของขั้นตอนก่อนหน้า

python train.py --preset=presets/nyanko_ljspeech.json --data-root=./data/outs/

พอได้แบบรูปด้านบนแล้วก็ปล่อยมันรันไปเรื่อยๆซึ่งการเทรนโมเดลนี้ต้องเทรนนานมาก ซึ่งเราสามารถปรับ checkpoint ใน hyperparameters ได้ เมื่อถึง checkpoint ที่กำหนด จะมีไฟล์ checkpoint มาสึ่งเราจะทำไปใช้ทำไฟล์เสียงจาก text ได้ ยิ่งเทรนนานยิ่งดีขึ้น

สามารถลองไปฟังเพื่อเปรียบเทียบ checkpoint ต่างๆ ที่ผมทำไว้ได้

--

--