首页 > 解决方案 > 使用 TSNE 可视化 word2vec 嵌入时的随机点

问题描述

我创建了一个 word2vec 模型,并使用 TSNE 和 matplotlib 对特定术语的前 n 个相似词进行了可视化。我不明白的是,当我多次运行它时,即使每次单词和向量都相同,相同的单词也会被绘制到不同的位置。为什么会这样?我觉得这与 TSNE 降低向量维数的方式有关。如果是这种情况,使用这种可视化方法是否真的可靠,因为它每次都会不同?

model = Word2Vec.load("a_w2v_model")

topn_words_list = [x[0] for x in model.wv.most_similar("king",topn=3)]
topn_vectors_list = model[topn_words_list]

tsne = TSNE(n_components=2, verbose=1, perplexity=27, n_iter=300)
Y = tsne.fit_transform(topn_vectors_list)

fig, ax = plt.subplots()
ax.plot(Y[:, 0], Y[:, 1], 'o')
ax.set_yticklabels([]) #Hide ticks
ax.set_xticklabels([]) #Hide ticks

for i, word in enumerate(topn_words_list):
    plt.annotate(word, xy=(Y[i, 0], Y[i, 1]))
plt.show()

标签: pythonmatplotlibpcagensimword2vec

解决方案


TSNE 是一种非确定性降维技术。因此,在具有相同超参数的不同运行中,可能会产生不同的输出,但可能非常相似。TSNE 是一种非常流行的降维技术,因为它有效地利用了非线性数据,并且能够保留局部和全局结构,因此非常可靠。但是,如果没有适当的超参数调整,这些图可能会很棘手并且会产生误导。

有关如何解释 TSNE 图的更多信息,我强烈建议您阅读这篇文章,其中通过交互式可视化出色地解释了 TSNE 的有效使用。


推荐阅读