1 pontos por GN⁺ 2026-02-01 | 1 comentários | Compartilhar no WhatsApp
  • Para ajudar na prática de pronúncia e tons do chinês, criei eu mesmo um modelo de fala baseado em CTC com 9M de parâmetros, treinado com cerca de 300 horas de dados de voz
  • Usa uma arquitetura de encoder Conformer para capturar tanto características locais da fala quanto contexto global, e com tokenização por unidades de Pinyin+tom diferencia claramente erros de pronúncia
  • Com a perda CTC, avalia em nível de frame o que o usuário realmente pronunciou, e realiza o alinhamento temporal com o algoritmo de Viterbi
  • Mesmo reduzindo o tamanho do modelo de 75M para 9M, quase não houve perda de precisão; após quantização INT8, ele ficou com cerca de 11MB e pode rodar instantaneamente até no navegador web
  • A demo baseada em navegador mostra o potencial de um sistema de correção de pronúncia on-device, e melhorar a qualidade dos dados será o ponto-chave para avanços futuros

Visão geral do modelo de avaliação de pronúncia

  • Para resolver as dificuldades no aprendizado da pronúncia do chinês, treinei eu mesmo um pequeno modelo de fala que pontua a pronúncia
    • Usei cerca de 300 horas de dados de voz transcritos (AISHELL-1, Primewords)
    • Disponibilizado em um formato que pode rodar diretamente no navegador
  • Os métodos existentes de visualização de pitch eram instáveis por causa de ruído, diferenças de fala etc., e foi confirmado que uma abordagem baseada em dados é mais eficaz
  • O objetivo é implementar um sistema on-device de Computer-Assisted Pronunciation Training (CAPT) sem APIs comerciais

Estrutura do modelo e método de treinamento

  • Foi adotada uma estrutura de encoder Conformer + perda CTC
    • A CNN captura características acústicas de curtos intervalos de tempo (ex.: zh vs z)
    • O Transformer processa padrões contextuais de tom (ex.: tone sandhi)
  • O método CTC produz distribuições de probabilidade por frame para avaliar diretamente os fonemas realmente pronunciados
    • Usa o token `` para alinhar repetições e espaços em branco
    • Reflete exatamente o que foi pronunciado, sem correção automática

Tokenização e alinhamento

  • Cada combinação de Pinyin+tom é definida como um único token
    • Ex.: zhong1 e zhong4 são tokens diferentes
    • O tom neutro é padronizado como tom 5 (ma5)
    • Total de 1.254 tokens + ,
  • O algoritmo de Viterbi calcula o caminho ótimo entre frames de áudio e tokens
    • Ex.: ao pronunciar “Nǐ hǎo”, distingue os trechos de ni3 e hao3

Redução do modelo e desempenho

  • O modelo inicial de 75M de parâmetros foi reduzido até 9M
    • 75M: TER 4,83%, Tone Accuracy 98,47%
    • 9M: TER 5,27%, Tone Accuracy 98,29%
    • A perda de precisão foi mínima, sugerindo que se trata de uma tarefa limitada por dados (data-bound)
  • O modelo FP32 (37MB) foi reduzido para 11MB com quantização INT8
    • Pode ser carregado imediatamente no navegador via onnxruntime-web

Erros de alinhamento e correção

  • Surgiu um problema em que trechos de silêncio distorciam a avaliação da pronúncia
    • Ex.: 1 segundo de silêncio antes da pronúncia de “我喜欢…” era alinhado incorretamente com wo3, resultando em nota zero
  • Solução: excluir frames de silêncio do cálculo da pontuação
    • Filtrar frames cuja probabilidade de `` seja 0,7 ou maior
    • Após a correção, a pontuação de confiança da primeira sílaba melhorou de 0,0 para 0,99

Resultados e limitações

  • Durante o beta test, foi possível perceber efeito na correção de pronúncia
    • O modelo avalia com muito rigor
  • A precisão cai com fala de nativos e de crianças
    • Como os dados do AISHELL são majoritariamente de fala lida, há diferenças de velocidade e entonação
    • No futuro, será necessário adicionar dados conversacionais, como Common Voice
  • A demo web tem cerca de 13MB e oferece funcionalidade completa de correção de pronúncia em um tamanho mais leve que a maioria dos sites

