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
Comentários do Hacker News
Primeiro comentário
Segundo comentário
Terceiro comentário
Quarto comentário
Quinto comentário
Sexto comentário
Sétimo comentário
Oitavo comentário
Nono comentário
Décimo comentário