- Sopro TTS คือ โมเดลแปลงข้อความเป็นเสียงพูด ขนาดเบาที่ใช้ภาษาอังกฤษเป็นหลัก รองรับการโคลนเสียงแบบซีโร่ช็อตและการสร้างเสียงแบบสตรีมมิง
- มี พารามิเตอร์ 169 ล้านตัว และสามารถสร้างเสียงความยาว 30 วินาทีได้ในเวลาประมาณ 7.5 วินาทีที่ความเร็ว 0.25 RTF บน CPU
- สามารถโคลนเสียงผู้พูดได้ด้วย เสียงอ้างอิงยาวเพียง 3~12 วินาที และใช้สถาปัตยกรรม dilated conv สไตล์ WaveNet และ lightweight cross-attention
- เป็นโปรเจ็กต์งบต่ำที่ฝึกด้วย GPU L40S เพียงตัวเดียว และยังมีโอกาสเพิ่มประสิทธิภาพได้หากปรับปรุงคุณภาพข้อมูล
- รองรับทั้ง โหมดสตรีมมิงและไม่สตรีมมิง, CLI, Python API และเว็บเดโม จึงเหมาะกับทั้ง การทดลองและการผสานใช้งานของนักพัฒนา
ภาพรวมของ Sopro TTS
- Sopro แปลว่า ‘ลมหายใจ’ ในภาษาโปรตุเกส และถูกพัฒนาเป็น โมเดล TTS ภาษาอังกฤษขนาดเบา
- ใช้โครงสร้างที่ผสาน dilated convolution และ cross-attention แทน Transformer
- เป็นโปรเจ็กต์ส่วนตัวที่ฝึกด้วย GPU L40S เพียงตัวเดียว
- คุณสมบัติหลัก
- 169M พารามิเตอร์, รองรับสตรีมมิง, โคลนเสียงแบบซีโร่ช็อต
- สร้างเสียง 30 วินาทีได้ใน 7.5 วินาทีที่ 0.25 RTF บน CPU
- โคลนเสียงได้จาก อ้างอิงเสียงยาว 3~12 วินาที
การติดตั้งและการรัน
- ระบุเพียงเวอร์ชันขั้นต่ำของ dependency จึงติดตั้งได้โดยไม่ต้องสร้าง environment แยก
- ตัวอย่าง:
torch==2.6.0 ให้ประสิทธิภาพดีขึ้นราว 3 เท่าบน M3 CPU
- วิธีติดตั้ง
- PyPI:
pip install sopro
- GitHub repository:
git clone แล้วตามด้วย pip install -e .
ตัวอย่างการใช้งาน
- ตัวอย่างการรันผ่าน CLI
- ระบุข้อความ, เสียงอ้างอิง และไฟล์เอาต์พุตได้
- มีพารามิเตอร์ควบคุมละเอียด เช่น
--style_strength, --no_stop_head, --stop_threshold, --stop_patience
- ตัวอย่าง Python API
- โหลดโมเดลด้วย
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")
- รองรับทั้งแบบ ไม่สตรีมมิง และ สตรีมมิง
- ในโหมดสตรีมมิง สามารถนำชังก์เสียงที่สร้างได้มาต่อกันตามลำดับ
เดโมสตรีมมิงแบบอินเทอร์แอ็กทีฟ
- หลังติดตั้งแล้วสามารถรันเซิร์ฟเวอร์ภายในเครื่องด้วยคำสั่ง
uvicorn demo.server:app
- หรือจะ build และรันด้วย Docker ก็ได้
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo
- เปิดเบราว์เซอร์ไปที่
http://localhost:8000 เพื่อดูเดโมได้
ข้อควรระวังและข้อจำกัด
- อาจมีปัญหาเรื่อง ความสม่ำเสมอของเอาต์พุต และอาจต้องปรับพารามิเตอร์
- คุณภาพการโคลนเสียง ขึ้นอยู่มากกับคุณภาพไมโครโฟนและเสียงรบกวนรอบข้าง
- เวอร์ชันไม่สตรีมมิงให้คุณภาพเสียงสูงกว่า
- จำกัดความยาวการสร้างไว้ที่ประมาณ 32 วินาที (400 เฟรม) และหากเกินอาจเกิดเอาต์พุตหลอน
- การใช้ torchaudio ต้องมี ffmpeg, โดยแนะนำให้ใช้
soundfile
- ข้อมูลฝึกอยู่ในรูปแบบ pre-tokenized และไฟล์เสียงต้นฉบับถูกลบทิ้งเพราะข้อจำกัดด้านพื้นที่จัดเก็บ
- มีการกล่าวถึงแผนในอนาคตที่จะ เปิดเผยโค้ดสำหรับการฝึก และขยายการรองรับหลายภาษา
ข้อมูลฝึก
- ใช้ชุดข้อมูล Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22, MLS
ข้อมูลอ้างอิงและเทคโนโลยีพื้นฐาน
- อ้างอิงงานวิจัยและโค้ดจาก Mimi Codec (Kyutai), WaveNet, Attentive Stats Pooling, AudioLM, CSM เป็นต้น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เป็นโปรเจ็กต์ที่เจ๋งและมีประโยชน์มาก
ส่วนตัวคิดว่า Chatterbox-TTS-Server คือทางเลือกที่ดีที่สุด
ถึงจะช้า แต่คุณภาพเสียงค่อนข้างสูง
โมเดลนี้รองรับการโคลนเสียงและการควบคุมอารมณ์แบบแมนนวลผ่านเวกเตอร์อารมณ์ จึงรู้สึกว่าเป็นเครื่องมือที่ทรงพลังมาก
มันมีประโยชน์มากในโปรเจ็กต์ orchestration ของโมเดลที่กำลังทำอยู่ตอนนี้
โมเดลจำแนกอารมณ์ภายนอกควบคุมทั้ง persona ของ LLM และเอาต์พุตของ TTS พร้อมกันเพื่อรักษาความสม่ำเสมอ
ความน่าจะเป็นในการค้นคืน "ความทรงจำ" ก็เปลี่ยนไปตามสภาวะอารมณ์ด้วย และแทบไม่มี TTS ตัวไหนที่ควบคุมได้ละเอียดเท่า IndexTTS2
เอาต์พุตของ Sopro TTS ตามวิดีโอใน GitHub แย่มากจนใช้งานจริงไม่ได้
ในทางกลับกัน Chatterbox ให้ผลลัพธ์ที่น่าทึ่ง
GPU ของฉันคือ RTX5090 และใช้เวลารันประมาณ 2 วินาทีต่อการสร้างเสียง 1 วินาที จึงถือว่าเร็วมาก
ดูได้จากตัวอย่างแรกและตัวอย่างที่สอง โดยตัวอย่างหลังเป็นเดโมโคลนเสียงของยูทูบเบอร์ ArbitorIan
เจ๋งมากจริง ๆ!
ฉันใช้ Kokoro (82M) บนเครื่องอยู่ ซึ่งทำงานเร็วและคุณภาพเสียงก็ดีเยี่ยม
ฉันใช้ ricky0123/vad จัดการการตรวจจับเสียงพูด แล้วใช้ Web Speech API สำหรับการรู้จำแบบเร็ว ก่อนจะตามด้วย TTS เชิงพาณิชย์
แต่ฝั่งโอเพนซอร์สยังไม่เจอตัวที่เร็วพอ
สงสัยว่า “zero-shot” หมายถึงอะไร
ส่วน few-shot คือการให้ตัวอย่างไม่กี่แบบเพื่อชี้นำโมเดล และ multi-shot คือการผ่านหลายรอบของการพรอมป์ต์และแก้ไข
ให้ความรู้สึกเหมือนทำ voice cloning ระดับ Mission Impossible ได้โดยไม่ต้องคอมไพล์ยาวนาน
เลยขอแชร์ทั้งวิดีโอ YouTubeที่เกี่ยวข้องและบทกวีเล่นคำ
ฉันทดลองเป็นภาษาอังกฤษแล้วและค่อนข้างประทับใจ
ถือว่าให้ผลลัพธ์น่าทึ่งมากสำหรับโปรเจ็กต์งบต่ำ และใช้งานก็ง่ายมาก
ถ้ามีเวอร์ชันภาษาเยอรมันฉันคงอยากใช้มาก
เมื่อคำนึงถึงข้อจำกัดแล้ว ถือว่าให้ผลลัพธ์ที่น่าประทับใจมาก
แต่อยากรู้ว่ามีแผนจะปล่อยเวอร์ชันที่แรงกว่านี้ไหม (มี artifact น้อยลงแต่ใช้คอมพิวต์มากขึ้น)
ปกติฉันใช้ Chatterbox เป็นหลัก แต่ถ้าตัวนี้พัฒนาไปถึงระดับเสียงคุณภาพสูงได้ ก็น่าจะเป็นอีกทางเลือกที่ดี
ต้นทุนคอมพิวต์ค่อนข้างแพง แต่ถ้ากระแสตอบรับจากชุมชนดี ก็คิดว่าจะพัฒนาต่อ
และ Chatterbox ก็เป็นทั้งโมเดลที่ยอดเยี่ยมและเป็นแรงบันดาลใจสำคัญ
สงสัยความหมายของ “zero-shot”
ตามอำเภอใจยิ่งกว่า Big O notation เสียอีก
กล่าวคือ ถ้าโมเดลเรียนรู้ความน่าจะเป็นมีเงื่อนไข P(Audio|Voice) และสามารถสุ่มตัวอย่างสำหรับคลาสเสียงที่ไม่เคยเห็นระหว่างการฝึกได้ ก็ถือว่าเป็น zero-shot
การให้เสียงอ้างอิงไม่ได้เป็นการเปลี่ยนน้ำหนักของโมเดล แต่เป็นการให้บริบท
ฉันลองฟังเสียงแล้วตกใจมาก เพราะคุณภาพเสียงแย่มาก
มันแย่ยิ่งกว่าเสียงคอมพิวเตอร์เมื่อ 15 ปีก่อน และไม่เข้าใจเลยว่าทำไมคนถึงบอกว่าดี
ฉันทดสอบหลายเบราว์เซอร์แล้วก็เหมือนเดิม
ถ้ามันรุนแรงขนาดนั้น อาจมีปัญหาอื่นด้วย และฉันก็อยากช่วยดูไปด้วยกัน
เป็นเทคโนโลยีที่เจ๋งมาก
น่าจะดีขึ้นอีกในอนาคต
แต่ในระหว่างนี้ อย่างน้อยก็น่าจะเพิ่ม post-processing เสียงแบบง่าย ๆ เพื่อลดความแหบหยาบ (razziness) ลงบ้าง
สงสัยว่ามีโมเดลแนวนี้ตัวไหนที่ทำงานเป็นตัวแปลงเสียงแบบ speech-to-speechได้บ้างไหม
กล่าวคือ รับทั้งตัวอย่างเสียงคงที่หนึ่งชุด (พรอมป์ต์) และสตรีมเสียงอินพุตแบบเรียลไทม์ แล้วแปลงเสียงอินพุตให้มีโทนและเนื้อเสียงแบบพรอมป์ต์
สำหรับพวก V-tuber น่าจะไม่ต้องเปลี่ยนพรอมป์ต์บ่อยนัก จึงอาจเป็นไปได้ที่จะใช้ fine-tuning ครั้งเดียวเพื่อกำหนดเนื้อเสียงแบบคงที่
แต่คุณต้องทำระบบสตรีมมิงเอง
มันรับออดิโอ A (สไตล์) และ B (คอนเทนต์) แล้วรวมเนื้อเสียงของ A เข้ากับการออกเสียงและน้ำเสียงของ B
โมเดลแบบนี้จริง ๆ แล้วควรมองว่าเป็น S+STS (speech+style to speech) มากกว่าจะเป็น “TTS”
อธิบายไว้ละเอียดในบล็อกทางการ
แต่มีปัญหาความขัดแย้งระหว่างผู้สร้างเดิมกับนักพัฒนา จึงควรหลีกเลี่ยง main fork และหาฟอร์กล่าสุดที่มีการดูแลเป็นภาษาอังกฤษแทน