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 

주셔서 감사합니다 Word2Vec 모델에있는 모든 단어 벡터를 플로팅 많은

+1

'gensim.models.Word2Vec'가 기본적으로 100 차원 단어 벡터를 생성한다는 점을 고려하십시오. 벡터의 위치를 ​​2 차원 또는 3 차원으로 플롯하려는 경우 먼저 치수를 줄여야합니다. –

+0

아주 좋은 제안 @ Alvaro. 나는 그것을 고려하지 않았다. 그럼에도 불구하고 function model.similarity에 의해 검색된 결과를 기반으로 평면에서 거리를 그리는 간단한 방법을 기대합니다. –

+1

치수를 줄이는 것은 Mikilov가 말한 것입니다. [그들의 논문에서] (https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf) (그림 2 참조). 불행히도 다른 방법이 있다고 생각하지 않습니다. –

답변

2

을, 당신은 차원 축소를 수행해야합니다. 파이썬의 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) 

이 당신이 더 팬더 통해 분석하고 시본 및하기 matplotlib pyplot의 기능을 이용하여 플롯 수있는 2-D 유사성 행렬을 줄 것이다.