CoolFace
Modelpublic

ottema/nemotron-3.5-asr-ptbr

sourceHugging Faceopenmdw-1.1updated 2mo agoView on Hugging Face
1likes231downloads
Model Card

Nemotron 3.5 ASR — Brazilian Portuguese

Adaptação para português brasileiro do `nvidia/nemotron-3.5-asr-streaming-0.6b`, com fine-tuning em aproximadamente 366 mil amostras de fala PT-BR (CORAA + Multilingual LibriSpeech + Mozilla Common Voice 9.0).

O modelo é indicado para reconhecimento de fala em português brasileiro em aplicações de batch e streaming de baixa latência.

Destaques

  • —600 milhões de parâmetros
  • —Especializado em português brasileiro
  • —Encoder Cache-Aware FastConformer + decoder RNNT
  • —Streaming nativo com chunk sizes configuráveis (80 ms a 1.12 s)
  • —Compatível com NVIDIA NeMo
  • —WER normalizado menor que o modelo base (zero-shot) e que o Whisper Large v3 no split oficial de teste do CORAA

A arquitetura e o tokenizer são herdados integralmente do checkpoint base da NVIDIA. O fine-tuning adapta as representações acústicas e linguísticas para fala em português brasileiro.

Benchmark

CORAA — split oficial de teste

Todos os modelos foram avaliados sobre as mesmas 12.676 amostras (≈ 17,6 horas) do split oficial de teste do CORAA, com a mesma rotina de normalização textual aplicada a referência e hipótese.

O split de teste foi usado exclusivamente para avaliação e não foi incluído no fine-tuning. O treinamento utilizou apenas os splits de treino e validação do CORAA.

ModeloWER rawWER normCER norm
Nemotron 3.5 ASR PT-BR (este modelo)20.97%20.96%10.89%
NVIDIA Nemotron 3.5 ASR (zero-shot)45.64%31.87%20.64%
Whisper Large v348.22%25.15%14.77%

WER/CER normalizados: lowercase, remoção de pontuação e normalização de espaços, aplicados igualmente a referência e hipótese.

FLEURS pt-BR — teste

Benchmark público comparável (`google/fleurs`, config pt_br, split test, 919 amostras), avaliado sob a mesma rotina de normalização para ambos os modelos:

ModeloWER rawWER normCER norm
Nemotron 3.5 ASR PT-BR (este modelo)28.63%10.37%5.16%
NVIDIA Nemotron 3.5 ASR (zero-shot)21.93%13.86%8.31%

Para referência, o card do modelo base NVIDIA reporta 5.48% WER em FLEURS Portuguese (LangID, chunk 1.12 s) sob a normalização deles — condições de normalização e decoding diferentes das usadas aqui. Portanto, o resultado da NVIDIA não deve ser interpretado como uma comparação direta ou como evidência de regressão deste checkpoint.

A diferença entre WER raw (28.63%) e normalizado (10.37%) ocorre principalmente porque o modelo não foi otimizado para reproduzir pontuação e capitalização das referências do FLEURS. Para aplicações focadas no conteúdo lexical da transcrição, o WER normalizado é a métrica mais representativa.

Comparação por amostra vs Whisper Large v3

Comparando o WER normalizado dos dois modelos amostra a amostra (vitória = WER estritamente menor):

  • —Este modelo venceu em 37.5% das amostras
  • —Whisper Large v3 venceu em 23.1%
  • —Os 39.4% restantes foram empates

Na análise comparativa de erros, este modelo produziu 66 casos classificados como alucinação, contra 223 do Whisper Large v3 (cerca de 70% a menos). Critério: classificação por heurística sobre os pares referência/hipótese — hipóteses contendo inserções sem correspondência lexical com a referência. Esses números são exploratórios e não devem ser interpretados como uma avaliação humana formal de alucinação.

Configuração da avaliação

  • —Nemotron (ambos): NeMo 2.8.0rc0, decoding greedy RNNT, transcrição offline em batch (não-streaming), target_lang="pt-BR"
  • —Whisper Large v3: pacote openai-whisper, whisper.load_model("large"), transcribe(language="pt") com parâmetros default de decoding, fp16 em GPU
  • —Áudio: 16 kHz mono
  • —Método: mesmos áudios e referências para todos os modelos; normalização idêntica aplicada a referência e hipótese (lowercase, remoção de pontuação, colapso de espaços)

