Suppose we spread meaning out on a map: each word becomes a point, and closeness between points becomes kinship of meaning. It isn't a wild idea — laying language out as geometry, with words as points in a space and their relations as distances, is an old ambition of mathematical linguistics (Kornai, 2008). And the intuition behind it is modest: that a word's neighbours say something about it, that context is a redundancy you can lean on, is an everyday fact of information theory (MacKay, 2005).
Now the pretty step. Between two words, draw the straight line that joins them and walk it, snapping at each step to the nearest word. What comes out isn't a jump from A to B but a road: a sequence of intermediate words that stitches the two concepts together. Choosing each step to stray least from the line is, underneath, a small optimization (Nocedal & Wright, 1999).
And here's the surprise: the endpoints don't decide the road. The space does. Rearrange the same words another way — another corpus, another world — and the same two anchors start passing through different intermediaries:
And if you'd rather have the sum than the picture, just walk the line in both spaces and watch the two roads diverge between the same endpoints:
import math
# two layouts of the same 12 words in a plane
A = {"ice":(0.05,0.5),"steam":(0.95,0.5),"cold":(0.2,0.45),"warm":(0.5,0.55),"hot":(0.8,0.5),
"water":(0.5,0.82),"liquid":(0.6,0.88),"snow":(0.15,0.18),"rain":(0.42,0.28),"cloud":(0.72,0.85),"fog":(0.78,0.72),"river":(0.38,0.9)}
B = {"ice":(0.1,0.1),"steam":(0.9,0.9),"snow":(0.28,0.28),"water":(0.5,0.5),"cloud":(0.7,0.7),
"cold":(0.1,0.4),"river":(0.32,0.6),"liquid":(0.42,0.64),"rain":(0.62,0.38),"warm":(0.42,0.74),"hot":(0.78,0.48),"fog":(0.86,0.64)}
def d(p, q): return math.hypot(p[0] - q[0], p[1] - q[1])
def road(S, a, b, n=60):
seq = []
for i in range(n + 1):
t = i / n
x = ((1 - t) * S[a][0] + t * S[b][0], (1 - t) * S[a][1] + t * S[b][1])
w = min(S, key=lambda k: d(x, S[k]))
if w not in (a, b) and (not seq or seq[-1] != w): seq.append(w)
return seq
print("space 1:", " -> ".join(["ice"] + road(A, "ice", "steam") + ["steam"]))
print("space 2:", " -> ".join(["ice"] + road(B, "ice", "steam") + ["steam"]))
In the end, where does the meaning-making live? Not in the two words you name, but in the ones you pass through to get from one to the other. Change the road and you've changed what the trip means — even when the destinations are the same. The mediation hides in the middle.
- Kornai, A. (2008). Mathematical Linguistics. Springer-Verlag London Limited.
- MacKay, D. J. C. (2005). Information Theory, Inference, and Learning Algorithms. Cambridge University Press.
- Nocedal, J., & Wright, S. J. (1999). Numerical Optimization. Springer-Verlag.
Barroso, A. M. (2025). The road between two words. alexandrebarroso.com. https://alexandrebarroso.com/notes/the-road-between-two-words.html
@misc{barroso2025theroadbetweentwowords,
author = {Alexandre Menezes Barroso},
title = {The road between two words},
year = {2025},
howpublished = {alexandrebarroso.com},
url = {https://alexandrebarroso.com/notes/the-road-between-two-words.html},
note = {alexandrebarroso.com}
}