gensimで学習させたword2vecの分散表現ベクトルを、scikit-learnのt-SNEで次元圧縮してプロットする。
#word2vecを学習させる import gensim model = gensim.models.Word2Vec(sentences, min_count=5)#sentencesの中身は[["こういう", "文章","の","配列"],["単語","単語",...],...] word2vec_model=model #必要なライブラリをインポート import matplotlib.pyplot as plt from sklearn.manifold import TSNE import numpy as np #取り出す単語の範囲を指定 skip=0 limit=241#よく出る241単語のみをプロットする #word2vecの結果をt-SNEで次元圧縮 vocab = word2vec_model.__dict__['index2word'] emb_tuple = tuple([word2vec_model[v] for v in vocab]) X = np.vstack(emb_tuple) model = TSNE(n_components=2, random_state=0) np.set_printoptions(suppress=True) model.fit_transform(X) #matplotlibでt-SNEの図を描く plt.figure(figsize=(40,40))#図のサイズ plt.scatter(model.embedding_[skip:limit, 0], model.embedding_[skip:limit, 1]) count = 0 for label, x, y in zip(vocab, model.embedding_[:, 0], model.embedding_[:, 1]): count +=1 if(count<skip):continue plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points') if(count==limit):break plt.show()
参考
stack overflow 「How to run tsne on word2vec created from gensim?」 http://stackoverflow.com/questions/40581010/how-to-run-tsne-on-word2vec-created-from-gensim
Quora 「How do I visualise word2vec word vectors?」 https://www.quora.com/How-do-I-visualise-word2vec-word-vectors