2016-11-14 12 views
3

私はgensimライブラリから作成したword2vecを視覚化したいと思います。私はsklearnを試みたが、私はそれを得るために開発者のバージョンをインストールする必要があるようだ。私は開発者のバージョンをインストールしようとしましたが、それは私のマシンでは動作しません。このコードを修正してword2vecモデルをビジュアル化することは可能ですか?gensimから作成したword2vecでtsneを実行するには?

tsne_python

答えて

0

Xが縦に行列Xにnumpy.vstackを使用して、すべての単語の埋め込みをCONCATし、それをfit_transformの代わりに、以下のコードを使用してください。

import numpy as np 
from sklearn.manifold import TSNE 
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]]) 
model = TSNE(n_components=2, random_state=0) 
np.set_printoptions(suppress=True) 
model.fit_transform(X) 

fit_transformの出力には、形状vocab_size x 2があり、視覚化することができます。 ピップまたはconda経由だけinstall scikit-learn通常の方法を -

vocab = sorted(word2vec_model.get_vocab()) #not sure the exact api 
emb_tuple = tuple([word2vec_model[v] for v in vocab]) 
X = numpy.vstack(emb_tuple) 
13

あなたは学ぶscikitの開発者向けバージョンを必要としません。単にモデルへのインデックスとして単語辞書を使用word2vecによって作成された単語ベクトルにアクセスするには

:後

X = model[model.wv.vocab] 

は、いくつかのニュースグループのデータをロードする単純だが、完全なコード例である(非常に基本的なデータの準備を適用します文章を整理し、解読する)、word2vecモデルを訓練し、t-SNEで次元を縮小し、出力を視覚化する。

from gensim.models.word2vec import Word2Vec 
from sklearn.manifold import TSNE 
from sklearn.datasets import fetch_20newsgroups 
import re 
import matplotlib.pyplot as plt 

# download example data (may take a while) 
train = fetch_20newsgroups() 

def clean(text): 
    """Remove posting header, split by sentences and words, keep only letters""" 
    lines = re.split('[?!.:]\s', re.sub('^.*Lines: \d+', '', re.sub('\n', ' ', text))) 
    return [re.sub('[^a-zA-Z]', ' ', line).lower().split() for line in lines] 

sentences = [line for text in train.data for line in clean(text)] 

model = Word2Vec(sentences, workers=4, size=100, min_count=50, window=10, sample=1e-3) 

print (model.most_similar('memory')) 

X = model[model.wv.vocab] 

tsne = TSNE(n_components=2) 
X_tsne = tsne.fit_transform(X) 

plt.scatter(X_tsne[:, 0], X_tsne[:, 1]) 
plt.show() 
関連する問題