Resumo em 3 frases
Coletamos vídeos públicos do YouTube e do X (Twitter). Transcrevemos com Whisper, identificamos quem fala com diarização + impressão biométrica de voz, e classificamos o "stance" (a favor, contra, neutro ou ambíguo) de cada fala via LLM com confiança mínima de 0.75. Tudo é apartidário, código aberto, e cada classificação tem rationale visível pra você questionar.
1. Coleta de dados
Monitoramos canais públicos de políticos com mandato federal ou estadual, jornalistas políticos influentes e participantes de debates. Vídeos novos são processados em janela rolante de 90 dias. Não usamos conteúdo privado, transcrições compradas, nem dados de terceiros não-públicos.
Fontes hoje: YouTube e X (Twitter).
2. Transcrição e atribuição de fala
Transcrição: usamos Whisper large-v3 para gerar a transcrição inicial com timestamps por palavra.
Diarização: identificamos quando cada falante muda usando uma versão melhorada do Pyannote (MahmoudAshraf97/whisper-diar).
Identificação biométrica: comparamos a impressão de voz de cada speaker contra um banco de vozes pré-cadastradas (políticos conhecidos). Quando a similaridade ultrapassa o limiar, atribuímos o nome. Se não bate em ninguém, fica como UNKNOWN.
Limitação conhecida: aproximadamente 14% das falas em vídeos com muito ruído ou múltiplos speakers cruzados ficam como UNKNOWN.
3. Classificação de stance
Para cada fala com pelo menos 8 palavras, um LLM (OpenAI gpt-4o) atribui:
- tópico (de uma lista canônica de ~440 temas)
- proposição específica que está sendo defendida ou criticada
- stance: a_favor, contra, neutro_descritivo ou ambíguo
- confiança (0–1)
- rationale: frase curta explicando por que a classificação é essa
Só falas com confiança ≥ 0.75 e stance diferente de "ambíguo" aparecem nas agregações públicas. As outras ficam visíveis nas páginas individuais com badge "ambíguo" pra transparência.
A página /recentes e o card de cada fala expõem o rationale clicando em "Entenda a classificação".
4. Canonicalização de tópicos e proposições
Tópicos e proposições saem com texto livre do LLM. Pra agrupar variações ("PEC dos super-salários" vs "PEC de super salários"), calculamos embeddings (modelo E5) e agrupamos por similaridade cosseno. Cada cluster vira uma entidade canônica com label, slug e centroide.
Hoje temos 438 tópicos canônicos e 2.136 proposições canônicas.
5. Limitações conhecidas
- Recall não é completo — falas curtas (<8 palavras), em vídeos com áudio ruim, ou ainda não processadas, não aparecem. Não significa que o político não falou.
- Stance pode errar em ironia, sarcasmo, citações em discurso indireto, ou quando o LLM não tem contexto suficiente.
- Identificação errada pode acontecer quando duas vozes são muito similares ou um speaker novo ainda não tem voz cadastrada.
- Cobertura assimétrica — políticos que postam mais conteúdo público têm mais falas catalogadas. Não é representativo do volume real de trabalho parlamentar.
Cada agregação no site exibe o número de falas usado e a janela temporal pra você avaliar.
6. Mudanças de posicionamento
No perfil de cada político, a seção "Mudanças de posicionamento" mostra quando detectamos que a pessoa defendeu lados opostos da mesma proposta em épocas diferentes. Os critérios são deliberadamente conservadores — só contamos como mudança quando todos valem ao mesmo tempo:
- mesmo tema e mesma proposta — ser contra a proposta A e a favor da proposta B do mesmo tema não é mudança de posição;
- pelo menos 3 falas e 2 vídeos de cada lado — um discurso isolado não caracteriza um "período";
- pelo menos 70% das falas de cada período na mesma direção;
- pelo menos 12 meses de intervalo entre o fim do primeiro período e o início do segundo;
- confiança mínima do classificador: falas com confiança abaixo de 0.75 nem entram na contagem, e a média das falas usadas em cada período precisa ser ≥ 0.85.
Cada mudança exibe a fala mais representativa de cada período, com link pro momento exato do vídeo — a evidência é sempre verificável na fonte.
Limitações: a detecção é automática e só enxerga o que está no corpus. A ausência da seção não atesta coerência — pode faltar cobertura. E mudar de opinião com justificativa é legítimo; o objetivo é dar contexto verificável, não vereditos.
7. Independência editorial
- O Ceticismo é mantido independentemente — sem financiamento de partido, político, governo ou empresa de mídia.
- Não tomamos posição editorial: classificamos o que o político disse, não se está certo ou errado.
- O código é aberto: github.com/GilbJun/politic-voices.
8. Como contestar uma classificação
Se uma classificação está claramente errada, abra um issue no GitHub com:
- URL da fala (link "Ver no vídeo")
- Qual classificação você acha correta
- Por quê
Revisamos manualmente e, se procedente, corrigimos o exemplo e usamos pra ajustar prompts/limiares.
9. Quem somos
Projeto mantido por Gilberto Junior.
Última atualização: julho de 2026.