Moshi: โมเดลเสียง-ข้อความสำหรับการสนทนาแบบเรียลไทม์
แนะนำ Moshi
- Moshi เป็นโมเดลเสียง-ข้อความสำหรับการสนทนาแบบเรียลไทม์ และเป็นเฟรมเวิร์กการสนทนาด้วยเสียงแบบ สองทาง
- ใช้ Mimi ซึ่งเป็นสตรีมมิงนิวรัลออดิโอโคเด็กระดับแนวหน้า
- Mimi แปลงเสียง 24 kHz เป็น 12.5 Hz และประมวลผลแบบสตรีมมิงด้วยเวลาแฝง 80ms ขณะคงแบนด์วิดท์ไว้ที่ 1.1 kbps
- ให้ประสิทธิภาพดีกว่าโคเด็กแบบไม่สตรีมมิงเดิมอย่าง SpeechTokenizer (50Hz, 4kbps) และ SemantiCodec (50Hz, 1.3kbps)
วิธีการทำงานของ Moshi
- Moshi จำลอง สตรีมเสียงสองชุด: ชุดหนึ่งเป็นของ Moshi และอีกชุดเป็นของผู้ใช้
- ระหว่างการอนุมาน สตรีมของผู้ใช้จะมาจากอินพุตเสียง และสตรีมของ Moshi จะถูกสุ่มตัวอย่างจากเอาต์พุตของโมเดล
- พร้อมกับสตรีมเสียงทั้งสองนี้ Moshi จะทำนายโทเคนข้อความที่สอดคล้องกับเสียงพูดของตนเอง
- Depth Transformer ขนาดเล็กจะจำลองการพึ่งพาระหว่าง codebook ในแต่ละช่วงเวลา และ Temporal Transformer ขนาดใหญ่ 7B พารามิเตอร์จะจำลองการพึ่งพาตามลำดับเวลา
- ในทางทฤษฎี Moshi ทำเวลาแฝงได้ 160ms และในการใช้งานจริงมีเวลาแฝงต่ำกว่า 200ms บน L4 GPU
คุณลักษณะของ Mimi
- Mimi พัฒนาต่อยอดจากนิวรัลออดิโอโคเด็กก่อนหน้าอย่าง SoundStream และ EnCodec โดยเพิ่ม Transformer เข้าไปในตัวเข้ารหัสและตัวถอดรหัส
- Mimi ปรับ stride เพื่อให้ใกล้กับอัตราเฟรมเฉลี่ยของโทเคนข้อความ (~3-4 Hz) มากขึ้น
- Mimi ใช้ distillation loss ที่จัดแนวโทเคนของ codebook แรกให้สอดคล้องกับการแทนค่าแบบ self-supervised ของ WavLM
- Mimi ใช้เพียง adversarial training loss และ feature matching ก็สามารถยกระดับคุณภาพเชิงอัตวิสัยได้มากแม้ที่บิตเรตต่ำ
โครงสร้างที่เก็บข้อมูล
- ที่เก็บข้อมูลนี้มี Moshi inference stack อยู่ 3 เวอร์ชัน
- เวอร์ชัน Python ที่ใช้ PyTorch อยู่ในไดเรกทอรี
moshi/
- เวอร์ชัน Python ที่ใช้ MLX สำหรับ Mac ซีรีส์ M อยู่ในไดเรกทอรี
moshi_mlx/
- เวอร์ชัน Rust ที่ใช้ในโปรดักชันอยู่ในไดเรกทอรี
rust/
- โค้ดสำหรับไลฟ์เดโมมีให้ในไดเรกทอรี
client/
โมเดล
- มีการเผยแพร่โมเดล 3 แบบ
- โคเด็กเสียง Mimi
- Moshi ที่ปรับจูนละเอียดด้วยเสียงสังเคราะห์ผู้ชาย (Moshiko)
- Moshi ที่ปรับจูนละเอียดด้วยเสียงสังเคราะห์ผู้หญิง (Moshika)
- แต่ละโมเดลมีให้ผ่านที่เก็บข้อมูลบน HuggingFace
- โมเดลทั้งหมดเผยแพร่ภายใต้ไลเซนส์ CC-BY 4.0
ข้อกำหนด
- ต้องใช้ Python 3.10 ขึ้นไป และแนะนำ Python 3.12
- ข้อกำหนดเฉพาะให้ดูในไดเรกทอรีของแต่ละแบ็กเอนด์
- มีคำสั่งติดตั้งไคลเอนต์สำหรับ PyTorch และ MLX ให้
Python (PyTorch)
- API ที่อิงกับ PyTorch อยู่ในไดเรกทอรี
moshi
- มีทั้งสตรีมมิงออดิโอโทเคไนเซอร์ (mimi) และภาษาระดับโมเดล (moshi)
- หากต้องการรันในโหมดอินเทอร์แอ็กทีฟ ต้องเริ่มเซิร์ฟเวอร์ก่อน
Python (MLX) สำหรับ macOS
- หลังจากติดตั้ง
moshi_mlx แล้ว สามารถรัน local inference ได้
- อินเทอร์เฟซบรรทัดคำสั่งยังเป็นแบบพื้นฐาน และไม่มีฟังก์ชันตัดเสียงสะท้อน
Rust
- หากต้องการรัน Rust inference server ให้ใช้คำสั่งในไดเรกทอรี
rust
- บน macOS สามารถใช้
--features metal แทน --features cuda ได้
ไคลเอนต์
- แนะนำให้ใช้เว็บ UI ซึ่งมีฟังก์ชันตัดเสียงสะท้อนเพิ่มเติม
- มีอินเทอร์เฟซบรรทัดคำสั่งให้เช่นกัน
การพัฒนา
- สามารถโคลนที่เก็บข้อมูลเพื่อติดตั้งและพัฒนาต่อได้
FAQ
- ตรวจสอบส่วนคำถามที่พบบ่อยก่อนเปิด issue
ไลเซนส์
- ส่วน Python ใช้ไลเซนส์ MIT ส่วน Rust backend ใช้ไลเซนส์ Apache
- โค้ดเว็บไคลเอนต์ใช้ไลเซนส์ MIT
- น้ำหนักโมเดลใช้ไลเซนส์ CC-BY 4.0
การอ้างอิง
- หากใช้ Mimi หรือ Moshi กรุณาอ้างอิงงานวิจัย
สรุปโดย GN⁺
- Moshi เป็นโมเดลเสียง-ข้อความที่ล้ำสมัยสำหรับการสนทนาแบบเรียลไทม์ โดยเด่นเรื่องเวลาแฝงต่ำและคุณภาพสูง
- โคเด็ก Mimi มีประสิทธิภาพเหนือกว่าโคเด็กเดิม และใช้ Transformer เพื่อดึงประสิทธิภาพออกมาได้สูงสุด
- รองรับการใช้งานบนหลายแพลตฟอร์ม และมีหลายเวอร์ชันทั้ง PyTorch, MLX และ Rust
- มีประโยชน์มากสำหรับนักพัฒนาแอปพลิเคชันสนทนาแบบเรียลไทม์ โดยเฉพาะกรณีที่เวลาแฝงต่ำเป็นปัจจัยสำคัญ
- โปรเจกต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ WaveNet ของ Google และ Jukebox ของ OpenAI
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ความคิดเห็นแรก
ความคิดเห็นที่สอง
ความคิดเห็นที่สาม
ความคิดเห็นที่สี่
ความคิดเห็นที่ห้า
ความคิดเห็นที่หก
ความคิดเห็นที่เจ็ด
ความคิดเห็นที่แปด
ความคิดเห็นที่เก้า
ความคิดเห็นที่สิบ