1 pontos por GN⁺ 2024-09-20 | 1 comentários | Compartilhar no WhatsApp

Moshi: modelo baseado em voz e texto para conversas em tempo real

Introdução ao Moshi

  • Moshi é um modelo baseado em voz e texto para conversas em tempo real e também um framework de conversação por voz bidirecional
  • Usa o Mimi, um codec de áudio neural de streaming de última geração
  • O Mimi converte áudio de 24 kHz para 12,5 Hz e processa em streaming com latência de 80 ms, mantendo uma largura de banda de 1,1 kbps
  • Apresenta desempenho superior ao de codecs não streaming existentes, como SpeechTokenizer (50Hz, 4kbps) e SemantiCodec (50Hz, 1,3kbps)

Como o Moshi funciona

  • O Moshi modela dois fluxos de áudio: um do Moshi e outro do usuário
  • Durante a inferência, o fluxo do usuário vem da entrada de áudio, enquanto o fluxo do Moshi é amostrado a partir da saída do modelo
  • Junto com esses dois fluxos de áudio, o Moshi prevê os tokens de texto correspondentes à sua própria fala
  • Um pequeno Depth Transformer modela as dependências entre codebooks em um determinado passo temporal, e um grande Temporal Transformer de 7B parâmetros modela as dependências temporais
  • O Moshi atinge teoricamente 160 ms de latência e, na prática, fica abaixo de 200 ms em uma GPU L4

Características do Mimi

  • O Mimi é baseado em codecs de áudio neurais anteriores, como SoundStream e EnCodec, com a adição de Transformer no codificador e no decodificador
  • O Mimi ajusta o stride para se aproximar mais da taxa média de quadros dos tokens de texto (~3-4 Hz)
  • O Mimi usa uma perda de destilação para alinhar o primeiro token do codebook com as representações auto-supervisionadas do WavLM
  • O Mimi mostra grande melhora na qualidade subjetiva mesmo em bitrates baixos, usando apenas perda de treinamento adversarial e feature matching

Estrutura do repositório

  • Este repositório contém três versões da stack de inferência do Moshi
    • A versão em Python usando PyTorch está no diretório moshi/
    • A versão em Python usando MLX para Macs da série M está no diretório moshi_mlx/
    • A versão em Rust usada em produção está no diretório rust/
  • O código da demo ao vivo é fornecido no diretório client/

Modelos

  • Três modelos foram publicados
    • O codec de voz Mimi
    • Moshi ajustado com voz sintética masculina (Moshiko)
    • Moshi ajustado com voz sintética feminina (Moshika)
  • Cada modelo está disponível em um repositório no HuggingFace
  • Todos os modelos são publicados sob a licença CC-BY 4.0

Requisitos

  • É necessário no mínimo Python 3.10, sendo Python 3.12 o recomendado
  • Para requisitos específicos, consulte cada diretório de backend
  • São fornecidos comandos de instalação para os clientes PyTorch e MLX

Python (PyTorch)

  • A API baseada em PyTorch está no diretório moshi
  • Ela fornece o tokenizador de áudio em streaming (mimi) e o modelo de linguagem (moshi)
  • Para executar no modo interativo, é necessário iniciar o servidor

Python (MLX) para macOS

  • Após instalar moshi_mlx, é possível executar inferência localmente
  • A interface de linha de comando é básica e não possui cancelamento de eco

Rust

  • Para executar o servidor de inferência em Rust, use os comandos no diretório rust
  • No macOS, é possível usar --features metal em vez de --features cuda

Cliente

  • Recomenda-se usar a interface web, que oferece funcionalidades adicionais de cancelamento de eco
  • Uma interface de linha de comando também é fornecida

Desenvolvimento

  • É possível clonar o repositório para instalar e desenvolver

FAQ

  • Antes de abrir uma issue, verifique a seção de perguntas frequentes

Licença

  • A parte em Python usa licença MIT, e o backend em Rust usa licença Apache
  • O código do cliente web usa licença MIT
  • Os pesos dos modelos usam licença CC-BY 4.0

Citação

  • Ao usar Mimi ou Moshi, cite o artigo

Resumo do GN⁺

  • O Moshi é um modelo inovador de voz e texto para conversas em tempo real, com baixa latência e alta qualidade
  • O codec Mimi é mais eficiente que codecs existentes e maximiza o desempenho por meio de Transformer
  • Pode ser usado em várias plataformas e oferece diferentes versões, como PyTorch, MLX e Rust
  • É muito útil para desenvolvedores de aplicações de conversação em tempo real, especialmente quando baixa latência é essencial
  • Outros projetos com funcionalidades semelhantes incluem o WaveNet, do Google, e o Jukebox, da OpenAI

1 comentários

 
GN⁺ 2024-09-20
Comentários do Hacker News
  • Primeiro comentário

    • A latência é muito baixa, o que é um grande feito para um modelo open source
    • A qualidade das respostas fica abaixo dos LLMs muito bons mais recentes
    • Lembra os LLMs de 2019
    • No lado de áudio, foi bem o suficiente, mas precisa focar mais na qualidade das respostas
  • Segundo comentário

    • Encontrou uma demo interessante de alguns meses atrás no YouTube
    • Tem certeza de que já deve ter melhorado agora
  • Terceiro comentário

    • Está desenvolvendo uma solução em tempo real de voz -> LLM -> saída de voz
    • Codecs neurais de áudio em streaming são a parte mais interessante
    • Do ponto de vista de produto, é necessária uma etapa de chamada de ferramentas/funções em vez de ligar diretamente ao LLM
    • O desenvolvimento do tincans foi encerrado, mas há grande potencial de evolução nessa direção
  • Quarto comentário

    • Moshi está sob licença CC-BY
    • Há um modelo similar recente de 7b lançado sob Apache v2
  • Quinto comentário

    • Quer saber se existe uma maneira conveniente de fornecer uma interface TTS no terminal a-shell do iPad
  • Sexto comentário

    • Houve muito avanço recentemente na área de LMs com suporte a voz
    • Há projetos relacionados como LLaMA-Omni e mini-omni
  • Sétimo comentário

    • O servidor de inferência foi escrito em Rust e usa o crate Candle, da Hugging Face
    • Um dos autores do Moshi é um dos principais autores do Candle
    • Está construindo uma stack de inferência baseada em Candle
  • Oitavo comentário

    • Ao testar, responde imediatamente, mas a resposta à pergunta real vem depois
    • Às vezes pode entrar em loop
  • Nono comentário

    • A latência é muito baixa, cerca de 200 ms
    • Não é extremamente inteligente por usar um modelo transformer de 7B
    • Usar um modelo maior pode aumentar a latência
    • A arquitetura do sistema precisa de uma forma de fornecer respostas intermediárias
  • Décimo comentário

    • A velocidade de resposta é impressionante, mas a qualidade das respostas não
    • Fornece um exemplo de conversa com o Moshi
    • Dá a resposta incorreta "2019"
    • Fornece informações incorretas sobre a COVID-19