我想在一个简单的向量空间图中画出不同单词之间的相似性。我已经使用gensim提供的模型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非常感谢
发布于 2017-02-22 19:11:00
要绘制Word2Vec模型中的所有单词向量,需要执行降维。您可以使用python的sklearn中的TSNE工具来可视化2-D空间中的多维向量。
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)这将为您提供一个2-D相似度矩阵,您可以进一步解析pandas,然后使用seaborn和matplotlib的pyplot函数进行绘图。
https://stackoverflow.com/questions/39296592
复制相似问题