Uso

python
import nemo.collections.asr as nemo_asr

model = nemo_asr.models.ASRModel.from_pretrained("ottema/nemotron-3.5-asr-ptbr")

outputs = model.transcribe(["audio.wav"], target_lang="pt-BR")

print(outputs[0].text)

Para melhores resultados, use áudio mono a 16 kHz. Testado com NeMo 2.8.0rc0; compatibilidade com outras versões pode variar.

Streaming cache-aware

O modelo herda a arquitetura de streaming cache-aware do checkpoint base. A inferência streaming pode ser feita com os utilitários do NeMo:

bash
python examples/asr/asr_cache_aware_streaming/speech_to_text_cache_aware_streaming_infer.py \
    model_path=nemotron-3.5-asr-ptbr.nemo \
    dataset_manifest=manifest.json \
    target_lang=pt-BR \
    att_context_size="[56,13]"

Valide a configuração de contexto/chunk desejada contra a versão do NeMo em uso antes de deploy em produção.

Dados de treino

DatasetUsoLicença
CORAASplits oficiais de treino/validação no fine-tuning; split de teste somente para avaliaçãoCC BY-SA 4.0
Multilingual LibriSpeech (PT)TreinoCC BY 4.0
Mozilla Common Voice 9.0 (PT)TreinoCC0

Total: 366.317 amostras (≈ 264 horas de áudio) de fine-tuning. Este checkpoint não distribui os áudios originais; usuários devem cumprir as licenças das respectivas fontes de dados.

Configuração do fine-tuning

  • —Épocas configuradas: 15 (5.000 batches por época)
  • —Duração máxima de batch: 20 segundos
  • —Acumulação de gradiente: 10 passos
  • —Learning rate: 5e-5
  • —GPU: RTX A4500 20GB, precisão mista
  • —Checkpoint selecionado por menor val_wer
  • —Modelo base: nvidia/nemotron-3.5-asr-streaming-0.6b

Usos pretendidos

  • —Transcrição de fala em português brasileiro
  • —Aplicações de atendimento e contact-center
  • —Transcrição de reuniões
  • —Interfaces de voz
  • —Pesquisa em ASR streaming
  • —Fine-tuning para domínios específicos
  • —Pipelines locais/privados de processamento de fala

Avalie o modelo no seu próprio domínio de áudio antes de uso em produção.

Requisitos aproximados

  • —Download do checkpoint: ~2.55 GB (formato .nemo)
  • —Inferência recomendada: GPU NVIDIA com ≥ 4 GB de VRAM (testado em RTX A4500 20 GB)
  • —Framework testado: NeMo 2.8.0rc0
  • —Áudio: WAV mono, 16 kHz
  • —Decoding padrão do benchmark: greedy RNNT (offline em batch)
  • —Funciona em CPU, porém significativamente mais lento

Exemplo

Transcrição de uma amostra do split de teste do CORAA:

Referência: "Certo, e aí, quanto tempo você mora aqui, né, nesse bairro?" Transcrição do modelo: "certo e aí quanto tempo você mora aqui né nesse bairro"

Limitações

  • —Otimizado para português brasileiro; o desempenho em outros idiomas do modelo base pode ter degradado (catastrophic forgetting não avaliado).
  • —O desempenho varia com sotaque, qualidade de gravação, ruído de fundo, microfone e domínio.
  • —O benchmark não garante desempenho equivalente em ligações telefônicas, fala médica, áudio far-field ou outros domínios especializados.
  • —Casos raros de repetição de tokens foram observados em ~0.14% das amostras de teste.
  • —O modelo pode produzir texto incorreto ou fabricado, especialmente com silêncio, ruído ou áudio fora de domínio. Revisão humana é recomendada para aplicações de alto impacto.

Licença

Distribuído sob a OpenMDW-1.1, herdada do modelo base NVIDIA. Os datasets de treino mantêm suas próprias licenças e requisitos de atribuição.

Agradecimentos

Este trabalho é baseado no NVIDIA Nemotron 3.5 ASR e no framework NVIDIA NeMo, e agradece às equipes e comunidades do CORAA, Multilingual LibriSpeech e Mozilla Common Voice.

Desenvolvido e ajustado por Ottema AI como parte da nossa pesquisa em tecnologias de fala acessíveis para o português brasileiro.