Я хочу визуализировать word2vec, созданный из библиотеки gensim. Я попробовал sklearn, но мне кажется, мне нужно установить версию разработчика, чтобы получить его. Я попытался установить версию для разработчиков, но это не работает на моей машине. Можно ли изменить этот код для визуализации модели word2vec?Как запустить tsne на word2vec, созданный из gensim?
3
A
ответ
0
Используйте следующий код, вместо X Concat все ваши вложения слово по вертикали, используя numpy.vstack в матрицу X, а затем 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, чтобы вы могли ее визуализировать.
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 учиться - только install scikit-learn обычным способом через пип или Конда.
Для доступа слова векторов, созданные 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()