我已经成功地使用Gensim的word2vec库创建了一个矢量模型。相关矢量之间的距离很好(也就是说,从人类的角度来看,派生的相似度是有意义的)。显然随机矢量绘图:TSNE
但是,试图将这些向量映射到图上已经证明具有挑战性。当然,矢量的N维需要减小才能进行绘图:为此,我使用了TSNE。
import gensim, logging, os
import codecs
import numpy as np
import matplotlib.pyplot as plt
import gensim, logging, os
from sklearn.manifold import TSNE
wvs = model.syn1neg
vocabulary = model.wv.vocab
tsne = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
Y = tsne.fit_transform(wvs[::])
plt.scatter(Y[:, 0], Y[:, 1])
for label, x, y in zip(vocabulary, Y[:, 0], Y[:, 1]):
plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points')
plt.show()
但是,与矢量由此而来点似乎是基本上是随机的 - 有只是一对夫妇的异常值的一个巨大的集群。
在一个典型的例子:注意最近邻居 “幻觉” 在集群
的边缘但实际矢量返回的USNG model.most_similar()是
[('agitated',0.7707732319831848),('restless',0.740711510181427), ('disorientated',0 ('困惑',0.6573441624641418),('累犯',0.6566967964172363),('困', 0.7215688228607178),('aggressive',0.71 69249057769775),('昏昏欲睡',0.6654224395751953) ,0.6562871932983398),(“摇”, 0.6419488191604614)
我可以开始什么方式来处理这个尝试,使输出更理智?
阅读文档并处理所有这些参数。当然,这样一个困难的任务可能需要微调。 – sascha
“wvs”的形状是什么?你为什么跳过TSNE的第一个100('wvs [100 ::]')? –
@ImanolLuengo尺寸显然是(6708 * 100)。跳过只是为了测试的目的,我会把它从引用的代码 – Stumbler