Diarização de Falantes (Speaker Diarization)
O que é Diarização de Locutor?
Diarização de locutor (speaker diarization) responde à pergunta “quem falou quando?” em uma gravação de áudio. A saída é tipicamente uma linha do tempo segmentada em regiões de fala, cada uma rotulada com uma identidade do locutor (speaker identity) (frequentemente rótulos anônimos como SPEAKER_00, SPEAKER_01).
A diarização é um componente central em muitos sistemas de fala porque estrutura o áudio em turnos atribuídos a locutores, viabilizando tarefas a jusante (downstream tasks) como:
- Transcrições atribuídas a locutores (“Alice disse…, Bob respondeu…”)
- Análises de reuniões (tempo de fala, interrupções, engajamento)
- Conformidade em centrais de atendimento e separação agente/cliente
- Melhor reconhecimento automático de fala (ASR) multilocutor (multi-speaker) (decodificação condicionada ao locutor, modelagem de linguagem por locutor)
- Indexação e busca em grandes arquivos de áudio
A diarização é relacionada — mas distinta — de reconhecimento de locutor (speaker recognition) (quem é esta pessoa?) e detecção de atividade de voz (voice activity detection) (há fala?). A diarização normalmente assume locutores desconhecidos (unknown speakers) e precisa inferir tanto as fronteiras entre locutores quanto o agrupamento por locutor.
Formulação do problema: “quem falou quando” como uma tarefa de predição estruturada
Dado um sinal de áudio ( x(t) ), a diarização busca estimar um conjunto de segmentos de atividade de locutor:
[ \mathcal{S} = {(s_i, t^{\text{start}}_i, t^{\text{end}}i)}{i=1}^N ]
onde ( s_i ) é um rótulo de locutor e ([t^{\text{start}}_i, t^{\text{end}}_i]) é um intervalo de tempo.
Principais dificuldades:
- Número desconhecido de locutores (às vezes conhecido, frequentemente não)
- Fala sobreposta (overlapped speech) (dois ou mais locutores falam simultaneamente)
- Turnos curtos e mudanças rápidas de locutor
- Ruído de fundo, reverberação, incompatibilidade de canal
- Variabilidade intra-locutor (emoção, taxa de fala, distância do microfone)
Na prática, sistemas de diarização frequentemente decompõem a tarefa em subproblemas gerenciáveis (detecção, segmentação, embeddings, agrupamento, refinamento), resultando no pipeline clássico descrito a seguir.
Um pipeline típico de diarização (visão de alto nível)
A maioria dos sistemas modernos de diarização segue um pipeline como:
- Detecção de Atividade de Fala (Speech Activity Detection, SAD / Voice Activity Detection, VAD): encontrar regiões que contêm fala
- Segmentação (segmentation): dividir a fala em blocos candidatos homogêneos por locutor
- Extração de embedding de locutor (speaker embedding): mapear cada bloco para um vetor de dimensionalidade fixa
- Pontuação de similaridade (similarity scoring): medir quão provável é que dois blocos pertençam ao mesmo locutor
- Agrupamento (clustering): agrupar blocos por locutor (estimar o número de clusters)
- Ressegmentação / refinamento (resegmentation / refinement): ajustar fronteiras e suavizar rótulos
- Tratamento de sobreposição (overlap handling) (opcional, mas importante): detectar e atribuir fala sobreposta
- Formatação de saída (output formatting): RTTM, JSON, turnos de locutor etc.
Esse pipeline é popular porque cada etapa pode ser melhorada de forma independente e treinada com diferentes níveis de supervisão (incluindo pré-treinamento (pretraining) em larga escala).
1) Detecção de Atividade de Fala (SAD / VAD)
A detecção de atividade de voz filtra silêncio e ruído para que as etapas posteriores foquem na fala. Uma detecção de atividade de voz para diarização deve ser robusta a:
- eventos não relacionados a fala (música, risadas, sons de teclado)
- fala com SNR baixo
- conversa cruzada ou microfones de campo distante (far-field)
As abordagens incluem:
- detecção de atividade de voz baseada em energia ou heurísticas (simples, frágil)
- detecção de atividade de voz neural supervisionada (baseada em CNN/RNN/Transformer)
- modelos de rotulagem de áudio multiclasse (fala vs música vs ruído), frequentemente com sobreposição com Classificação de Áudio (Audio Classification)
Nota prática: uma detecção de atividade de voz agressiva demais pode apagar locutores com fala baixa (prejudicando equidade (fairness) e precisão). Uma detecção de atividade de voz pouco agressiva pode adicionar segmentos de ruído que confundem o agrupamento.
2) Segmentação: obtendo blocos candidatos “homogêneos por locutor”
Após a detecção de atividade de voz, os sistemas tipicamente segmentam a fala em janelas como:
- janelas deslizantes de comprimento fixo (por exemplo, janela de 1,5 s, passo (hop) de 0,75 s)
- segmentos de comprimento variável usando detecção de mudança de locutor
Janelas deslizantes são simples e frequentemente funcionam bem com embeddings fortes, mas criam muitos blocos e podem borrar fronteiras. Detecção de ponto de mudança (change-point detection) busca dividir em transições reais de locutor, mas é mais difícil.
A detecção de mudança clássica usava BIC (Bayesian Information Criterion) ou métodos baseados em GMM; sistemas modernos frequentemente usam detecção de mudança neural ou pulam a detecção explícita e dependem de agrupamento + refinamento.
3) Embeddings de locutor: representando “identidade vocal” como vetores
Um embedding de locutor converte um segmento de fala de comprimento variável em um vetor de dimensionalidade fixa que captura características do locutor, enquanto (idealmente) é invariante ao conteúdo, ruído e canal.
Famílias comuns de embeddings:
- i-vectors: abordagem generativa mais antiga (GMM-UBM + variabilidade total), ainda usada historicamente
- x-vectors: embeddings neurais treinados para classificação de locutor; tornaram-se uma linha de base dominante
- ECAPA-TDNN: arquitetura aprimorada no estilo x-vector, popular nos últimos anos
- Embeddings baseados em SSL: representações derivadas de codificadores de Aprendizado Auto-Supervisionado (Self-Supervised Learning) (por exemplo, modelos no estilo wav2vec 2.0 / HuBERT) adaptados para discriminação de locutor
Objetivos de treinamento frequentemente incluem:
- classificação softmax sobre locutores de treinamento
- perdas de aprendizado de métricas (metric learning) (por exemplo, contrastiva ou de margem angular aditiva), relacionadas a Aprendizado Contrastivo (Contrastive Learning)
A qualidade do embedding é um dos maiores determinantes do desempenho de diarização.
4) Pontuação de similaridade: comparando segmentos
Dados embeddings ( \mathbf{e}_i ) e ( \mathbf{e}_j ), a similaridade pode ser computada usando:
- Similaridade do cosseno (cosine similarity) (comum e simples)
- Análise Discriminante Linear Probabilística (Probabilistic Linear Discriminant Analysis, PLDA): modela variabilidade intra- vs inter-locutor; historicamente forte
- Modelos de pontuação aprendidos (menos comuns em pipelines modulares, mas usados em alguns sistemas)
As pontuações alimentam o agrupamento.
5) Agrupamento: agrupando segmentos em locutores
O agrupamento atribui cada segmento a um cluster de locutor e frequentemente estima quantos locutores existem.
Métodos populares:
- Agrupamento Hierárquico Aglomerativo (Agglomerative Hierarchical Clustering, AHC): começa com cada segmento como seu próprio cluster e mescla iterativamente por similaridade
- Agrupamento espectral (spectral clustering): constrói uma matriz de afinidade, computa autovetores e agrupa no espaço espectral
- K-means: usado quando o número de locutores (K) é conhecido ou estimado
O principal desafio prático é escolher o critério de parada (stopping criterion) (limiar do AHC) ou estimar (K). Estratégias incluem:
- ajuste de limiar em um conjunto de desenvolvimento
- heurísticas de lacuna de autovalores (eigen-gap heuristics) (agrupamento espectral)
- métodos bayesianos e priors (mais comuns em pesquisa, conceitualmente ligados à Inferência Bayesiana (Bayesian Inference))
6) Ressegmentação e refinamento de fronteiras
O agrupamento inicial frequentemente produz atribuições “em blocos” que não se alinham perfeitamente às fronteiras reais. Métodos de refinamento incluem:
- Ressegmentação HMM/Viterbi: trata locutores como estados de um HMM e decodifica a melhor sequência de estados dado verossimilhanças em nível de quadro (frame-level). Isso se conecta a Modelos Ocultos de Markov (Hidden Markov Models).
- VB-HMM / VBx: ressegmentação por Bayes variacional (variational Bayes) com modelos de locutor no estilo PLDA (uma linha de base forte amplamente usada)
- Suavização simples / filtragem mediana sobre posteriores em nível de quadro (comum em pipelines neurais de diarização)
O refinamento pode reduzir confusão entre locutores e melhorar a acurácia das fronteiras.
7) Tratamento de fala sobreposta
Conversas reais contêm sobreposições (interrupções, respostas de apoio (backchannels)). A diarização padrão que atribui um locutor por tempo falhará aqui.
Duas abordagens comuns:
Detecção de sobreposição + atribuição secundária
Detectar regiões de sobreposição e então atribuir um segundo rótulo de locutor (criando segmentos multi-rótulo).Diarização multilocutor ponta a ponta (end-to-end)
Predizer múltiplos fluxos de atividade de locutor diretamente (veja EEND abaixo).
A fala sobreposta é um grande contribuinte para o erro de diarização em reuniões.
8) Formatos de saída
Saídas comuns:
- RTTM: padrão em avaliações (segmentos com rótulos de locutor e tempos)
- Turnos com carimbo de tempo em JSON
- Transcrições atribuídas a locutores (após executar reconhecimento automático de fala)
Exemplo (conceitual) de saída de diarização:
0.00–3.20 SPEAKER_00
3.20–5.10 SPEAKER_01
5.10–6.00 SPEAKER_00
6.00–6.80 SPEAKER_00 + SPEAKER_01 (overlap)
Dois grandes paradigmas de modelagem
Diarização modular de “embedding + agrupamento” (mais comum na prática)
Este é o pipeline acima: extrair embeddings, agrupá-los e então refinar.
Por que é popular:
- Funciona com número variável de locutores
- Fácil de depurar e melhorar por componente
- Existem opções fortes prontas para uso (por exemplo, embeddings ECAPA + agrupamento espectral + ressegmentação VB)
Limitações:
- O tratamento de sobreposição é “acoplado” depois, a menos que seja modelado explicitamente
- Escolhas como limiares e hiperparâmetros podem ser específicas do domínio
Diarização Neural Ponta a Ponta (End-to-End Neural Diarization, EEND) e variantes
EEND reformula a diarização como predição direta da atividade de locutor ao longo do tempo. Um modelo neural produz uma matriz de posteriores de locutor ao longo de quadros:
- linhas: quadros de tempo
- colunas: “slots” de locutor (até um número máximo)
- valores: probabilidade de que o slot (k) esteja ativo no tempo (t)
Frequentemente implementado com codificadores baseados em atenção (relacionados à Arquitetura Transformer (Transformer Architecture)).
Pontos fortes:
- Pode modelar naturalmente sobreposições (múltiplos locutores ativos ao mesmo tempo)
- Aprende segmentação e atribuição conjuntamente
Desafios:
- Exige dados de treino e aumento de dados (augmentation) cuidadosamente construídos
- Frequentemente assume um número máximo de locutores (ou usa estratégias para lidar com contagens variáveis)
- A transferência de domínio (domain transfer) pode ser difícil
Em produção, muitos sistemas ainda usam embedding+agrupamento devido à controlabilidade e à adaptação mais simples, mas métodos no estilo EEND estão sendo cada vez mais usados para diarização de reuniões com muita sobreposição.
Um exemplo prático de pipeline: diarização para transcrição de reunião
Imagine que você grave uma reunião de 45 minutos e queira uma transcrição atribuída a locutores.
Um fluxo de trabalho pragmático:
- Execute detecção de atividade de voz para identificar regiões de fala.
- Extraia embeddings de locutor em janelas deslizantes (por exemplo, 1,5 s / passo de 0,75 s).
- Execute agrupamento espectral para obter rótulos de locutor.
- Use ressegmentação para refinar fronteiras de locutor.
- Opcionalmente execute detecção de sobreposição e adicione um segundo rótulo de locutor.
- Execute reconhecimento automático de fala no áudio e então alinhe palavras ao tempo.
- Anexe cada palavra (ou sentença) ao(s) rótulo(s) de locutor ativo(s).
Isso produz uma saída como:
[
{"speaker": "SPEAKER_00", "start": 12.4, "end": 18.9, "text": "Let's start with the roadmap."},
{"speaker": "SPEAKER_01", "start": 19.1, "end": 23.7, "text": "I think we should prioritize the latency work."}
]
Considerações práticas:
- Se o reconhecimento automático de fala for executado primeiro, você pode usar carimbos de tempo de palavras para “encaixar” turnos de locutor em fronteiras linguísticas.
- Se a diarização for executada primeiro, você pode executar reconhecimento automático de fala por segmento de locutor, o que às vezes melhora o reconhecimento (áudio mais limpo, de um único locutor), mas pode aumentar latência (latency) e complexidade.
Avaliação: como a qualidade da diarização é medida
A métrica mais comum é a Taxa de Erro de Diarização (Diarization Error Rate, DER):
[ DER = \frac{\text{False Alarm} + \text{Missed Speech} + \text{Confusion}}{\text{Total Reference Speech}} ]
- False alarm: não-fala rotulada como fala
- Missed speech: fala não detectada
- Confusion: fala atribuída ao locutor errado
Detalhes importantes:
- O DER frequentemente é computado com uma faixa de tolerância (forgiveness collar) ao redor das fronteiras (por exemplo, ±250 ms) para evitar penalizar demais pequenos deslocamentos de fronteira.
- O tratamento de sobreposição varia conforme o protocolo de avaliação. Algumas avaliações pontuam sobreposição separadamente ou usam métricas projetadas para sobreposições.
Outras métricas:
- Taxa de Erro de Jaccard (Jaccard Error Rate, JER): mede similaridade entre os conjuntos de segmentos de locutor de referência e hipótese; frequentemente mais sensível à qualidade de segmentação.
- Acurácia de contagem de locutores, F1 de detecção de sobreposição e acurácia de fronteira de turnos também são usadas.
Ao comparar sistemas, sempre verifique:
- se sobreposição é pontuada
- tamanho da faixa de tolerância
- quais anotações de referência são usadas (alguns conjuntos de dados incluem rótulos finos de sobreposição, outros não)
Dados e adaptação ao domínio
Sistemas de diarização são altamente sensíveis ao domínio:
- Telefonia (8 kHz, canais limpos, geralmente sem sobreposição) é mais fácil do que
- Reuniões (campo distante, reverberação, sobreposição frequente) ou
- Áudio no mundo real (in-the-wild) (música, ruído de fundo, muitos locutores)
Técnicas comuns de adaptação:
- Ajustar finamente modelos de detecção de atividade de voz e embeddings em dados do domínio
- Usar aumento de dados (simulação de reverberação, mistura com ruído, simulação de codec)
- Calibrar limiares de agrupamento em um conjunto do domínio mantido para validação
- Usar embeddings robustos oriundos de pré-treinamento em Aprendizado Auto-Supervisionado para melhor transferência
Diarização em streaming / online
Muitas aplicações (legendagem ao vivo, monitoramento de chamadas) exigem diarização online (online diarization), em que o sistema não pode ver o futuro.
Diferenças em relação à diarização offline:
- Clusters precisam ser atualizados incrementalmente
- Rótulos de locutor podem “trocar” a menos que você imponha consistência de rótulos
- Restrições de latência limitam tamanhos de janela e passes de refinamento
Técnicas:
- Agrupamento online com buffers de memória
- Decisão atrasada (antevisão pequena (look-ahead))
- “Perfis” de locutor atualizados ao longo do tempo (centróide incremental / adaptação de PLDA)
A diarização online tipicamente é menos precisa do que a offline, mas pode ser suficiente com embeddings fortes e engenharia cuidadosa.
Modos comuns de falha e como profissionais os mitigam
Turnos curtos e respostas de apoio (“yeah”, “uh-huh”)
Mitigação: passos menores, refinamento de fronteiras, evitar suavização excessiva.Fala sobreposta
Mitigação: detecção explícita de sobreposição; modelos no estilo EEND; saída multi-rótulo.Mesmo locutor, acústicas diferentes (movendo-se pela sala, microfone diferente)
Mitigação: embeddings robustos a canal, ressegmentação PLDA/VBx, aumento de dados por domínio.Dois locutores com vozes similares
Mitigação: melhores embeddings, segmentos mais longos para extração de embeddings, critérios de agrupamento aprimorados.Erros de detecção de atividade de voz (perder fala baixa ou incluir ruído)
Mitigação: detecção de atividade de voz mais forte, rotulagem de áudio multiclasse, ajustar limiares por domínio.
Notas de implementação e código de exemplo
Em Python, a diarização é comumente construída a partir de componentes: detecção de atividade de voz, modelo de embedding, agrupamento e refinamento. Bibliotecas como pyannote.audio fornecem pipelines ponta a ponta (dependendo da disponibilidade do modelo e do licenciamento).
Um trecho mínimo ilustrativo (detalhes da API podem variar por versão):
from pyannote.audio import Pipeline
# Load a pretrained diarization pipeline (may require authentication depending on model)
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization")
diarization = pipeline("meeting.wav")
for turn, _, speaker in diarization.itertracks(yield_label=True):
print(f"{turn.start:7.2f} {turn.end:7.2f} {speaker}")
Saída de exemplo:
0.53 3.10 SPEAKER_00
3.12 7.44 SPEAKER_01
7.50 10.02 SPEAKER_00
Dicas de engenharia:
- Mantenha e inspecione artefatos intermediários (regiões de detecção de atividade de voz, embeddings, matriz de similaridade). A diarização é muito mais fácil de depurar quando você consegue visualizar cada etapa.
- Salve saídas em RTTM para pontuação reprodutível.
- Avalie em amostras do domínio; limiares que funcionam para reuniões frequentemente falham em telefonia e vice-versa.
Aplicações no ecossistema de Fala & Áudio
A diarização frequentemente fica entre o entendimento de áudio bruto e o processamento de linguagem:
- Transcrição atribuída a locutores: combine diarização com reconhecimento automático de fala para produzir atas de reunião limpas.
- Indexação de áudio: buscar “todos os segmentos em que o locutor A fala” (se vinculado a reconhecimento/inscrição de locutor).
- Análise de conversas: distribuição de tempo de fala, interrupções, taxas de alternância de turno.
- Sistemas fala-para-fala: a diarização pode ajudar Modelos de Fala-para-Fala (Speech-to-Speech Models) multiusuário a decidir a qual voz responder ou a preservar a identidade do locutor em saídas geradas.
- Curadoria de datasets: segmentar automaticamente gravações com múltiplos locutores em blocos de locutor único para treinar modelos de ASR/TTS (útil para pipelines de dados de síntese de fala (TTS), com filtragem cuidadosa).
Privacidade, consentimento e uso responsável
Mesmo quando os rótulos de locutor são anônimos, a diarização pode permitir inferências sensíveis (quem domina uma conversa, quem falou em determinado momento). Em sistemas implantados:
- Obtenha consentimento apropriado para gravação e análise
- Minimize a retenção de áudio bruto quando possível
- Proteja embeddings e metadados (embeddings às vezes podem ser usados para reidentificação)
- Tenha cautela com disparidades de desempenho entre sotaques, gêneros e condições de gravação; meça e mitigue vieses usando dados de avaliação representativos
Resumo
A diarização de locutor é uma tecnologia fundamental de fala que estrutura áudio em segmentos temporais rotulados por locutor. A abordagem prática dominante é um pipeline modular (detecção de atividade de voz → segmentação → embeddings → agrupamento → refinamento), enquanto abordagens ponta a ponta como EEND oferecem uma alternativa atraente, especialmente para fala sobreposta. Uma diarização bem-sucedida depende tanto de engenharia consciente do domínio — limiares, aumento de dados, tratamento de sobreposição, protocolo de avaliação — quanto da escolha do modelo.
Se você está construindo um sistema real, comece com um pipeline de linha de base forte, avalie no seu domínio e então itere: qualidade da detecção de atividade de voz, robustez dos embeddings, estratégia de agrupamento e tratamento de sobreposição geralmente são as melhorias de maior impacto.