How We Cluster News Articles Into Real-World Events
How We Cluster News Articles Into Real-World Events
One of the most fundamental tasks behind Punto Medio is deceptively simple to state and technically hard to solve: given thousands of articles from different outlets, which ones are actually covering the same event?
Not the same topic — the same concrete thing that happened in the world.
The distinction seems obvious but has major technical consequences. Two articles can both mention a country's president and legislation, yet one may report on the signing of a new law while the other covers the veto of a tax reform. Different events that should never be grouped together.
To tackle this problem, we published a research paper we're happy to share with the community. You can read it in full here: A Multi-Signal Graph-Based Approach for Real-World Event Detection in News Articles.
The Problem With Semantic Similarity
The natural starting point for clustering news articles is text embeddings — representing each article as a dense vector and measuring how semantically similar articles are to one another. It's a solid, well-established technique, and it served as our baseline.
We implemented a classical pipeline: embeddings generation, dimensionality reduction with PCA, and clustering with HDBSCAN. The results were strong in terms of homogeneity (98%) — the clusters formed were pure — but revealed a critical limitation: nearly 40% of articles were left unassigned, marked as noise.
In production, that means four out of every ten articles never make it into any event cluster. For a platform aiming to provide comprehensive coverage of the media ecosystem, that's a serious gap.
Semantic similarity also breaks down when two distinct events share similar vocabulary — like two articles covering different legislative actions from the same country. The model pulls them close in embedding space even though they describe entirely separate occurrences.
The Solution: Multiple Signals, Graph Structure
The pipeline we propose combines three complementary signals:
1. Semantic Embeddings With KNN Retrieval Each article is encoded as a high-dimensional vector. For each article, we retrieve its K nearest neighbors (K=100) in embedding space. This generates candidate pairs to compare without the computational cost of an all-pairs comparison.
2. Named Entity Extraction and Disambiguation We apply NER to identify persons, organizations, locations, and miscellaneous entities. We then link each mention to its Wikipedia title using, obtaining a unique canonical identifier. This ensures that different surface forms referring to the same entity — "the Argentine president" and a specific name, for instance — resolve to the same node. Entity overlap between two articles is then measured using Jaccard similarity over the normalized entity sets.
3. Fine-Tuned Cross-Encoder A BERT model fine-tuned on the HLGD dataset directly evaluates whether two articles describe the same event. Unlike comparing embeddings independently, the cross-encoder processes both texts jointly, allowing it to capture subtle interactions: shared temporal references, co-occurring entities, and narrative context that embeddings compress away.
The final score for each candidate pair is a weighted combination of both scores
4. Similarity Graph and Community Detection With all pairs scored, we build a graph where each node is an article and each edge carries the similarity score as its weight. Edges below a threshold of 0.5 are discarded to reduce noise.
We then apply the Leiden algorithm for community detection. Leiden is an improvement over Louvain that guarantees well-connected communities and faster convergence. Each detected community corresponds to a real-world event.
Results
| Metric | Baseline (HDBSCAN) | Multi-Signal Pipeline |
|---|---|---|
| Homogeneity | 0.98 | 0.95 |
| Completeness | 0.75 | 0.86 |
| V-measure | 0.85 | 0.90 |
| Intra-cluster similarity | 0.88 | 0.96 |
| Article coverage | 61% | 89% |
The most significant improvement is coverage: from 61% to 89% of articles successfully assigned to a cluster, with only a ~4% drop in homogeneity. Clusters remain highly pure while capturing far more of the dataset that the baseline left behind.
Why This Matters for Punto Medio
This isn't just an academic contribution — it's the technical backbone of our platform. To compare how different outlets cover the same event, we first need to know precisely which articles belong to that event.
A pipeline that leaves 40% of articles ungrouped can't offer anyone a complete picture of the media landscape. One that clusters by thematic similarity ends up conflating distinct events, distorting any downstream analysis.
This multi-signal pipeline is the first step toward something more ambitious: understanding not just what is being reported, but how and why.
The full paper, code, and data are publicly available: