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:

  1. Detecção de Atividade de Fala (Speech Activity Detection, SAD / Voice Activity Detection, VAD): encontrar regiões que contêm fala
  2. Segmentação (segmentation): dividir a fala em blocos candidatos homogêneos por locutor
  3. Extração de embedding de locutor (speaker embedding): mapear cada bloco para um vetor de dimensionalidade fixa
  4. Pontuação de similaridade (similarity scoring): medir quão provável é que dois blocos pertençam ao mesmo locutor
  5. Agrupamento (clustering): agrupar blocos por locutor (estimar o número de clusters)
  6. Ressegmentação / refinamento (resegmentation / refinement): ajustar fronteiras e suavizar rótulos
  7. Tratamento de sobreposição (overlap handling) (opcional, mas importante): detectar e atribuir fala sobreposta
  8. 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:

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:

  1. Execute detecção de atividade de voz para identificar regiões de fala.
  2. Extraia embeddings de locutor em janelas deslizantes (por exemplo, 1,5 s / passo de 0,75 s).
  3. Execute agrupamento espectral para obter rótulos de locutor.
  4. Use ressegmentação para refinar fronteiras de locutor.
  5. Opcionalmente execute detecção de sobreposição e adicione um segundo rótulo de locutor.
  6. Execute reconhecimento automático de fala no áudio e então alinhe palavras ao tempo.
  7. 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.