มาสอนคอมให้พูดกันเถอะ(TTS)
ในบทความนี้จะมาอธิบายการทำโมเดลสำหรับเปลี่ยนข้อความเป็นเสียงพูดแบบ siri เป็นของตัวเอง โดยได้ทำตาม deepvoice3_pytorch ขั้นแรกให้ download clone project จาก github มาก่อน
การที่เราจะสร้าง model นั้น ก่อนอื่นเราต้องมีข้อมูลสำหรับให้ model เรียนรู้ก่อน ซึ่งในแต่ละ model ก็ต้องการรู้แบบข้อมูลที่ไม่เหมือนกัน สามารถ download เพื่อทดลองใช้ได้ ที่นี่
ในบทความนี้ได้ใช้ข้อมูลภาษาญี่ปุ่นในการสร้าง หน้าตาข้อมูลจะเป็นข้อมูลเสียง และข้อมูลที่บอกว่าเสียงนี้มีคำว่าอะไรบ้าง
สิ่งที่ต้องมีใน env
ในการสร้าง 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 ต่างๆ ที่ผมทำไว้ได้