python - 使用 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()
解决方案
TSNE 是一种非确定性降维技术。因此,在具有相同超参数的不同运行中,可能会产生不同的输出,但可能非常相似。TSNE 是一种非常流行的降维技术,因为它有效地利用了非线性数据,并且能够保留局部和全局结构,因此非常可靠。但是,如果没有适当的超参数调整,这些图可能会很棘手并且会产生误导。
有关如何解释 TSNE 图的更多信息,我强烈建议您阅读这篇文章,其中通过交互式可视化出色地解释了 TSNE 的有效使用。
推荐阅读
- autodesk-forge - 在 Web 组件中使用 Autodesk Forge
- c# - 在实体框架中调用存储过程后返回所有行
- mod-rewrite - .htaccess MAMP 与环境的差异
- python - Python numpy数组拆分索引超出范围
- javascript - 未找到模块:错误:无法解析“react-hot-loader/webpack”
- excel - Excel - SUMIFS - 表格的动态总和范围
- php - Moodle auth 插件 - 调用未定义的函数
- php - 每次刷新会话文件夹中创建的多个会话文件:Laravel
- actionscript-3 - 如何从附加到 .fla 文件的 main.as 类文件运行另一个 .as 文件的构造函数代码?
- meteor - 如何使用流星中的集群包在本地扩展应用程序?