A Liquid AI publicou o LiquidCodec, um codec de áudio em streaming com cerca de 74 milhões de parâmetros, que serve de base aos seus modelos LFM3-Audio-2B e LFM3-Omni-2B. Este transforma a fala em tokens, unidades discretas que um modelo de linguagem pode prever, reconvertendo depois esses tokens em áudio. Os pesos estão disponíveis no Hugging Face.
O LiquidCodec processa um som amostrado a 24 kHz e divide-o em tramas de 80 ms. Cada trama torna-se 12 tokens, distribuídos por 12 fluxos, de acordo com a ficha do modelo LFM3-Audio-2B. O codec substitui o Mimi, da Kyutai, que a Liquid AI utilizava no LFM2-Audio-1.5B. O Mimi tem 96,2 milhões de parâmetros.
Um funcionamento em três etapas
O funcionamento baseia-se numa cadeia em três tempos: codificação, quantização, descodificação. A Liquid AI utiliza blocos da sua arquitetura LFM3 tanto no codificador como no descodificador, duas partes simétricas. O codificador é totalmente causal, ou seja, baseia-se apenas nos sons já recebidos, o que é adequado para streaming.
Para a quantização, o LiquidCodec utiliza um método chamado GFSQ (grouped finite scalar quantization) em vez da RVQ (residual vector quantization). Na RVQ, cada dicionário de códigos corrige o que o anterior não capturou. Com a GFSQ, os grupos são independentes, permitindo que os 12 fluxos sejam previstos em paralelo por transformadores do tipo MaskGIT. O descodificador prevê diretamente os coeficientes espectrais, sem a etapa de sobreamostragem por convolução transposta, frequentemente dispendiosa nos descodificadores de ondas.
O treino decorreu em duas fases. A primeira utilizou 264 000 horas de fala em 107 línguas, sem perdas adversarial. A segunda foi afinada com 55 000 horas de fala de banda larga (24 kHz ou mais), com críticas adversarial. Segundo a Liquid AI, esta etapa eliminou os artefactos metálicos remanescentes. Uma última etapa, a quantização consciente do treino (QAT) apenas no descodificador, visa a inferência em dispositivos de periferia.
Velocidade e qualidade segundo a Liquid AI
A Liquid AI mediu a velocidade em FP32 num único thread de CPU de um MacBook Pro equipado com um chip Apple M4 Max. Segundo estes números, que são declarativos, o LiquidCodec processa a codificação a cerca de 361 vezes o tempo real e a descodificação a cerca de 87 vezes. O fator tempo real (RTF) é o tempo de processamento dividido pela duração do áudio: quanto mais baixo, mais rápido é o processamento. O RTF de codificação é de 0,0028, contra 0,0361 para o Mimi, 0,2145 para o NanoCodec e 0,7359 para o X-Codec 2. Em descodificação, é de 0,0115, contra 0,0329, 0,2543 e 0,0379.
Para a qualidade, a Liquid AI utilizou oito conjuntos de teste: LibriSpeech test-clean, Seed-TTS em inglês e mandarim, e cinco línguas de FLEURS (alemão, francês, mandarim, japonês, coreano). O LiquidCodec obtém a melhor pontuação ViSQOL e a menor distância de mel nos oito conjuntos. No LibriSpeech, a pontuação ViSQOL atinge 4,319, contra 4,219 para o NanoCodec, 4,119 para o X-Codec 2 e 4,031 para o Mimi. Em testes de síntese de voz treinados nos tokens de cada codec, o LiquidCodec apresenta a melhor pontuação UTMOSv2 nos oito conjuntos. A taxa de erro de palavras no LibriSpeech é de 3,15 %, contra 6,27 % para o Mimi.
O NanoCodec obtém, no entanto, uma melhor pontuação PESQ (WB) em sete dos oito conjuntos, e supera o LiquidCodec em similaridade de locutor no LibriSpeech (SECS 0,836 contra 0,785).
Implementação
O codec carrega-se com o Hugging Face Transformers, ativando trust_remote_code=True. A função encode() produz os códigos de áudio e decode() restitui a forma de onda. Uma classe nativa, LiquidCodecStreamingCache, permite uma descodificação pedaço a pedaço. Os exemplos da ficha utilizam processadores gráficos (GPU) CUDA em bfloat16.
Para dispositivos embarcados, a Liquid AI propõe versões GGUF Q4_0, Q4_K_M e Q8_0 destinadas ao llama.cpp, bem como repositórios GGUF para o LFM3-Audio-2B e LFM3-Omni-2B. Segundo a empresa, a combinação de Q4_0 e da QAT do descodificador reduz a pegada deste último por um fator de 3,5. A pontuação ViSQOL no LibriSpeech passa então de 4,319 para 4,292.
