如何对我们通过word2vec模型得的的词向量(.txt文件)进行可视化?
步骤如下:
1)导入包matplotlib.pyplot、KMeans、PCA;
2)读取词向量文件信息,获取所有词数组(array)和词到词向量的映射(dict);
3)用for循环得到当前所选词的词向量数组(array);
4)将高维向量压缩为二维向量,以此作为可视化图像的X与Y轴坐标;
5)设定好维度、颜色、字体后开始画图,最后再为每个词标注信息。
代码如下:
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
f = open("embedding.txt", encoding="utf-8")
f.readline() # 略过头文件信息
all_words = [] # 所有词
word2emb = dict() # 词到词向量的映射
for i, line in enumerate(f):
line = line.strip().split(' ')
word = line[0]
embedding = [float(x) for x in line[1:]]
all_words.append(word)
word2emb[word] = embedding
pca = PCA(n_components=2) # 将目标向量维度(n_components)设定为2
KM = KMeans(n_clusters=10) # 使用10种颜色进行标注
corpus = all_words[0:200] # 只显示前200个单词
vector = []
for word in corpus: # 获取到当前词的所有词向量
emb = word2emb[word]
vector.append(emb)
vector_2d = pca.fit_transform(vector) # 降维到二维
y_ = KM.fit_predict(vector_2d) # 将所有点分成多个簇,以便标注不同颜色
plt.rcParams['font.sans-serif'] = ['FangSong'] # 标注字体为仿宋
plt.scatter(vector_2d[:, 0], vector_2d[:, 1], c=y_)
for i in range(len(corpus)): # 给每个点进行标注
plt.annotate(text=corpus[i], xy=(vector_2d[:, 0][i], vector_2d[:, 1][i]),
xytext=(vector_2d[:, 0][i] + 0.1, vector_2d[:, 1][i] + 0.1))
plt.show()



