Search engines, recommendation feeds, and image classifiers all lean on the same trick: turn everything into a point in a space of numbers, positioned so that similar things land near each other, then measure distance instead of writing rules. This is that trick, shrunk down to two dimensions you pick yourself so you can actually watch it work. Choose two independent properties as your axes — things you might genuinely use to classify or describe something, like "legs" and "flight," or "kind" and "fast," not two ends of the same idea like "loud" and "quiet." Drop in words, phrases, or your own photos, and each one gets placed on the map based on nothing but how much of each property it has. There's no dataset, no pretrained categories — just one repeated operation, similarity to a word you chose, done twice per item.
An embedding is just a list of numbers a model uses to stand in for what something means — a word, a phrase, a photo — placed so that things which mean similar things end up with similar numbers. Pick two things as your axes below, and everything else you add gets plotted by how similar it is to each one, turning that list of numbers into an actual map you can see and click around in. Nothing you type or upload ever leaves your browser; the model itself, how the plotting math works, and two hands-on demos are in "how this actually works," below the tool.
Works best with two independent properties — things you might genuinely use to classify or describe something ("legs" / "flight", "kind" / "fast", "ocean" / "mountain") — rather than opposite ends of one spectrum ("loud" / "quiet", "calm" / "chaotic"), since two ends of the same idea tend to share enough real context to still read as related rather than independent. Specific, concrete words also give a firmer signal than broad, generic ones ("person," "crowd," "thing," "stuff") — the more generic a word is, the closer it sits to the "average" of all text, leaving less of its own direction behind to measure against. More on why below the tool.
Click any point to see the labels it's most and least like. Properties you can see or read directly — color, shape, texture, topic — tend to place things reliably; behavioral ones like speed or loudness often don't, since no embedding model can judge how fast or loud something actually is from its name alone (a cheetah can land right next to a sloth on a "fast" axis — that's a real limit of this technique, not a bug in this page). Don't agree with where something landed? Drag it anywhere you think it actually belongs.
Want this as a magnet? Download a PNG above, then open this Zazzle magnet template and upload it there — click "Personalize this design" and use the file you just downloaded.
Every item on your map right now is text, so this one also works as a t-shirt: download a PNG above, then open this Zazzle t-shirt template and upload it the same way.
This page actually runs two small models entirely in your browser tab, not one, and switches between them depending on what you're comparing. Word-to-word comparisons (Words mode) use a general text-embedding model — the kind built for comparing sentences to each other, not for describing photos. Anything involving a photo (Photos mode) uses CLIP, a vision-and-language model, instead — CLIP is the only one of the two that maps images and text into the same space of numbers, trained so that a photo of a dog and the word "dog" land near each other, which is the only way an axis word can ever be compared against an uploaded photo at all. The very first time you use each mode, your browser downloads that mode's model weights (a few tens of megabytes) from a public model host, the same way it would download a font or a script — cached afterward, so every photo or phrase you plot from then on never leaves this tab.
A word doesn't mean anything to a computer by itself — but both models have seen enough text (or, for CLIP, captioned photos) that they've learned to place any word, phrase, or image as a point in a space with a few hundred dimensions, positioned so that things which mean similar things end up near each other. "Dog" and a photo of a golden retriever land close together; "dog" and "spreadsheet" land far apart. The tool compares the numbers for whatever you typed (or uploaded) against the numbers for your two axis words to generate a similarity score — "on-the-fly" embeddings for any set of labels against any set of axis-pairs.
Cosine similarity is the specific way "how close" gets measured. Instead of straight-line distance, it looks at the angle between two vectors — two things pointing the same direction score 1, perpendicular scores 0, opposite directions score −1, regardless of how long either vector is. That's what the widget below lets you feel directly, with no model involved at all. Why we used cosine similarity instead of any other vector difference metric is a discussion for another day.
Drag either arrow tip around the center. This is the whole formula behind every similarity score on this page — just in two dimensions you can see, instead of a few hundred you can't.
Type two words and see their raw similarity — no plotting, no rescaling, just the one number the whole tool is built from. Uses whichever model Words/Photos mode currently has active, same as everywhere else on the page.
| item | x | y |
|---|
One thing worth being clear about: real embeddings aren't curated like this. A production search engine, recommender, or classifier doesn't pick two labeled axes and read off two numbers — it works directly with the full, uncurated vector CLIP (or a model like it) produces, often several hundred numbers long, and lets an algorithm find patterns across all of them at once. Reducing that down to two axes you chose and can actually see is what makes this tool understandable — it's a teaching simplification, not how embeddings get used in practice.
All embedding happens in a background thread in your browser using transformers.js, running two public, quantized ONNX builds: all-MiniLM-L6-v2 for word-to-word comparisons (Words mode) and OpenAI's CLIP for anything involving a photo (Photos mode). Your words, phrases, and photos are never uploaded — the only network activity is each mode's one-time model download, cached by your browser afterward. Refreshing the page clears everything you've plotted; nothing is saved anywhere.