· 7 min read · Samuel . E . Zih
A geotag tells you where the poster is, not where the event is
Someone in San Francisco tweeting about a Tokyo earthquake must not put a dot in San Francisco. Getting that backwards is the difference between a map that means something and one that does not.
- Applied AI
- CrisisEcho
- Data

The most consequential decision in CrisisEcho's preprocessing pipeline is eight lines long and looks like a priority ordering. It is the one that decides where the dot goes.
The obvious approach is wrong
A social post may carry GPS coordinates. It is enormously tempting to use them, because they are precise, structured, and free.
They are also answering a different question. A geotag tells you where the poster is, not where the event is. Someone in San Francisco tweeting about a Tokyo earthquake, a diaspora account reporting a flood back home, a journalist filing from a newsroom — every one of them puts a high-confidence dot in exactly the wrong place.
On a crisis map, a wrong dot is worse than no dot. It is a person deciding whether to evacuate on the basis of a number that describes a stranger's Wi-Fi.
The ordering that works
Source | Confidence | Why |
NLP place extraction | 0.90 | spaCy NER pulls GPE/LOC entities from the text and resolves them against a cached gazetteer. The text describes the EVENT, which is the thing we are mapping. |
GPS geotag | 0.60 | Deliberately weaker. Precise about the wrong subject; useful only as a fallback. |
Neither | — | Marked unresolved and handed to a location-enrichment cascade later in retrieval, rather than guessed at. |
The inversion — text beats coordinates — is the entire insight, and it is counterintuitive enough that I got it wrong first.
The third row matters as much as the first two. An unresolved post is an honest state. A post placed at the poster's location because we had nothing better is a lie with a confidence score attached.
The other half: one vector space
A related mistake took longer to see. Text embeddings and image embeddings started life in different models and different dimensionalities — Vertex AI text at 1408 dimensions, SigLIP images at 512.
You can compute a similarity between those. The number means nothing. Comparing across incompatible geometries produces a float that looks like evidence and is not.
Unifying both on SigLIP at 768 dimensions put text and image vectors in one cosine space, which is what makes image–text alignment a directly meaningful number rather than a coincidence.
sources → Kafka → preprocess_post → SourcePost + SigLIP embeddings → run_pipeline every 60s → hybrid retrieval → 3-step LLM agent → Crisis (if verified) → Alert
What I take from both
Two failures, one shape: a value that is precise, cheap and available, answering a subtly different question than the one you are asking. The geotag is precise about the poster. The cross-model cosine is precise about nothing.
Precision is not accuracy, and a confident wrong answer is the most expensive output a system can produce — because unlike a missing answer, nothing downstream will question it.
I care about the parts that do not demo well: what happens when the network is gone, when two people tap the same seat at the same instant, when a model is confident and wrong. That last one is the hardest, because it never looks like a bug.


