1 คะแนน โดย GN⁺ 2024-09-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

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 ความคิดเห็น

 
GN⁺ 2024-09-20
ความคิดเห็นจาก Hacker News
  • ความคิดเห็นแรก

    • เวลาแฝงต่ำมาก ถือเป็นความสำเร็จครั้งใหญ่สำหรับโมเดลโอเพนซอร์ส
    • คุณภาพคำตอบยังด้อยกว่า LLM ที่ยอดเยี่ยมมากในช่วงหลัง
    • ชวนให้นึกถึง LLM ในปี 2019
    • ด้านเสียงทำได้ดีพอแล้ว แต่ควรโฟกัสที่คุณภาพคำตอบมากกว่านี้
  • ความคิดเห็นที่สอง

    • พบเดโมน่าสนใจจากเมื่อหลายเดือนก่อนบน YouTube
    • มั่นใจว่าตอนนี้น่าจะพัฒนาขึ้นแล้ว
  • ความคิดเห็นที่สาม

    • กำลังพัฒนาโซลูชันเสียงแบบเรียลไทม์ -> LLM -> เอาต์พุตเสียง
    • สตรีมมิง neural audio codec น่าสนใจที่สุด
    • ในมุมมองของผลิตภัณฑ์ จำเป็นต้องมีขั้นตอนเรียกใช้ tool/function มากกว่าจะต่อเข้ากับ LLM โดยตรง
    • แม้การพัฒนา tincans จะยุติไปแล้ว แต่แนวทางนี้ยังมีศักยภาพในการต่อยอดสูง
  • ความคิดเห็นที่สี่

    • Moshi ใช้ไลเซนส์ CC-BY
    • ช่วงหลังมีโมเดล 7b ที่คล้ายกันซึ่งออกภายใต้ Apache v2
  • ความคิดเห็นที่ห้า

    • สงสัยว่ามีวิธีสะดวก ๆ ในการให้ TTS interface บนเทอร์มินัล a-shell ของ iPad หรือไม่
  • ความคิดเห็นที่หก

    • ช่วงหลังมีความก้าวหน้ามากในสายงาน LM ที่รองรับเสียง
    • โปรเจ็กต์ที่เกี่ยวข้องมี LLaMA-Omni และ mini-omni
  • ความคิดเห็นที่เจ็ด

    • เซิร์ฟเวอร์ inference เขียนด้วย Rust และใช้ Candle crate ของ huggingface
    • หนึ่งในผู้เขียน Moshi เป็นผู้เขียนหลักของ Candle
    • กำลังสร้าง inference stack ที่อิงกับ Candle
  • ความคิดเห็นที่แปด

    • จากที่ลองใช้ มันตอบกลับทันที แต่คำตอบต่อคำถามจริงจะตามมาทีหลัง
    • บางครั้งอาจติดลูปได้
  • ความคิดเห็นที่เก้า

    • เวลาแฝงสั้นมาก อยู่ที่ราว 200ms
    • ใช้โมเดล transformer 7B จึงไม่ได้ฉลาดมากนัก
    • หากใช้โมเดลใหญ่กว่านี้ เวลาแฝงอาจเพิ่มขึ้น
    • สถาปัตยกรรมระบบจำเป็นต้องมีวิธีส่งคำตอบขั้นกลางออกมา
  • ความคิดเห็นที่สิบ

    • ความเร็วในการตอบน่าประทับใจ แต่คุณภาพคำตอบไม่เป็นเช่นนั้น
    • ยกตัวอย่างบทสนทนากับ Moshi
    • ให้คำตอบผิดว่า "2019"
    • ให้ข้อมูลที่ไม่ถูกต้องเกี่ยวกับ COVID-19