Detecção automática de idioma na transcrição, e quando desligar
São mais de 90 idiomas com detecção automática. O campo language existe porque a detecção erra em áudio curto e com ruído, e o erro dela custa o transcrito inteiro.
Se você não manda o campo language, a API descobre o idioma sozinha. São mais
de 90 idiomas suportados, e transcrever em qualquer um deles custa o mesmo:
US$ 0,03 por hora de áudio.
Isso resolve o caso de quem recebe áudio de origem desconhecida, que é comum: plataforma com usuário no mundo inteiro, acervo herdado sem metadado, gravação que alguém subiu sem preencher formulário nenhum.
E cria um risco específico, que é o assunto deste post.
O que acontece quando a detecção erra
Erro de idioma não é erro de palavra. Quando o sistema decide que um áudio em português é espanhol, o resultado não sai 10% pior: sai inaproveitável, porque a transcrição inteira é escrita com o vocabulário errado. Uma palavra trocada você corrige no glossário; um idioma trocado você joga fora e reenvia.
Isso muda a economia da decisão. Deixar a detecção automática decidir é grátis; errar custa a transcrição inteira, mais o tempo até alguém perceber.
Quando informar o idioma
A regra é simples: se você sabe, diga.
curl https://api.transcrevo.com/v1/transcripts \
-H "Authorization: Bearer $TRANSCREVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/reuniao.mp3", "language": "pt" }'E você sabe com mais frequência do que parece. O idioma da conta do usuário, a região do produto, o programa que sempre grava em português, o cliente cujo suporte é todo em espanhol: tudo isso é informação que você já tem no banco e que não custa nada passar adiante.
Os três casos em que a detecção erra mais, e onde informar rende mais:
- Áudio curto. Um recado de voz de 8 segundos dá pouca evidência. Quanto menos fala, mais a decisão depende de sorte.
- Áudio com ruído. Chamada ruim, gravação de sala, trilha por cima.
- Idioma próximo. Português e espanhol dividem muito som. É o par que mais aparece em erro de detecção em produto brasileiro.
Um código inválido é recusado na criação com 400 validation e a chave
language_invalid, não em silêncio. A referência dos campos está em
transcrições e as chaves de validação em
erros.
Quando deixar automático
Quando você realmente não sabe, e essa é uma situação legítima. Acervo antigo sem metadado, plataforma aberta, arquivo que chegou por integração de terceiro.
Nesse caso vale usar o que a resposta devolve. O campo language do transcrito
traz o idioma detectado (ou o que você informou), e ele é null enquanto
processa. Guardar esse valor faz duas coisas úteis: alimenta o metadado que
faltava no seu acervo, e permite auditar. Se 4% do seu acervo brasileiro está
voltando como outro idioma, você tem um problema mensurável em vez de uma
reclamação avulsa.
const { data } = await res.json();
if (data.status === "done" && data.language !== esperado(data.id)) {
await flag(data.id, data.language); // revisar, e possivelmente reenviar com language
}Um arquivo, um idioma
A resposta traz um language. Reunião que começa em português e vira inglês
no meio, ou aula que cita trechos em outro idioma, não voltam segmentadas por
idioma: o transcrito é um só, escrito sob uma decisão só.
Se o seu material é sistematicamente misturado, o caminho que funciona é cortar
o áudio nos pontos de troca do seu lado e transcrever cada pedaço com o
language certo. Não é elegante, mas é o que entrega texto aproveitável, e o
custo não muda, porque a cobrança é por hora de áudio: dois pedaços de trinta
minutos custam o mesmo que uma hora inteira.
O idioma decide se o seu glossário funciona
Uma consequência que passa despercebida: o campo glossary corrige o texto
depois da transcrição, casando o que o sistema escreveu com o que você mandou.
Se o idioma saiu errado, o texto inteiro está escrito em outro vocabulário, e
nenhuma das suas entradas casa. O glossário não avisa nada, ele simplesmente não
tem o que trocar.
Ou seja, informar o idioma é pré-requisito para a correção de nome próprio
render. Numa integração que depende de acertar nome de cliente ou de produto,
mandar language junto com o glossary é o par que funciona; o glossário
sozinho, em áudio curto de idioma incerto, é a metade que não segura a outra. Os
detalhes da correção estão em
como corrigir nome próprio errado.
O que medimos e o que não medimos
Este é o ponto honesto do post. Nossa medição de precisão é em português do Brasil: 6,34% de WER em 2.000 trechos de fala espontânea brasileira, contra transcrição humana de referência, com o protocolo publicado. A diarização foi medida em 216 arquivos com anotação humana, 19,6 horas.
Para os outros idiomas suportados, não publicamos número medido por nós, e portanto não afirmamos nada sobre eles aqui. O suporte existe e funciona; o que não existe é uma medição nossa que valha ser citada. Se o seu volume principal é em outro idioma, o teste que responde é o seu: a conta nova vem com US$ 2 em crédito, sem cartão, o que dá umas 65 horas de áudio.
Isso vale de forma geral, aliás. WER publicado por um fornecedor não se compara com o de outro, porque a normalização de texto move a métrica em vários pontos: o mesmo sistema marca 7,7% normalizado e 11,8% cru no mesmo material. O protocolo completo está em precisão e qualidade e em como medimos a precisão.
O resumo
Informe language sempre que souber, principalmente em áudio curto, com ruído
ou de idioma próximo. Deixe automático quando não souber, e guarde o language
que voltar, porque ele é o metadado que faltava e a base da sua auditoria.
E se o seu acervo é multilíngue de verdade, saiba que a decisão é por arquivo, e não por trecho.