1 points par GN⁺ 2024-09-20 | 1 commentaires | Partager sur WhatsApp

Moshi : un modèle voix-texte pour les conversations en temps réel

Présentation de Moshi

  • Moshi est un modèle voix-texte pour les conversations en temps réel ainsi qu’un framework de dialogue vocal bidirectionnel
  • Il utilise Mimi, un codec audio neuronal de streaming à l’état de l’art
  • Mimi convertit l’audio 24 kHz en 12,5 Hz, tout en conservant une bande passante de 1,1 kbps et en le traitant en streaming avec une latence de 80 ms
  • Ses performances sont supérieures à celles des codecs non streaming existants comme SpeechTokenizer (50Hz, 4kbps) ou SemantiCodec (50Hz, 1.3kbps)

Fonctionnement de Moshi

  • Moshi modélise deux flux audio : l’un pour Moshi, l’autre pour l’utilisateur
  • Lors de l’inférence, le flux de l’utilisateur provient de l’entrée audio, tandis que celui de Moshi est échantillonné à partir de la sortie du modèle
  • En plus de ces deux flux audio, Moshi prédit les tokens de texte correspondant à sa propre voix
  • Un petit Depth Transformer modélise les dépendances entre codebooks à un pas de temps donné, et un grand Temporal Transformer de 7B de paramètres modélise les dépendances temporelles
  • Moshi atteint théoriquement une latence de 160 ms et, en pratique, une latence inférieure à 200 ms sur un GPU L4

Caractéristiques de Mimi

  • Mimi s’appuie sur d’anciens codecs audio neuronaux comme SoundStream et EnCodec, en ajoutant des Transformer à l’encodeur et au décodeur
  • Mimi ajuste le stride pour se rapprocher davantage de la cadence moyenne des tokens de texte (~3-4 Hz)
  • Mimi utilise une perte de distillation qui aligne les tokens du premier codebook sur les représentations auto-supervisées de WavLM
  • Mimi montre une forte amélioration de la qualité subjective à faible bitrate en utilisant uniquement une perte d’entraînement adversariale et le feature matching

Structure du dépôt

  • Ce dépôt contient trois versions de la pile d’inférence de Moshi
    • La version Python utilisant PyTorch se trouve dans le répertoire moshi/
    • La version Python utilisant MLX pour les Mac série M se trouve dans le répertoire moshi_mlx/
    • La version Rust utilisée en production se trouve dans le répertoire rust/
  • Le code de la démo live est fourni dans le répertoire client/

Modèles

  • Trois modèles sont publiés
    • Le codec vocal Mimi
    • Moshi affiné avec une voix synthétique masculine (Moshiko)
    • Moshi affiné avec une voix synthétique féminine (Moshika)
  • Chaque modèle est disponible via un dépôt HuggingFace
  • Tous les modèles sont publiés sous licence CC-BY 4.0

Prérequis

  • Python 3.10 minimum est requis, et Python 3.12 est recommandé
  • Pour les exigences spécifiques, se référer à chaque répertoire backend
  • Des commandes d’installation sont fournies pour les clients PyTorch et MLX

Python (PyTorch)

  • L’API basée sur PyTorch se trouve dans le répertoire moshi
  • Elle fournit le tokenizer audio de streaming (mimi) et le modèle de langage (moshi)
  • Pour l’exécuter en mode interactif, il faut démarrer le serveur

Python (MLX) pour macOS

  • Après avoir installé moshi_mlx, il est possible d’exécuter l’inférence en local
  • L’interface en ligne de commande est basique et ne dispose pas de fonction d’annulation d’écho

Rust

  • Pour exécuter le serveur d’inférence Rust, utiliser les commandes depuis le répertoire rust
  • Sur macOS, il est possible d’utiliser --features metal à la place de --features cuda

Client

  • L’utilisation de l’interface web est recommandée, car elle fournit aussi une fonction supplémentaire d’annulation d’écho
  • Une interface en ligne de commande est également proposée

Développement

  • Il est possible de cloner le dépôt, de l’installer et de développer dessus

FAQ

  • Vérifier la section des questions fréquentes avant d’ouvrir une issue

Licence

  • La partie Python est sous licence MIT, le backend Rust sous licence Apache
  • Le code du client web est sous licence MIT
  • Les poids des modèles sont sous licence CC-BY 4.0

Citation

  • Si vous utilisez Mimi ou Moshi, citez l’article

Le résumé de GN⁺

  • Moshi est un modèle voix-texte innovant pour les conversations en temps réel, avec une faible latence et une haute qualité
  • Le codec Mimi est plus efficace que les codecs existants et maximise les performances grâce aux Transformer
  • Il peut être utilisé sur diverses plateformes et propose plusieurs versions, dont PyTorch, MLX et Rust
  • Il est particulièrement utile pour les développeurs d’applications de conversation en temps réel, notamment lorsque la faible latence est essentielle
  • Parmi les projets similaires, on peut citer WaveNet de Google et Jukebox d’OpenAI

1 commentaires

 
GN⁺ 2024-09-20
Commentaires sur Hacker News
  • Premier commentaire

    • La latence est très faible, ce qui constitue une grande réussite pour un modèle open source
    • La qualité des réponses est inférieure à celle des très bons LLM récents
    • Cela rappelle les LLM de 2019
    • Sur le plan audio, c’est largement réussi, mais il faudrait davantage se concentrer sur la qualité des réponses
  • Deuxième commentaire

    • A trouvé sur YouTube une démo amusante datant d’il y a quelques mois
    • Est convaincu que cela s’est amélioré depuis
  • Troisième commentaire

    • Développe une solution de voix en temps réel -> LLM -> sortie vocale
    • Les codecs audio neuronaux en streaming sont l’aspect le plus intéressant
    • Du point de vue produit, il faut une étape d’appel d’outils/de fonctions plutôt qu’une connexion directe au LLM
    • Le développement de tincans est terminé, mais cette direction présente un fort potentiel d’évolution
  • Quatrième commentaire

    • Moshi est sous licence CC-BY
    • Il existe un modèle similaire récent en 7B publié sous Apache v2
  • Cinquième commentaire

    • Se demande s’il existe un moyen pratique de fournir une interface TTS dans le terminal a-shell sur iPad
  • Sixième commentaire

    • Il y a eu récemment beaucoup de progrès dans le domaine des LM avec prise en charge de la voix
    • Parmi les projets liés, on trouve LLaMA-Omni et mini-omni
  • Septième commentaire

    • Le serveur d’inférence a été écrit en Rust et utilise la crate Candle de huggingface
    • L’un des auteurs de Moshi est aussi l’un des principaux auteurs de Candle
    • Est en train de construire une stack d’inférence basée sur Candle
  • Huitième commentaire

    • D’après l’essai, le système répond immédiatement, mais donne la réponse réelle à la question plus tard
    • Il peut parfois entrer dans une boucle
  • Neuvième commentaire

    • La latence est très faible, autour de 200 ms
    • Le modèle n’est pas extrêmement intelligent, puisqu’il utilise un transformer 7B
    • Avec un modèle plus grand, la latence pourrait augmenter
    • L’architecture du système a besoin d’un moyen de fournir des réponses intermédiaires
  • Dixième commentaire

    • La vitesse de réponse est impressionnante, mais pas la qualité des réponses
    • Fournit un exemple de conversation avec Moshi
    • Donne la réponse erronée « 2019 »
    • Donne des informations erronées sur le COVID-19