2 points par GN⁺ 2024-09-20 | 1 commentaires | Partager sur WhatsApp
  • LLaMA-Omni est un modèle parole-langage basé sur Llama-3.1-8B-Instruct, qui prend des instructions vocales en entrée et génère simultanément une réponse texte et une réponse vocale
  • Son objectif principal est une interaction vocale à faible latence et de haute qualité ; d’après le README, la latence peut descendre jusqu’à 226 ms
  • Le modèle a été entraîné en moins de 3 jours avec seulement 4 GPU, et fonctionne avec Llama-3.1-8B-Omni, Whisper-large-v3 et le vocodeur HiFi-GAN basé sur des unités
  • La démo Gradio repose sur l’exécution séparée d’un controller, d’un web server et d’un model worker ; en raison de l’instabilité de la lecture audio en streaming dans Gradio, la lecture automatique n’est pas activée
  • Le code est sous Apache-2.0, mais le modèle est réservé à la recherche académique ; l’usage commercial est interdit et nécessite une demande de licence commerciale distincte

Ce que fait LLaMA-Omni

  • LLaMA-Omni est un modèle parole-langage basé sur Llama-3.1-8B-Instruct
  • Il prend des instructions vocales en entrée et génère simultanément une réponse texte et une réponse vocale
  • Il vise une interaction vocale à faible latence et des réponses de haute qualité ; selon les points forts du README, la latence descend jusqu’à 226 ms
  • L’article associé est disponible sur arXiv:2409.06666

Modèles et jeu de données publiés

Mises à jour récentes

  • En mai 2025, LLaMA-Omni 2 a été retenu pour la conférence principale de l’ACL 2025
  • En avril 2025, LLaMA-Omni2 a été publié
    • Il s’agit d’une série de modèles parole-langage allant de 0.5B à 32B paramètres
    • Il améliore la qualité des réponses et de la génération vocale
  • En janvier 2025, LLaMA-Omni a été retenu à l’ICLR 2025

Installation et déroulement de l’exécution

  • L’installation consiste à cloner le dépôt, puis à installer les paquets dans un environnement conda Python 3.10
    • Installer pip==24.0, puis exécuter pip install -e .
  • Des dépendances supplémentaires doivent être installées : fairseq et flash-attn
  • Le démarrage rapide nécessite trois éléments
    • télécharger le modèle Llama-3.1-8B-Omni
    • télécharger le modèle Whisper-large-v3
    • télécharger le vocodeur HiFi-GAN basé sur des unités et le fichier config.json

Démo Gradio et inférence locale

  • La démo Gradio se compose de trois processus
    • controller: omni_speech.serve.controller
    • Gradio web server: omni_speech.serve.gradio_web_server
    • model worker: omni_speech.serve.model_worker
  • Une fois la démo lancée, il est possible d’interagir avec LLaMA-3.1-8B-Omni sur localhost:8000
  • La lecture audio en streaming de Gradio étant instable, seule la synthèse audio en streaming est implémentée, et la lecture automatique n’est pas activée
  • Pour l’inférence locale, il faut préparer le fichier d’instructions vocales selon le format de omni_speech/infer/examples, puis exécuter bash omni_speech/infer/run.sh omni_speech/infer/examples

Licence et restrictions d’utilisation

  • Le code est publié sous Apache-2.0 License
  • Le modèle ne peut être utilisé qu’à des fins de recherche académique et l’usage commercial est interdit
  • Dans un cadre académique, l’utilisation, la modification et la distribution sont autorisées, mais la citation de l’article d’origine est requise
  • Pour toute demande d’usage commercial ou d’obtention d’une licence commerciale, il faut contacter fengyang@ict.ac.cn

Projets de base et citation

  • La base de code s’appuie sur LLaVA
  • Une partie du code liée à l’encodeur vocal et à l’adaptateur vocal est empruntée à SLAM-LLM
  • Si ces travaux sont utiles à votre recherche, vous devez citer l’article LLaMA-Omni: Seamless Speech Interaction with Large Language Models
  • Pour toute question, vous pouvez utiliser une GitHub issue ou contacter fangqingkai21b@ict.ac.cn

