Como agrupamos notícias em eventos do mundo real
Como agrupamos notícias em eventos do mundo real
Uma das tarefas mais fundamentais por trás do Punto Medio é simples de enunciar, mas tecnicamente difícil de resolver: dado um conjunto de milhares de artigos de diferentes veículos, quais estão cobrindo o mesmo evento?
Não o mesmo tema — o mesmo fato concreto que aconteceu no mundo.
A distinção parece óbvia, mas tem consequências técnicas enormes. Dois artigos podem mencionar o presidente de um país e uma pauta legislativa, mas um pode tratar da aprovação de um conjunto de leis enquanto o outro cobre o veto de uma reforma tributária. São eventos distintos que jamais deveriam ser agrupados juntos.
Para atacar esse problema, publicamos um artigo de pesquisa que estamos felizes em compartilhar com a comunidade. Você pode lê-lo na íntegra aqui: A Multi-Signal Graph-Based Approach for Real-World Event Detection in News Articles.
O problema da similaridade semântica
O ponto de partida natural para agrupar artigos é usar embeddings de texto — representar cada artigo como um vetor denso e medir o quão semanticamente semelhantes os artigos são entre si. É uma técnica sólida e amplamente utilizada, e serviu como nossa linha de base.
Implementamos um pipeline clássico: embeddings, redução de dimensionalidade com PCA e clustering com HDBSCAN. Os resultados foram fortes em termos de homogeneidade (98%) — os clusters formados eram puros — mas revelaram uma limitação crítica: quase 40% dos artigos ficavam sem atribuição, classificados como ruído.
Em produção, isso significa que quatro em cada dez artigos nunca chegam a nenhum cluster de evento. Para uma plataforma que busca oferecer cobertura abrangente do ecossistema midiático, essa é uma lacuna grave.
A similaridade semântica também falha quando dois eventos distintos compartilham vocabulário semelhante — como dois artigos cobrindo ações legislativas diferentes de um mesmo país. O modelo os aproxima no espaço de embeddings mesmo que descrevam ocorrências completamente separadas.
A solução: múltiplos sinais, estrutura de grafo
O pipeline que propomos combina três sinais complementares:
1. Embeddings semânticos com recuperação KNN Cada artigo é codificado como um vetor de alta dimensão. Para cada artigo, recuperamos seus K vizinhos mais próximos (K=100) no espaço de embeddings. Isso gera pares candidatos a comparar sem o custo computacional de uma comparação todos-contra-todos.
2. Extração e desambiguação de entidades nomeadas Aplicamos NER para identificar pessoas, organizações, localizações e entidades diversas. Em seguida, vinculamos cada menção ao seu título na Wikipédia, obtendo um identificador canônico único. Isso garante que formas de superfície diferentes que se referem à mesma entidade sejam resolvidas para o mesmo nó. A sobreposição de entidades entre dois artigos é medida usando a similaridade de Jaccard sobre os conjuntos de entidades normalizadas.
3. Cross-encoder ajustado Um modelo BERT ajustado no dataset HLGD avalia diretamente se dois artigos descrevem o mesmo evento. Diferentemente de comparar embeddings de forma independente, o cross-encoder processa os dois textos em conjunto, permitindo capturar interações sutis: referências temporais compartilhadas, entidades co-ocorrentes e contexto narrativo que os embeddings comprimem.
A pontuação final de cada par candidato é uma combinação ponderada.
4. Grafo de similaridade e detecção de comunidades Com todos os pares pontuados, construímos um grafo onde cada nó é um artigo e cada aresta carrega a pontuação de similaridade como peso. Arestas abaixo de um limiar de 0.5 são descartadas para reduzir ruído.
Em seguida, aplicamos o algoritmo de Leiden para detecção de comunidades. Leiden é uma melhoria sobre o Louvain que garante comunidades bem conectadas e convergência mais rápida. Cada comunidade detectada corresponde a um evento do mundo real.
Resultados
| Métrica | Baseline (HDBSCAN) | Pipeline multi-sinal |
|---|---|---|
| Homogeneidade | 0.98 | 0.95 |
| Completude | 0.75 | 0.86 |
| V-measure | 0.85 | 0.90 |
| Similaridade intra-cluster | 0.88 | 0.96 |
| Cobertura de artigos | 61% | 89% |
A melhoria mais significativa é a cobertura: de 61% para 89% dos artigos atribuídos com sucesso a um cluster, com apenas uma queda de ~4% em homogeneidade. Os clusters permanecem altamente puros enquanto capturam muito mais do conjunto de dados que o baseline deixava para trás.
Por que isso importa para o Punto Medio
Isso não é apenas uma contribuição acadêmica — é a espinha dorsal técnica da nossa plataforma. Para comparar como diferentes veículos cobrem o mesmo evento, primeiro precisamos saber com precisão quais artigos pertencem a esse evento.
Um pipeline que deixa 40% dos artigos sem agrupamento não pode oferecer a ninguém uma visão completa do panorama midiático. Um que agrupa por similaridade temática acaba mesclando eventos distintos, distorcendo qualquer análise subsequente.
Este pipeline multi-sinal é o primeiro passo em direção a algo mais ambicioso: entender não apenas o que está sendo reportado, mas como e por quê.
O artigo completo, o código e os dados estão disponíveis publicamente: