Word2Vec 给出的单词相似度图
Graphical plot of words similarity given by Word2Vec
我想在一个简单的向量 space 图中绘制不同单词之间的相似度。我使用 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)
在一个简单的向量 space 图中,我想放置以下词语:银行、金融、市场、属性、石油、能源、商业和经济。我可以很容易地用函数计算这些词对的相似度:
model.similarity('bank', 'property')
0.25089364531360675
非常感谢
要绘制 Word2Vec 模型中的所有词向量,您需要执行降维。您可以使用 python 的 sklearn 中的 TSNE 工具来可视化二维 space 中的多维向量。
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)
这将为您提供一个二维相似度矩阵,您可以通过 pandas 进一步解析该矩阵,然后使用 seaborn 和 matplotlib 的 pyplot 函数进行绘图。
我想在一个简单的向量 space 图中绘制不同单词之间的相似度。我使用 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)
在一个简单的向量 space 图中,我想放置以下词语:银行、金融、市场、属性、石油、能源、商业和经济。我可以很容易地用函数计算这些词对的相似度:
model.similarity('bank', 'property')
0.25089364531360675
非常感谢
要绘制 Word2Vec 模型中的所有词向量,您需要执行降维。您可以使用 python 的 sklearn 中的 TSNE 工具来可视化二维 space 中的多维向量。
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)
这将为您提供一个二维相似度矩阵,您可以通过 pandas 进一步解析该矩阵,然后使用 seaborn 和 matplotlib 的 pyplot 函数进行绘图。