1 commentaires

 
GN⁺ 2024-09-20
Commentaires sur Hacker News
  • Ce modèle peut-il aussi produire des sons impossibles à exprimer en texte ? Par exemple une demande comme « fais le bruit d’une poule ».

    • S’il peut produire des sons associés à des notations de mots non vocaux, je ne vois pas de raison particulière pour que les onomatopées posent problème.
    • Peut-il aussi comprendre ce genre de sons ? Je me demande s’il peut distinguer si la prononciation ou l’intonation d’un mot est correcte ou non.
    • Presque certainement pas, à mon avis. Ça ressemble à un vocodeur à l’ancienne conçu uniquement pour produire de la parole humaine.
    • Tu parles d’un son du genre « cot-cot-codac » ?
      Mais est-ce qu’il pourrait à la fois prononcer le mot « cot-cot-codac » et produire le véritable caquètement ?
  • Je ne vois pas bien quels avantages ou quel potentiel ce genre de modèle a par rapport à une approche consistant à ajouter de la reconnaissance vocale/synthèse vocale à un modèle purement textuel.
    Si les modèles deviennent plus sophistiqués, l’idée clé est-elle d’interpréter ou de produire correctement l’intonation, le rythme, les émotions, etc., qui se perdent dans la synthèse vocale ?

    • La reconnaissance vocale et la synthèse vocale impliquent beaucoup de perte d’information et de suppositions.
      Un modèle de reconnaissance vocale peut mal reconnaître des mots, alors qu’un LLM audio pourrait comprendre les vrais mots grâce à un contexte plus large. Un modèle de synthèse vocale doit deviner l’intonation et peut se tromper complètement, alors qu’un LLM audio peut apprendre naturellement quel ton employer. Par exemple, s’il s’agit d’une interruption, il peut utiliser un ton plus aigu.
      Rien que pour les interruptions, les systèmes de reconnaissance/synthèse vocale s’appuient généralement sur la détection d’activité vocale et des heuristiques pour décider quand parler ; ils suivent donc souvent une règle consistant à ne parler qu’après que l’utilisateur a cessé de parler. Un LLM audio pourrait apprendre une conversation naturelle, à ne pas monopoliser le temps de parole, et à parler avec plusieurs personnes.
      Un LLM audio pourrait aussi créer de la musique ou des sons, ou dire quelle chanson on fredonne. Il y a beaucoup de nouvelles possibilités.
      Cela dit, si je dis « pourrait apprendre », c’est parce qu’il faut de bonnes données d’entraînement. À ma connaissance, la plupart de ces modèles sont actuellement entraînés en convertissant des jeux de données textuels ordinaires en synthèse vocale ; en pratique, ils ne valent donc pas mieux que des systèmes classiques de reconnaissance/synthèse vocale. C’est bien pour valider l’architecture, mais cela ne montre pas toute son étendue de capacités.
    • Personnellement, j’attends beaucoup de l’utilisation de modèles vocaux comme l’advanced voice mode d’OpenAI pour l’apprentissage des langues.
      Le simple fait de pouvoir parler plus vite ou plus lentement est déjà quelque chose que les systèmes traditionnels de synthèse vocale ne savaient pas faire. En théorie, il pourrait aussi me dire si ma prononciation est correcte, répéter ce que j’ai mal prononcé puis me faire entendre la bonne prononciation pour me corriger.
      Je n’ai pas encore vu de tests sérieux montrant dans quelle mesure l’advanced voice mode d’OpenAI le fait réellement, donc je ne sais pas, mais j’ai envie de l’essayer moi-même. Si d’autres modèles vocaux atteignent ce niveau, ce serait énorme comme outil d’apprentissage des langues.
    • Ce sujet a déjà été beaucoup traité ; on peut par exemple regarder l’article -O d’OpenAI.
      L’un des grands facteurs est la latence due au batching. Il est difficile d’interrompre correctement l’agent, ce qui rend les vraies conversations plus maladroites. Et oui, le multimodal comprend mieux. En revanche, je n’ai pas vu d’analyse sur la reconnaissance des émotions ; je me demande si quelqu’un a vu une analyse de cette capacité de GPT-O.
    • Fondamentalement, il y a une perte d’information lors de la conversion audio→texte. Parfois ce n’est pas important, mais parfois cela peut améliorer significativement la qualité de sortie.
      Il peut aussi y avoir d’autres avantages annexes, comme une meilleure latence des réponses, une meilleure diarisation des locuteurs, ou une meilleure réaction aux pauses pendant une conversation.
    • Si on écrit seulement « Really », personne ne peut connaître l’intonation.
      Même en écrivant « Really? » ou « Really! », il reste une marge d’interprétation. Pour que les interfaces vocales réussissent vraiment, il leur faudra un moment comparable au passage de la recherche pré-Google, médiocre, à Google ; et si le cœur de ce moment consiste à interpréter et générer l’intonation, le rythme et les émotions, alors construire ce genre de modèle a pas mal de sens.
  • Parmi les outils d’exécution de modèles comme Ollama, LM Studio ou llama.cpp, y en a-t-il qui prennent ça en charge ?

  • Donc ce n’est pas une architecture reconnaissance vocale → LLM → synthèse vocale ? Si je hurle comme Chewbacca en entrée, le modèle va-t-il reconnaître que l’entrée n’a aucun sens, ou va-t-il l’interpréter comme des mots quelconques, comme une mauvaise reconnaissance vocale ?

    • Structurellement, ce n’est pas ça, mais il est probablement peu probable qu’il reconnaisse une entrée absurde comme telle. D’après l’article :

      we construct a dataset named InstructS2S-200K by rewriting existing text instruction data and performing speech synthesis
      Il n’a été entraîné que sur des questions lues par synthèse vocale, et n’a jamais vu ni entendu de sons absurdes. Il y a de fortes chances qu’au lieu de demander « ça va ? », il hallucine que tu as posé une question et fabrique une réponse. Il n’existe pas beaucoup de jeux de données audio de vraies voix, et il n’y a pas non plus de version audio de StackOverflow à scraper.

    • Je m’amusais avec ça autrefois. Je réglais Google Translate sur une langue que je ne connaissais pas, comme le chinois, puis je faisais des sons au hasard, et il sortait des phrases anglaises cohérentes mais complètement folles.
      J’avais l’impression que ça marchait particulièrement bien avec les langues tonales.
  • La voix de synthèse vocale dans les clips de démo ressemble étonnamment à Ellen McLain, la comédienne de doublage de Valve.
    https://en.m.wikipedia.org/wiki/Ellen_McLain

    • On dirait que c’est entraîné sur le jeu de données LJ Speech. C’est l’un des meilleurs jeux de données et il est très couramment utilisé.
  • La vitesse semble assez bonne. Récemment, j’ai essayé du chat vocal local avec LMStudio + AnythingLLM ; c’était encore un peu plus lent que ce que je voudrais, et les voix PiperTTS étaient meilleures que ça.

  • Pas mal pour 3 jours d’entraînement. La qualité de la sortie vocale doit encore être peaufinée, mais il sera intéressant de voir ce que donnera un entraînement plus long.

  • J’aimerais qu’il y ait du code d’entraînement ou de fine-tuning. Pour un usage commercial, le fine-tuning de voix semble être une exigence clé.

  • Suis-je le seul à trouver qu’un dépôt GitHub perd beaucoup en crédibilité quand son README contient ce stupide graphique d’évolution des étoiles ?

    • C’est un peu bizarre. Les gens peuvent être fiers de leur travail.
  • Y a-t-il une démo qui montre les performances ?