- Moshi, gerçek zamanlı sesli sohbet için ses-metin tabanlı bir model ve full-duplex sesli sohbet framework’üdür; canlı demo ve Hugging Face modelleri sunar
- Depoda araştırma ve deneyler için PyTorch, iPhone/Mac üzerinde cihaz içi çıkarım için MLX, üretim için Rust çıkarım yığınları ayrı tutulur
- Model, Moshi’nin konuşması ve kullanıcı konuşması olmak üzere iki ses akışını ele alır; ayrıca Moshi’nin kendi konuşmasına karşılık gelen metin token’ları olan inner monologue’u da tahmin ederek üretim kalitesini artırır
- Mimi codec’i 24kHz sesi 12.5Hz gösterim ve 1.1kbps bant genişliğiyle streaming olarak işler; 80ms kare gecikmesine sahiptir. Moshi’nin teorik gecikmesi 160ms, L4 GPU’da ölçülen uçtan uca gecikmesi ise en düşük 200ms’dir
- Yayınlanan modeller erkek sentetik ses Moshiko, kadın sentetik ses Moshika ve ses codec’i Mimi’dir; model ağırlıkları CC-BY 4.0, Python ve web client kodu MIT, Rust backend’i Apache lisansıyla sunulur
Moshi’nin amacı ve bileşimi
- Moshi, speech-text foundation model ve gerçek zamanlı sesli sohbet için full-duplex bir framework’tür
- Canlı demo moshi.chat üzerinde sunulur; model koleksiyonu Hugging Face üzerinde yayımlanmıştır
- Depo üç çıkarım yığını içerir
- PyTorch: araştırma ve deneyler için,
moshi/ dizininde yer alır
- MLX: iPhone ve Mac’te cihaz içi çıkarım için,
moshi_mlx/ dizininde yer alır
- Rust: üretim için,
rust/ dizininde yer alır
- Rust tabanlı Mimi implementasyonu ve Python binding’i
rustymimi içerir
- Moshi demosunda kullanılan web UI client kodu
client/ dizinindedir
- Moshi fine-tuning’i ayrı depo kyutai-labs/moshi-finetune içinde ele alınır
İlgili Kyutai modelleri
- Moshi kod tabanı, Moshi’ye benzer multi-stream architecture kullanan Kyutai ile ilgili modelleri çalıştırmak için de kullanılır
Model mimarisi
- Moshi iki ses akışını modeller
- Biri Moshi’nin konuştuğu akış
- Diğeri kullanıcının konuştuğu akış
- Moshi, iki ses akışıyla birlikte kendi konuşmasına karşılık gelen metin token’ları olan inner monologue’u tahmin eder; bu yöntem üretim kalitesini önemli ölçüde iyileştirir
- Küçük bir Depth Transformer, belirli bir zaman adımındaki codebook’lar arası bağımlılıkları modeller
- Büyük 7B parametreli Temporal Transformer, zamansal bağımlılıkları modeller
- Gecikme teorik olarak 160ms’dir
- Mimi kare boyutu 80ms
- Akustik gecikme 80ms
- L4 GPU’da pratik uçtan uca gecikme en düşük 200ms’dir
Mimi ses codec’i
- Mimi, 24kHz sesi 12.5Hz gösterime düşüren bir neural audio codec’tir
- Mimi tamamen streaming biçimde çalışır; bant genişliği 1.1kbps, gecikmesi kare boyutu olan 80ms’dir
- README’ye göre Mimi, mevcut streaming olmayan codec’lerden daha iyi performans gösterir
- Mimi, SoundStream ve EnCodec gibi önceki neural audio codec’leri temel alır
- Hem encoder hem decoder tarafına Transformer ekler
- Toplam frame rate’i 12.5Hz’e uyacak şekilde stride’ı ayarlar
- 12.5Hz frame rate, metin token’larının yaklaşık 3~4Hz olan ortalama frame rate’ine daha çok yaklaşır ve Moshi’nin autoregressive adım sayısını azaltır
- SpeechTokenizer’a benzer şekilde Mimi, ilk codebook token’ının WavLM’in self-supervised gösterimiyle hizalanması için distillation loss kullanır
- Mimi, EBEN’e benzer şekilde feature matching ile birlikte yalnızca adversarial training loss kullanır ve düşük bit rate’te bile öznel kaliteyi güçlü biçimde artırır
Yayınlanan modeller ve biçimler
- Yayınlanan modeller üç tanedir
- Moshiko: erkek sentetik sesle fine-tune edilmiş Moshi
- Moshika: kadın sentetik sesle fine-tune edilmiş Moshi
- Mimi: ses codec’i
- Backend’e göre dosya biçimi ve kullanılabilir quantization seçenekleri farklıdır
- Mimi her modelle birlikte gelir ve her zaman aynı checkpoint biçimini kullanır
- PyTorch modelleri
- MLX modelleri
- Rust/Candle modelleri
- Tüm modeller CC-BY 4.0 lisansıyla yayımlanmıştır
Gereksinimler ve kurulum kısıtları
- Python için en az 3.10 gerekir; 3.12 önerilir
- PyTorch ve MLX client’ları PyPI üzerinden kurulabilir
pip install -U moshi
pip install -U moshi_mlx
pip install rustymimi
- Python 3.12 kullanılmıyorsa
moshi_mlx veya bağımlılığı rustymimi kurulurken hata oluşabilir; bu durumda Rust toolchain kurulumu veya Python 3.12’ye geçiş gerekir
- Windows’ta çalışması beklenir ancak resmi destek sağlanmaz
- MLX sürümü MacBook Pro M3 üzerinde test edilmiştir
- Mevcut PyTorch sürümü quantization desteklemediğinden 24GB düzeyinde ciddi GPU belleği gerektirir
- Rust backend’i güncel Rust toolchain gerektirir
- GPU desteğini derlemek için GPU’ya uygun CUDA ve
nvcc gerekir
Çalıştırma biçimleri
-
PyTorch
- PyTorch API’si
moshi dizinindedir; Mimi ses tokenizer’ı ve Moshi dil modelinin streaming sürümlerini sağlar
- Etkileşimli modda önce model sunucusu çalıştırılır, ardından web UI veya komut satırı client’ı kullanılır
python -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
- Web UI varsayılan olarak
localhost:8998 üzerinden erişilir
- Uzak makinedeki GPU’ya HTTP üzerinden erişildiğinde tarayıcı güvenlik politikaları nedeniyle mikrofon kullanımı engellenebilir
- SSH
-L ile uzak 8998 portu localhost’a yönlendirilebilir
--gradio-tunnel ile her yerden erişilebilen bir tünel oluşturulabilir
- Bu tünel ABD üzerinden geçer ve Avrupa için en fazla 500ms gibi büyük bir gecikme ekleyebilir
--gradio-tunnel-token ile sabit bir secret token belirlenip aynı adres yeniden kullanılabilir
--hf-repo ile farklı bir Hugging Face önceden eğitilmiş modeli seçilebilir
- Komut satırı client’ı da sağlanır; ancak web tarayıcısından farklı olarak echo cancellation yapmaz ve gecikme birikimini telafi etmek için kare atlamaz
python -m moshi.client [--url URL_TO_GRADIO]
-
MLX
moshi_mlx kurulduktan sonra macOS üzerinde yerel çıkarım çalıştırılabilir
python -m moshi_mlx.local -q 4
python -m moshi_mlx.local -q 8
python -m moshi_mlx.local -q 4 --hf-repo kyutai/moshika-mlx-q4
python -m moshi_mlx.local -q 8 --hf-repo kyutai/moshika-mlx-q8
-q ve --hf-repo bayrakları her zaman uyumlu olmalıdır
- MLX komut satırı arayüzü de barebone’dur; echo cancellation ve gecikme birikimi telafisi yapmaz
python -m moshi_mlx.local_web ile web UI çalıştırılabilir; HTTP bağlantısı localhost:8998 üzerinden sunulur
-
Rust
- Rust çıkarım sunucusu
rust dizininden çalıştırılır
cargo run --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json standalone
- macOS’ta
--features cuda yerine --features metal kullanılabilir
config.json yerine config-q8.json kullanılırsa q8 quantization modeli kullanılabilir
- Farklı önceden eğitilmiş model, yapılandırma dosyasındaki
"hf_repo" anahtarı değiştirilerek seçilir
- Sunucu
standalone worker listening çıktısını verdiğinde web UI kullanılabilir
- Rust sunucusu varsayılan olarak HTTPS kullandığı için
https://localhost:8998 üzerinden erişilir
- Tarayıcıda güvenli olmayan site uyarısı görünebilir; Chrome’da “Details” veya “Advanced” üzerinden localhost bağlantısına devam edilebilir
Client ve geliştirme
- Web UI, genel model kalitesine yardımcı olan echo cancellation sunduğu için önerilir
- Komutların çoğu web UI’ı verilen URL üzerinden doğrudan servis eder
- Rust ve Python için komut satırı arayüzleri de sunulur; web UI ile aynı protokolü kullanır ve sunucu tarafında değişiklik gerektirmez
- Web UI build’i
client dizininde yapılır
cd client
npm install
npm run build
- Rust komut satırı client’ı
rust dizininden çalıştırılır
cargo run --bin moshi-cli -r -- tui --host localhost
- Python PyTorch client’ı şu komutla çalıştırılır
python -m moshi.client
- Gradio demosu
gradio-webrtc>=0.0.18 kurulduktan sonra çalıştırılır
python -m moshi.client_gradio --url <moshi-server-url>
docker compose up
Lisans ve atıf
- Python bölümünün kodu MIT lisansıyla sunulur
- Rust backend’i Apache lisansıyla sunulur
- Web client kodu MIT lisansıyla sunulur
- Kodun bir bölümü MIT lisanslı AudioCraft üzerine kuruludur
- Model ağırlıkları CC-BY 4.0 lisansıyla yayımlanmıştır
- Mimi veya Moshi kullanıldığında
Moshi: a speech-text foundation model for real-time dialogue makalesine atıf yapılması istenir
1 yorum
Hacker News yorumları
Buradaki yorumların neredeyse tamamı olumsuz olduğu için geri bildirim bırakayım: gecikme süresi çok iyi, hatta fazla iyi; sık sık sözümü kesiyormuş gibi hissettirecek kadar.
Açık kaynak bir model için büyük bir başarı olduğunu düşünüyorum. Ancak bugünlerde insanlar çok başarılı büyük dil modellerine fazlasıyla alıştı ve bu modelin yanıt içerik kalitesi şu anki en üst düzey modellerden epey uzak. Daha çok 2019 civarında gördüğümüz büyük dil modellerine benziyor; ses tarafı “yeterince iyi” seviyeye gelmiş gibi, bundan sonra yanıt kalitesine odaklanmak daha iyi olur.
Doğal soru şu: Moshi deneyimini bozmadan “daha iyi bir büyük dil modeli”ni buna aktarmanın bir yolu var mı?
Moshi CC-BY lisanslı; ayrıca yakın zamanda Apache v2 ile yayımlanan, benzer 7B ölçeğinde bir ses-metin gerçek zamanlı sohbet modeli de var: https://tincans.ai/slm3 / https://huggingface.co/collections/tincans-ai/gazelle-v02-65...
Son dönemde ses destekli dil modeli tarafında çok geliştirme yapılıyor. Örneğin https://github.com/ictnlp/LLaMA-Omni, https://github.com/gpt-omni/mini-omni var.
Bunların çıkarım sunucusu, huggingface’in Candle crate’ini kullanarak Rust ile yazılmış. Moshi yazarlarından biri aynı zamanda Candle’ın baş geliştiricisi.
Biz de Candle üzerinde bir çıkarım yığını geliştiriyoruz ve kullanmaktan oldukça memnunuz.
YouTube’da demo ararken birkaç ay öncesinden komik bir video buldum: https://youtu.be/coroLWOS7II?si=TeVghP_Zi0P9exQh
Şimdi kesin iyileşmiştir diye düşünüyorum :-)
İlginç. Burada gecikme süresine odaklanmaları hoşuma gitti; yerel GPU’da gerçekten yaklaşık 200 ms olduğunu iddia ediyorlar.
7B Transformer modeli tabanlı olduğu için çok zeki olmayacaktır. 70B bir modelin gecikmesinin 1 saniye civarında olduğunu hayal edersek, “model şu anda konuşuyor”u sözle belirten ara tepkiler, hızlı ilk tepki veren 7B/Phi-3 sınıfı bir model ve ardından büyük modele bağlanan bir sistem mimarisi mümkün görünüyor. Phi-3 modeline de gerçek doğru yanıtı alıp gerekirse özür dileme ve düzeltme gibi ayarlama işleri verilebilir.
Anekdot düzeyinde, insanların beyinlerinin de çoğu zaman böyle çalıştığını düşünüyorum. Hızlı tepki verip 1-2 saniye sonra düzeltme veya ekleme yapıyorlar. Tabii tam tersine hiç düzeltme yapmayanlar da var; uzun süre durup tamamen düşünülmüş bir yanıt verenler de.
Denedim; herhangi bir e-posta adresi girmek yeterliydi. Anında, neredeyse hemen, hatta ben hâlâ konuşurken yanıt veriyor.
Ama bu sadece dolgu cümlesi gibi görünüyordu; önbelleğe alınmış bir yanıt da olabilir. Asıl sorduğum şeye yanıt çok daha sonra geliyor ve arada döngüye girmemesi gerekiyor.
Gerçek zamanlı ses → büyük dil modeli → ses çıktısı çözümü geliştiriyorum; burada bence en ilginç kısım akışlı sinir ağı ses codec’i. Çünkü Whisper ile konuşmadan metne dönüşümü gerçekten düzgün şekilde akışlı yapmak zor.
Ancak ürün açısından bakınca bunu ille de doğrudan büyük dil modeline verip yanıt üretmesini istemem. Birçok kullanım senaryosunda yanıt öncesinde araç/fonksiyon çağrısı adımı gerektiğini düşünüyorum. Bu yönde çalışan biriyle her zaman konuşmak isterim.
Aşağıda bahsedilen tincans da harika görünüyor. Ama tincans geliştirmesi bitmiş deniyor; bu yönde %10000 alan var. Chris bunu okuyorsa, büyük dil modelleri ne kadar iyi olursa olsun bunun çözdüğü ürün/iş kullanım senaryosunu mutlaka anlatmak isterim.
Büyük dil modeli doğrudan yanıt vermiyor; yalnızca önceden hazırlanmış metin-ses çıktısı olan ağaç düğümlerini seçiyor. Kullanıcının konuşmayı bitirip bitirmediğine karar verip deşifre sonucunu modele ileten bir “durma uzunluğu” parametresi var; özellikle karmaşık değil. Ses girdisini doğru ele almanın yolunu ve yalnızca prompt yapısıyla IVR ağacını ortadan kaldıracak kadar modeli yeterince hassas kontrol edip edemeyeceğimi düşünmeye devam ediyorum. Şu anda da oldukça iyi çalışıyor ama geliştirme alanı çok.
Yanıt hızı etkileyici, ama yanıt “kalitesi” öyle değil. İkinci testimin konuşma kaydı şöyleydi:
Moshi: “Merhaba, ne oldu?”
Ben: “Şu an hangi yıldayız?”
Moshi: “Ah, 2019. Sanırım yaklaşık bir yıl önceydi.”
Ben: “Gerçekten 2019 olduğuna emin misin?”
Moshi: “Ah, evet, eminim. Kesinlikle 2019. O sayı sonuncusu için.”
Ben: “COVID-19 nedir?”
Moshi: “Bu nadir bir hastalık. Cilde saldıran aşırı aktif bir bağışıklık sistemi yüzünden oluşur.”
Bu noktadan sonra artık yanıt vermedi.
Moshi şimdiye kadarki en eğlenceli model. Son deneyim burada: https://x.com/tommoor/status/1809051817860354471
Yalnız doğruluk beklememek daha iyi.