【问题标题】:random points when visualizing word2vec embeddings using TSNE使用 TSNE 可视化 word2vec 嵌入时的随机点
【发布时间】:2020-05-12 11:29:24
【问题描述】:

我创建了一个 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()

【问题讨论】:

    标签: python matplotlib pca gensim word2vec


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      正如@Nischal Sanil 所提到的,T-SNE 是一种非确定性的降维技术。这就是为什么在sklearnTSNE 实现中有一个名为random_state 的参数。

      因此,要每次都获得相同的结果,请将random_state 设置为某个值。

      【讨论】:

        猜你喜欢
        • 2018-05-23
        • 2018-11-03
        • 2018-07-11
        • 2018-11-02
        • 2021-11-13
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多