2016-09-02 6 views
1

異なる単語間の類似性を単純なベクトル空間グラフにプロットしたいと思います。 gensimで与えられたモデルword2vecを使って計算しましたが、文献ではグラフィカルな例は見つかりません。次のように私のコードです:銀行、金融、市場、不動産、石油、エネルギー、ビジネスと経済:単語類似度のグラフィカルプロットWord2Vecによって与えられる

## Libraries to download 
from nltk.tokenize import RegexpTokenizer 
from nltk.corpus import stopwords 
from nltk.stem.porter import PorterStemmer 
from gensim import corpora, models 
import gensim 

import json 
import nltk 
import re 
import pandas 


appended_data = [] 


#for i in range(20014,2016): 
# df0 = pandas.DataFrame([json.loads(l) for l in open('SDM_%d.json' % i)]) 
# appended_data.append(df0) 

for i in range(2005,2016): 
    if i > 2013: 
     df0 = pandas.DataFrame([json.loads(l) for l in open('SDM_%d.json' % i)]) 
     appended_data.append(df0) 
    df1 = pandas.DataFrame([json.loads(l) for l in open('Scot_%d.json' % i)]) 
    df2 = pandas.DataFrame([json.loads(l) for l in open('APJ_%d.json' % i)]) 
    df3 = pandas.DataFrame([json.loads(l) for l in open('TH500_%d.json' % i)]) 
    df4 = pandas.DataFrame([json.loads(l) for l in open('DRSM_%d.json' % i)]) 
    appended_data.append(df1) 
    appended_data.append(df2) 
    appended_data.append(df3) 
    appended_data.append(df4) 


appended_data = pandas.concat(appended_data) 
# doc_set = df1.body 

doc_set = appended_data.body 

## Building the deep learning model 
import itertools 

sent_detector = nltk.data.load('tokenizers/punkt/english.pickle') 
sentenized = doc_set.apply(sent_detector.tokenize) 
sentences = itertools.chain.from_iterable(sentenized.tolist()) # just to flatten 

from gensim.models import word2vec 


result = [] 
for sent in sentences: 
    result += [nltk.word_tokenize(sent)] 

model = gensim.models.Word2Vec(result) 

を、単純なベクトル空間のグラフでは、私は、次の単語を配置するようになります。私は簡単に機能して単語のこれらのペアの類似度を計算することができます。

model.similarity('bank', 'property') 
0.25089364531360675 

どうもありがとう

+1

デフォルトでは、 'gensim.models.Word2Vec'は100次元の単語ベクトルを生成することを考慮してください。ベクトルの位置を2次元または3次元にプロットする場合は、最初に次元数を減らす必要があります。 –

+0

非常に良い提案@Alvaro。私はそれを考慮に入れなかった。それにもかかわらず、関数モデル類似度によって得られた結果に基づいて、飛行機内の距離をプロットする簡単な方法が期待されます。 –

+1

次元を小さくすることは、Mikilov et al。 [彼らの論文で](https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf)(図2参照)。私は残念ながら別の方法があるとは思わない。 –

答えて

2

をごWord2Vecモデル内のすべての単語のベクトルをプロットするためには、次元削減を実行する必要があります。 PythonのsklearnのTSNEツールを使用して、2D空間内の多次元ベクトルを視覚化することができます。

t-distributed Stochastic Neighbor Embedding

import sklearn.manifold.TSNE 

tsne = sklearn.manifold.TSNE(n_components = 0 , random_state = 0) 
all_vector_matrix = model.syn0 
all_vector_matrix_2d = tsne.fit_transform(all_vector_matrix) 

これは、あなたがさらにパンダを解析し、その後seabornとmatplotlibののpyplot機能を使用してプロットすることができ、2-Dの類似度行列を与えます。

関連する問題