50,000 Words - Semantic Map of English Vocabulary

50,000 wordsNLPembeddingscosine

A TMAP of 50,000 English words spanning 45 WordNet categories, embedded with all-MiniLM-L6-v2 (cosine metric). Because most words carry multiple senses, category boundaries are porous: only 8.5% of tree edges connect same-category words, with adjective-person (2,041 edges) and adjective-artifact (2,029 edges) the most common crossings, and mean subtree purity is a low 0.198. The map's real value is local semantic continuity - tree paths trace plausible word-association chains, e.g. dog to wolf in 46 hops, mountain to ocean in 45, rain to snow in 44, versus dog to guitar in 141 hops for a semantically distant pair.

50,000 Words - Semantic Map of English VocabularyOpen full page
Loading interactive demo…

How it was made

generate.pypython
from sentence_transformers import SentenceTransformer
from tmap import TMAP

encoder = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = encoder.encode(words, show_progress_bar=True)

model = TMAP(metric="cosine", n_neighbors=20, seed=42).fit(embeddings)

# Semantic path between two words
path = model.path(word_index["dog"], word_index["wolf"])
print(f"dog -> wolf: {len(path)} hops")

viz = model.to_tmapviz()
viz.add_label("word", words)
viz.add_color_layout("category", categories, categorical=True, color="tab20")
viz.write_html("words_50k.html")