Word2Vec 给出的单词相似度图

Eco*_*sca 2 python graph gensim word2vec deep-learning

我想在一个简单的向量空间图中绘制不同单词之间的相似性。我已经使用 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)
Run Code Online (Sandbox Code Playgroud)

在一个简单的向量空间图中,我想放置以下单词:银行、金融、市场、房地产、石油、能源、商业和经济。我可以使用以下函数轻松计算这些单词对的相似度:

model.similarity('bank', 'property')
0.25089364531360675
Run Code Online (Sandbox Code Playgroud)

多谢

小智 5

为了绘制 Word2Vec 模型中的所有词向量,您需要执行降维。您可以使用 python sklearn 中的 TSNE 工具来可视化二维空间中的多维向量。

t 分布随机邻域嵌入

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)
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个二维相似度矩阵,您可以通过 pandas 进一步解析该矩阵,然后使用 seaborn 和 matplotlib 的 pyplot 函数进行绘图。