如何将Word2Vec模型表示为图形? (或将1x300 numpy数组转换为1x2数组)

时间:2017-07-22 01:37:43

标签: python arrays numpy graph word2vec

我的Word2Vec模型中有一个1x300的numpy数组,返回如下:

[ -2.55022556e-01   1.06162608e+00  -5.86191297e-01  -4.43067521e-01
   4.46810514e-01   4.31743741e-01   2.16610283e-01   9.27684903e-01
  -4.47879761e-01  -9.11142007e-02   3.27048987e-01  -8.05553675e-01
  -8.54483843e-02  -2.85595834e-01  -2.70745698e-02  -3.08014955e-02
   1.53204888e-01   3.16114485e-01  -2.82659411e-01  -2.98218042e-01
  -1.03240972e-02   2.12806061e-01   1.63605273e-01   9.42423999e-01
   1.20789325e+00   4.11570221e-01  -5.46323597e-01   1.95108235e-01
  -4.53743488e-01  -1.28625661e-01  -7.43277609e-01   1.11551750e+00
  -4.51873302e-01  -1.14495361e+00  -6.69551417e-02   6.88364863e-01
  -6.01781428e-01  -2.36386538e-01  -3.64305973e-01   1.18274912e-01
   2.03438237e-01  -1.01153564e+00   6.67958856e-01   1.80363625e-01
   1.26524955e-01  -2.96024203e-01  -9.93479714e-02  -4.93405871e-02
   1.02504417e-01   7.63318688e-02  -3.68398607e-01   3.03587675e-01
  -2.90227026e-01   1.51891649e-01  -6.93689287e-03  -3.99766594e-01
  -1.86124116e-01  -2.86920428e-01   2.04880714e-01   1.39914978e+00
   1.84370011e-01  -4.58923727e-01   3.91094625e-01  -7.52937734e-01
   3.05261135e-01  -4.55163687e-01   7.22679734e-01  -3.76093656e-01
   6.05900526e-01   3.26470852e-01   4.72957864e-02  -1.18182398e-01
   3.51043999e-01  -3.07209432e-01  -6.10330477e-02   4.14131492e-01
   7.57511556e-02  -6.48704231e-01   1.42518353e+00  -9.20495167e-02
   6.36665523e-01   5.48510313e-01   5.92754841e-01  -6.29535854e-01
  -4.47180003e-01  -8.99413109e-01  -1.52441502e-01  -1.98326513e-01
   4.74154204e-01  -2.07036674e-01  -6.70400202e-01   6.67807996e-01
  -1.04234733e-01   7.16163218e-01   3.32825005e-01   8.20083246e-02
   5.88186264e-01   4.06852067e-01   2.66174138e-01  -5.35981596e-01
   3.26077454e-02  -4.04357493e-01   2.19569445e-01  -2.74264365e-01
  -1.65187627e-01  -4.06753153e-01   6.12065434e-01  -1.89857081e-01
  -5.56927800e-01  -6.78636551e-01  -7.52498448e-01   1.04564428e+00
   5.32510102e-01   5.05628288e-01   1.95120305e-01  -6.40793025e-01
   5.73082231e-02  -1.58281475e-02  -2.62718409e-01   1.74351722e-01
  -6.95129633e-02   3.44214857e-01  -4.24746841e-01  -2.75907904e-01
  -6.60992935e-02  -1.19041657e+00  -6.01056278e-01   5.67718685e-01
  -6.47478551e-02   1.55902460e-01  -2.48480186e-01   5.56753576e-01
   1.29889056e-01   3.91534269e-01   1.28707469e-01   1.29670590e-01
  -6.98880851e-01   2.43386969e-01   7.70289376e-02  -1.14947490e-01
  -4.31593180e-01  -6.16873622e-01   6.03831768e-01  -2.07050622e-01
   1.23276520e+00  -1.67524610e-02  -4.67656374e-01   1.00281858e+00
   5.17916441e-01  -7.99495637e-01  -4.22653735e-01  -1.45487636e-01
  -8.71369673e-04   1.25453219e-01  -1.25869447e-02   4.66426492e-01
   5.07026255e-01  -6.53024793e-01   7.53435045e-02   8.33864748e-01
   3.37398499e-01   7.50920832e-01  -4.80326146e-01  -4.52838868e-01
   5.92808545e-01  -3.57870340e-01  -1.07011057e-01  -1.13945460e+00
   3.97635132e-01   1.23554178e-01   4.81683850e-01   5.47445454e-02
  -2.18614921e-01  -2.00085923e-01  -3.73975009e-01   8.74632657e-01
   6.71471596e-01  -4.01738763e-01   4.76147681e-01  -5.79257011e-01
  -1.51511624e-01   1.43170074e-01   5.00052273e-01   1.46719962e-01
   2.43085429e-01   5.89158475e-01  -5.25088668e-01  -2.65306592e-01
   2.18211919e-01   3.83228660e-01  -2.51622144e-02   2.32621357e-01
   8.06669474e-01   1.37254462e-01   4.59401071e-01   5.63044667e-01
  -5.79878241e-02   2.68106610e-01   5.47239482e-01  -5.05441546e-01]

阅读起来非常令人沮丧因为我只想获得像[12,19]这样的1x2数组,所以我可以将其表示为图形并对1x2数组进行余弦距离测量。

怎么做?或者如何将1x300 Word2Vec模型表示为2D图形?

2 个答案:

答案 0 :(得分:1)

有许多方法可以应用"降维"高维数据,以帮助解释或绘图。

一种超简单的方法,可以将300维缩小到2维,用于在平面屏幕/纸上绘图:只丢弃298个尺寸!您可以绘制一些内容 - 例如点(-0.255022556, 1.06162608),如果仅采用示例向量的前两个维度。

然而,从word2vec向量开始,那些不太可能是非常有趣的点,单独或当你开始绘制多个单词时。这些向量的精确轴维度不太可能对人类具有直观意义,并且你每个向量都会丢失99.7%的所有含义 - 并且很可能是(在彼此的一致)捕获语义有意义的维度关系。

所以你更有可能做一些更有思想的维度减少。一种超级简单的技术就是选择两个被认为有意义的向量方向作为新的X轴和Y轴。在word2vec世界中,这些不一定是集合中的现有向量 - 尽管它们可能是 - 但可能是两个向量之间的差异。 (word2vec向量的类比求解能力主要来自于发现两个向量A和B之间的差异,然后将该差异应用于第三向量C以找到第四向量D,此时D通常具有相同的人类直觉类似于C的关系,B必须是A.)

例如,你可能会对“男人”的单词向量产生差异。和'女人',得到一个引导你的新X轴的向量。然后区分父母'的字向量。和' worker',获取引导你的新Y轴的向量。然后,对于您想要绘制的每个候选300维向量,找到候选向量" s" new X"通过计算其在X方向矢量上的投影幅度。然后,找到候选向量"新Y"通过计算其在Y方向矢量上的投影幅度。这个可能会产生一组相对值,这些相对值在二维图表上模糊地匹配人类对于性别与家庭/工作场所角色之间经常观察到的语言关系的直觉。

正如@ poorna-prudhvi的评论所提到的,PCA和t-SNE是其他技术 - 它们可能在保持全维数据的某些有趣品质方面做得更好。 t-SNE尤其是为了支持机器学习和绘图而发明的,并且试图在较低维数中保持较高维数中存在的距离关系。

答案 1 :(得分:0)

除了@ gojomo的答案之外,如果它仅用于试验,我建议使用tensorflow's projector,这提供了一个开箱即用(近似)PCA的漂亮GUI叔SNE。

只需使用numpy.savetxt正确格式化矢量。