1 comentários

 
GN⁺ 2026-02-01
Comentários do Hacker News
  • Obrigado por este projeto realmente incrível
    Mas achei estranho que na frase “我想学中文” ele reconheceu “wén” como “guó”
    Isso parece indicar que o modelo aprendeu a estrutura das palavras mais do que os tons. Como “Zhōng guó” aparece muito nos dados de treino, isso provavelmente criou esse viés
    Como foi dito no post do blog, em vez de ser “um modelo que diz qual foi a minha pronúncia real”, ele parece ter uma estrutura que mapeia para a sílaba mais próxima entre 1254 sílabas possíveis

    • Tentei repetir “guó” várias vezes, mas ele não reconheceu as repetições
      Ainda assim, gosto dessa abordagem de aprendizado centrada em fala. Aprender com base em escrita gera confusão porque cada país usa convenções diferentes. Para iniciantes, até o pinyin tem muitos símbolos confusos
  • A ideia e a UI são intuitivas e me impressionaram
    Mas até eu, que sou de Pequim e falo mandarim padrão perfeitamente, tive dificuldade para passar em perguntas fáceis
    No exemplo “你好吃饭了吗”, o reconhecimento dos tons estava errado, e “了” nesse contexto deveria ser “le”, não “liǎo”
    Muita gente se preocupa com tons, mas na prática a comunicação não sofre tanto mesmo quando os tons não estão perfeitos
    Como cada região tem uma entonação diferente, mesmo com tons misturados as pessoas normalmente se entendem bem. Eu recomendaria focar mais em aprendizado orientado por contexto do que em obsessão com tons

    • Como falante nativo, eu discordo: tons são muito importantes
      Se pessoas de dialetos regionais diferentes ainda conseguem se comunicar, é porque 1) a diferença tonal entre regiões vizinhas não costuma ser tão grande, e 2) quando não se entendem, mudam para o mandarim padrão (putonghua)
      A própria existência do chinês como língua depende do sistema tonal. Se os tons estiverem errados, a comunicação fica quase impossível
    • Pela minha experiência estudando até o nível C1 em Taiwan, os tons são importantes no começo, mas o contexto compensa mais conforme sua expressividade aumenta
      Ainda assim, um dos motivos de a China se comunicar tanto por escrito é que, como a pronúncia e os tons variam entre regiões, só pela fala muitas vezes não dá para se entender
    • Entre falantes nativos, mesmo quando os padrões tonais diferem, gramática e entonação são previsíveis o bastante para permitir compreensão, mas isso não vale para aprendizes
      Incentivar as pessoas a ignorar os tons é perigoso. Se eles realmente não fossem importantes, já teriam desaparecido
    • O problema com “了” era um bug de JavaScript e já foi corrigido. O restante pode ser melhorado com um conjunto de dados mais diverso
    • Mesmo que se diga que tons não são tão importantes, há muitos casos como 熊猫(xióngmāo) e 胸毛(xiōngmáo) em que uma diferença tonal muda completamente o sentido
      Quando o contexto é limitado, isso gera confusão, então os tons continuam sendo centrais. Além disso, é preciso reforçar os dados, já que “吃” estava sendo reconhecido como “shi2”
  • Como aprendiz intermediário, criei uma conta só para deixar este feedback
    Quando falo rápido, o rastreamento de fonemas falha e o reconhecimento de tons se desvia
    Por exemplo, se eu digo “他是我的朋友” em velocidade natural, ele reconhece “我” como “de” ou processa “是” como “si”
    Se eu falar devagar e com articulação clara, ele reconhece corretamente
    Também é preciso considerar fenômenos como mudança tonal em sequências de terceiro tom (sandhi tonal). Faz falta um recurso capaz de lidar com a pronúncia em conversa natural

    • A mudança tonal é central na pronúncia do chinês. No momento está mais em nível de iniciante, então ainda precisa melhorar
    • Graças ao feedback, foi adicionado suporte a sandhi tonal. Pediram para avisar se está funcionando bem
    • Também tive a impressão de que a mudança tonal não estava sendo tratada. Mesmo assim, a ideia é realmente ótima
    • Tive o mesmo problema. Será que é porque é “dapangzi”? Brincadeira
  • Para falantes de línguas europeias, aprender chinês ou outra língua tonal é muito difícil
    O ouvido não está acostumado aos tons, então a pessoa acha que está falando certo, mas o nativo não entende

    • Como falante nativo de chinês, sinto que o sistema vocálico do inglês é muito mais difícil
      No inglês, as vogais mudam conforme a região, e é difícil distinguir contrastes como “done vs down” e “beat vs bit”
      Já o espanhol foi bem mais fácil de aprender, porque o sistema vocálico é simples
    • Então entendo por que chineses erram pronúncia em inglês ou alemão. O foco de atenção é diferente
    • Para quem não está acostumado com tons ou altura melódica, isso é enlouquecedoramente difícil, mas ferramentas assim tornam o processo menos doloroso
      Quando fui aprender o acento tonal do japonês, no começo eu não percebia diferença nenhuma, mas com treino repetido comecei a ouvir
      Só comecei a pegar o jeito quando percebi que até no inglês há padrões de pitch, como em “uh-oh”
    • Às vezes, mesmo quando digo frases simples, as pessoas não entendem.
      O problema é especialmente o hábito, vindo do inglês, de expressar incerteza pela entonação
    • Mas tons nem são tão difíceis assim. O realmente difícil é o volume de vocabulário
      Tons e gramática são a base aprendida no início, e depois, por anos, a maior parte do esforço vai para memorizar palavras
      A verdadeira dificuldade do chinês está na falta de vocabulário compartilhado e no sistema de escrita não fonêmico
  • Funciona bem só quando se fala palavra por palavra; em frases completas ou em velocidade natural, há muitos erros de reconhecimento
    Sou falante nativo com certificação 2A em mandarim padrão, mas ainda assim, falando de forma casual, surgem erros
    O modelo não consegue distinguir a diferença entre conversa cotidiana e pronúncia formal

  • Quando estudava em Taiwan, para memorizar os tons eu praticava desenhando com a mão o contorno tonal
    Eu parecia um estrangeiro maluco, mas funcionava muito bem
    Como as diferenças de sotaque regional também são grandes, seria bom coletar dados de referência por falante nativo

    • Na minha aula também havia um aluno que pronunciava os tons de forma exagerada, mas depois acabou desenvolvendo a pronúncia mais precisa
      Me arrependo de não ter imitado isso na época
    • Recomendo a aula no YouTube do Mike Laoshi
    • Eu também testei só com alguns amigos e estou pensando se devo definir a região como parâmetro. Se eu treinar todos os dialetos, talvez o sistema fique permissivo demais
    • Isso lembra um pouco o treino de solfejo, em que se expressa a altura melódica com gestos da mão
    • Os gestos com a mão ajudam especialmente ao memorizar palavras novas. Marcar os tons com os dedos faz lembrar melhor
  • Sou nativo, mas o demo não conseguiu reconhecer minha pronúncia
    Provavelmente foi por causa do ruído de fundo. Minha filha estava vendo desenho ao lado

    • Por enquanto ele é sensível a ruído de fundo, mas já está sendo treinada uma versão melhorada com aumento de dados
  • Projeto realmente incrível, mas eu gostaria de aconselhar a não depender demais de feedback externo
    O núcleo da correção de pronúncia é treinar o ouvido. Mesmo em aprendizes adultos ainda há neuroplasticidade, então é preciso exercitar a escuta com pares mínimos e afins
    Isso melhora muito não só a pronúncia, mas também a compreensão auditiva e a velocidade de aquisição de vocabulário

    • Estou desenvolvendo o Phrasing.app e concordo totalmente com esse conselho
      A sincronização texto-áudio (estilo karaokê) foi muito mais eficaz do que SST
      Foi muito útil para o aprendizado o método em que o usuário ouve a própria voz sobreposta ao áudio original e percebe por conta própria a diferença
    • Penso o mesmo. Ouvir é a base do falar
      Em vez de decorar o tom de cada palavra, imitar exatamente a pronúncia nativa é muito mais natural
  • Foi impressionante ver tudo rodando no navegador com ONNX Runtime Web
    A abordagem de isolar apenas o problema dos tons por alinhamento forçado, sem tentar adivinhar o significado, foi inteligente
    Em versões futuras, adicionar sandhi tonal na etapa de pós-processamento deixaria a ferramenta mais útil para praticar velocidade de conversa

  • Seria bom ter um modo pinyin. Eu só estou aprendendo a falar, não a ler caracteres
    Estou organizando meu vocabulário com o webapp de flashcards que eu fiz

    • Boa sugestão, então foi adicionada uma função de alternância para pinyin
    • Também pensei a mesma coisa. Mas fiquei frustrado porque o reconhecimento das consoantes não estava bom. Minha pronúncia nem deve ser tão ruim assim
    • Mais um voto para o modo pinyin