Как применить t-SNE на модели Word2Vec - PullRequest
0 голосов
/ 06 мая 2018

Я работаю над анализом настроений в Amazon Food Reviews и пытаюсь применить 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()

Кроме того, тот же код не работает, когда я передаю модель w2v_model, которая имеет тип gensim.models.word2vec.Word2Vec

Я получил модель, используя следующий код:

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

1 Ответ

0 голосов
/ 06 мая 2018

Вам необходимо извлечь все вложения слов после обучения модели. Я бы порекомендовал извлечь в 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

...