Я хотел бы построить в простом векторном пространстве график сходства между разными словами. Я вычислил их, используя модель word2vec
, данную 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
Большое спасибо
Учтите, что 'gensim.models.Word2Vec' по умолчанию производит 100-мерные векторы слов. Сначала нужно уменьшить размерность, если вы хотите построить положение вектора (до 2 или 3 измерения). –
Очень хорошее предложение @ Альваро. У меня этого не было. Тем не менее, исходя из результатов, полученных с помощью функциональной модели. Я хотел бы ожидать простого способа построения расстояния в плоскости. –
Уменьшение размерности - это то, что Микилов и др. [в своей статье] (https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-the-compositionality.pdf) (см. рисунок 2). К сожалению, я не думаю, что есть другой путь. –