首页 > 解决方案 > 如何在 Word2Vec 模型上应用 t-SNE

问题描述

我正在对亚马逊食品评论进行情绪分析,我正在尝试将 Word2Vec 应用于评论并使用 t-SNE 将其可视化。

使用以下代码,我可以轻松地使用 Bag of words 表示来进行可视化:

    from sklearn.manifold import TSNE
    data_2000 = final_counts[0:2000,:]
    top_2000 = data_2000.toarray()
    labels = final['Score']
    labels_2000 = labels[0:2000]

    model = TSNE(n_components=2, random_state=0)
    tsne_data = model.fit_transform(top_2000)

    # creating a new data frame which help us in ploting the result 

      tsne_data = np.vstack((tsne_data.T, labels_2000)).T
      tsne_df = pd.DataFrame(data=tsne_data, columns=("Dim_1", "Dim_2", 
      "label"))

    # Ploting the result of tsne

       sns.FacetGrid(tsne_df, hue="label", size=6).map(plt.scatter, 
      'Dim_1', 'Dim_2').add_legend()
       plt.show()

此外,当我提供类型为 gensim.models.word2vec.Word2Vec 的 w2v_model 模型时,相同的代码不起作用

我使用以下代码获得了模型:

     w2v_model=gensim.models.Word2Vec(list_of_sent,min_count=5,size=50, 
     workers=4)

标签: python-3.xmachine-learningdeep-learningnltkamazon-machine-learning

解决方案


训练模型后,您需要提取所有词嵌入。我建议通过以下方式提取到 pd.DataFrame 中:

all_vocab = list(w2v_model.wv.vocab.keys())
data_dict = {word: w2v_model.wv[word] for word in all_vocab}
result = pd.DataFrame(data=data_dict).transpose()

如果您想在 scikit 中执行降维,只需通过以下方式访问嵌入数组result.values


推荐阅读