词嵌入散点图:把语义画在二维平面上
Embedding Visualization: From 100D to 2D
100 维的词向量人眼看不出来。降维到 2 维 = t-SNE/UMAP,画散点图 — 一眼看出语义聚类。
1. t-SNE 降维
from sklearn.manifold import TSNE
import numpy as np
top_words = [w for w, _ in model.wv.most_common(200)]
vectors = np.array([model.wv[w] for w in top_words])
tsne = TSNE(n_components=2, random_state=42, perplexity=30)
embeddings_2d = tsne.fit_transform(vectors)
print(f'降维完成: {embeddings_2d.shape}')
2. 画散点图
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 10))
plt.scatter(embeddings_2d[:, 0], embeddings_2d[:, 1],
alpha=0.6, s=50, c=range(200), cmap='tab20')
for i, word in enumerate(top_words[:30]):
plt.annotate(word, (embeddings_2d[i, 0], embeddings_2d[i, 1]),
fontsize=10, alpha=0.8)
plt.title('词嵌入空间(Word2Vec + t-SNE)', fontsize=14)
plt.xlabel('t-SNE dim 1')
plt.ylabel('t-SNE dim 2')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('word_embeddings_2d.png', dpi=150, bbox_inches='tight')
t-SNE vs UMAP:t-SNE 经典但慢,UMAP 更快且保留全局结构。10 万+词用 UMAP,几千词用 t-SNE 即可。
3. 看聚类
散点图画出来后,你会发现:
- 品牌词(小米/华为/苹果)聚成一团
- 形容词(不错/很好/优秀)聚成另一团
- 产品词(屏幕/电池/续航)聚成第三团
这是 Word2Vec 学到语义的视觉证据 — 词性相似、语境相似的词会自动聚到一起。
想跳过训练 + 降维,直接出可交互词嵌入散点图?
配套软件内置 Word2Vec + UMAP 降维 + 散点图,导入即出可交互图