- 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
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
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
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
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
Incentivar as pessoas a ignorar os tons é perigoso. Se eles realmente não fossem importantes, já teriam desaparecido
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
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
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
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”
O problema é especialmente o hábito, vindo do inglês, de expressar incerteza pela entonação
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
Me arrependo de não ter imitado isso na época
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
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
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
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