gensim 라이브러리에서 생성 한 word2vec를 시각화하고 싶습니다. 나는 sklearn을 시도했으나 그것을 얻으려면 개발자 버전을 설치해야 할 것 같습니다. 개발자 버전을 설치하려고했지만 내 컴퓨터에서 작동하지 않습니다. 이 코드를 수정하여 word2vec 모델을 시각화 할 수 있습니까?gensim에서 만든 word2vec에서 tsne을 실행하는 방법은 무엇입니까?
3
A
답변
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()