Thai IndexTTS2
indextts2 thai โมเดล TTS state of the art (sota) ปรับอารมณ์เสียงได้ (พอประมาณ)
อธิบายโมเดลนี้สั้นๆ มันคือ minimax speech เวอร์ชันที่ไม่มีใส่เสียงหัวเราะ เสียงร้องไห้ แค่นั้นแหละ เพราะนี่คือโมเดลที่ finetune จาก indextts2 ตัวต้นฉบับจาก billibilli
🌟 ความสามารถ
- โคลนเสียงได้ ซึ่งโคลนมาทั้งสำเนียงและอารมณ์
- ปรับ duration ได้ (แต่ไม่ค่อยแม่นยำ มี parameter ให้ปรับ แนะนำไปปรับแบบช้าหรือเร็วก็พอ)
- emo vector จุดสำคัญของโมเดลนี้ ที่โมเดลอื่นๆไม่มี สามารถ scale อารมณ์ได้ (ภาษาไทยตอนนี้ ทำได้ดีระดับนึง มีเพิ่ม thai emo vec ให้ปรับด้วย แต่ไม่ค่อยดีนัก)
- เพิ่มระบบตัดเสียงตัดคำอื่นๆ สำหรับภาษาไทยโดยเฉพาะ
🆚 เทียบกับ opensource โมเดลอื่นๆ ที่พูดไทยได้
- vits: ไวกว่ามาก แต่ซัดทิ้งได้เลย เสียงโคลนไม่ได้ และเสียงยาวไปก็พัง
- f5tts thai: ไว โคลนเสียงได้ แต่เสียงออกแนวค่อนข้างโรโบติก และ ไร้ชีวิตชีวา ปรับไรมากไม่ค่อยได้
- vibevoice: ดีและแม่นยำ เจนเสียงยาวเกือบครึ่งชั่วโมงได้ แต่เจนช้า แบบ ช้าโคตรๆ เอาไปใช้ทำไรมากไม่ได้สำหรับภาษาไทย error rate สำหรับ speaker 2 คนสูงมาก
- omnivoice: ดีที่สุดในปัจจุบัน โคลนเสียงตามสำเนียงและอารมณ์ได้ แต่ไม่มีโมเดลที่ "finetune เพิ่มเติมกับ dataset ภาษาไทย" ทำให้บางเสียงยังไม่ค่อยโอเค และ บางอารมณ์ก็แสดงออกมาไม่ค่อยชัด แต่ความเร็ว กับ ความแม่นยำ ถือว่าดีที่สุด
- ของเรา indextts2: แม้นจะช้ากว่า + แม่นยำต่ำกว่า แต่ด้วยการ finetune ผ่าน "dataset ที่ curated มาดี" ทำให้บางเสียงที่ gen ผมรู้สึกว่าดีกว่าตัว omnivoice มาก
✅ indextts2 เหมาะกับ
- คนที่อยากเทสต์ระบบ เผื่อเอาไป finetune เพิ่มเติมต่อ
- คนที่อยากทำเสียง dub ภาษาไทย ทำพากย์ไทยประโยคสั้นๆต่อครั้ง คุณภาพพอๆกับ vibevoice แต่เร็วกว่า vibevoice มาก
- ต้องการเสียงที่มีอารมณ์ (โหมด emo vec ไม่ค่อยแม่นยำ error rate ยังสูงอยู่ แต่โหมดอื่นถือว่าโอเค)
- ต้องการเสียงพากย์ เสียงสารคดี เสียงที่ "คุ้นเคย"
❌ ไม่เหมาะกับ
- สตรีมยาวๆ (error rate ยังสูง)
- ต้องการความเร็ว
- ไม่อยากเจนซ้ำบ่อยๆ
- ใช้ศัพท์ไทยผสมอังกฤษบ่อยๆ
🛠️ เกี่ยวกับการเทรน
- โปรเจกต์นี้ใช้เวลาประมาณ 2 เดือนหลังจากเทรนรอบแรก กินเวลา 99% ไปกับการหา dataset ผมหมายถึง.......ผม prompt ให้ claude หรือ gemini ไปหา dataset ให้ แล้วมันก็บอกว่า yessirrie แค่นั้นแหละ.....จากนั้นมันก็ลบ dataset ทิ้งไปหมดแล้ว lol (dataset ที่ใช้เทรนประมาณ 800 ชั่วโมงรวมการทำ pairing แล้ว)
- อย่างไรก็ตามโมเดลยังสามารถ finetune เพิ่มเติมได้อยู่ ลองดูได้
- ตอนนี้มีโมเดลที่ค่อนข้างดีกว่าอย่าง omnivoice ในแง่ความเร็วและความแม่นยำ ขาดอีกนิดคือแค่อารมณ์เสียง + ข้อความอธิบาย speech ตอนนี้มีโปรเจกต์ opensource หลายโปรเจกต์ที่น่าเอามา finetune ต่อให้คุณภาพพอๆกับ gemini tts
🚀 วิธีดาวน์โหลดและติดตั้ง (Installation)
โปรเจกต์นี้ใช้ uv ในการจัดการสภาพแวดล้อมและแพ็กเกจ เพื่อให้ติดตั้งง่ายและแก้ปัญหาเวอร์ชันได้อย่างสมบูรณ์
1. ดาวน์โหลดโปรเจกต์
ใช้คำสั่ง Git เพื่อดาวน์โหลดไฟล์ทั้งหมด:
git clone https://huggingface.co/williampike/thai_indextts2
cd thai_indextts2
2. สร้าง Virtual Environment และติดตั้ง Dependencies
ตรวจสอบว่าในเครื่องมี uv แล้ว (หากยังไม่มี ให้รัน pip install uv ก่อน)
จากนั้นรันคำสั่งเหล่านี้เพื่อสร้าง Virtual Environment และติดตั้งแพ็กเกจ:
# สร้าง virtual environment
uv venv
# ติดตั้งแพ็กเกจทั้งหมดตามที่ระบุไว้
uv pip install -e .
(เคล็ดลับ: คุณสามารถใช้แค่คำสั่ง uv sync เพื่อจัดการทุกอย่างในรวดเดียวได้เช่นกัน)
3. รันโปรแกรม
เมื่อติดตั้งเสร็จเรียบร้อยแล้ว ให้รันโปรแกรมด้วย uv run เพื่อเรียกใช้งานสภาพแวดล้อมที่ถูกต้อง:
uv run webui.py
(ถ้าต้องการรันไฟล์อื่น เช่น webui_parallel_thai.py ก็สามารถเปลี่ยนชื่อไฟล์ในคำสั่งได้เลย)
✨ ฟีเจอร์ใหม่ใน webui_parallel_thai.py (เมื่อเทียบกับต้นฉบับ IndexTTS2)
ไฟล์ webui_parallel_thai.py ได้รับการปรับแต่งและเพิ่มฟีเจอร์สำหรับภาษาไทยโดยเฉพาะ ดังนี้:
- รองรับภาษาไทยเต็มรูปแบบ (Thai Localization): เปลี่ยนเมนูและคำอธิบายใน UI เป็นภาษาไทยทั้งหมด เพื่อให้ใช้งานง่ายขึ้น
- ระบบ Auto-load โมเดลภาษาไทย: เมื่อเปิด WebUI จะตรวจสอบและโหลดโมเดล
thaiseperate2.pthพร้อมกับ BPE tokenizer สำหรับภาษาไทยให้โดยอัตโนมัติ (หากมีในระบบ) - โหมดแยกส่วนเสียง (Segment Mode): แท็บ UI ใหม่ที่ช่วยแบ่งข้อความยาวๆ เป็นประโยคย่อย และกดสร้างเสียงทีละท่อนได้ สามารถกดย้อนกลับเพื่อสร้างท่อนล่าสุดใหม่ (Regenerate Last) ก่อนที่จะนำมารวมกันเป็นไฟล์เดียว
- ตัวประมวลผลข้อความภาษาไทย (Thai Text Preprocessor): ทำงานร่วมกับ
PyThaiNLPช่วยในการตัดคำและเตรียมข้อความให้เหมาะสมก่อนนำไปสร้างเสียง (สามารถเปิด-ปิดฟีเจอร์ G2P และ Dataset Spacing ได้) - ระบบตัดเสียงเงียบอัตโนมัติ (Silence Trimming): มีฟังก์ชันช่วยตัดเสียงเงียบที่ยาวเกินไปทิ้ง ทั้งในไฟล์เสียง Prompt ต้นฉบับและไฟล์ Output อัตโนมัติ เพื่อให้จังหวะการพูดลื่นไหล
- ระบบ Auto-Retry อัจฉริยะ: หากเสียงที่สร้างออกมามีความยาวผิดปกติเมื่อเทียบกับจำนวนคำ (เช่น เสียงขาดหาย หรือเสียงยานลากยาว) ระบบจะสั่ง Generate ใหม่ให้อัตโนมัติทันที
- เวกเตอร์ควบคุมอารมณ์แบบภาษาไทย (Thai 5-Emo Vectors): เปลี่ยนระบบสไลเดอร์อารมณ์มาใช้แบบ 5-Emo ที่ออกแบบมาสำหรับโมเดลภาษาไทยโดยเฉพาะ เพื่อการควบคุมที่แม่นยำยิ่งขึ้น