嵌入维度值实际上代表什么?

时间:2018-04-09 12:27:23

标签: python tensorflow nlp word2vec word-embedding

我对word2vec和单词嵌入有疑问,我已经下载了GloVe预训练的单词嵌入(形状40,000 x 50)并使用此函数从中提取信息:

import numpy as np
def loadGloveModel(gloveFile):
    print ("Loading Glove Model")
    f = open(gloveFile,'r')
    model = {}
    for line in f:
        splitLine = line.split()
        word = splitLine[0]
        embedding = np.array([float(val) for val in splitLine[1:]])
        model[word] = embedding
    print ("Done.",len(model)," words loaded!")
    return model

现在,如果我将此函数称为word' python'类似的东西:

print(loadGloveModel('glove.6B.100d.txt')['python'])

它给我1x50形状矢量:

[ 0.24934    0.68318   -0.044711  -1.3842    -0.0073079  0.651
 -0.33958   -0.19785   -0.33925    0.26691   -0.033062   0.15915
  0.89547    0.53999   -0.55817    0.46245    0.36722    0.1889
  0.83189    0.81421   -0.11835   -0.53463    0.24158   -0.038864
  1.1907     0.79353   -0.12308    0.6642    -0.77619   -0.45713
 -1.054     -0.20557   -0.13296    0.12239    0.88458    1.024
  0.32288    0.82105   -0.069367   0.024211  -0.51418    0.8727
  0.25759    0.91526   -0.64221    0.041159  -0.60208    0.54631
  0.66076    0.19796   -1.1393     0.79514    0.45966   -0.18463
 -0.64131   -0.24929   -0.40194   -0.50786    0.80579    0.53365
  0.52732    0.39247   -0.29884    0.009585   0.99953   -0.061279
  0.71936    0.32901   -0.052772   0.67135   -0.80251   -0.25789
  0.49615    0.48081   -0.68403   -0.012239   0.048201   0.29461
  0.20614    0.33556   -0.64167   -0.64708    0.13377   -0.12574
 -0.46382    1.3878     0.95636   -0.067869  -0.0017411  0.52965
  0.45668    0.61041   -0.11514    0.42627    0.17342   -0.7995
 -0.24502   -0.60886   -0.38469   -0.4797   ]

我需要帮助理解输出矩阵。这些值代表什么,并且在生成新词时具有重要意义

3 个答案:

答案 0 :(得分:1)

这是一篇很好的文章,解释了word2vec向量的潜在直觉和意义。

https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/

没有通用的方法可以确切地知道嵌入的含义,通过查看一个值变化的许多嵌入来发现该文章中讨论的结果,并注意到差异。每个word2vec模型都会提供自己独特的嵌入。嵌入的各个值在语言中具有一些语义含义。

word2vec给你的是将一个稀疏的单热矢量转换成一个小的密集向量,其中每个单词在语言中都有一些语义含义。大量稀疏输入通常对学习不利,小而密集,有意义的输入通常都很好。

答案 1 :(得分:1)

在通常的word2vec / GLoVe中,单个维度坐标并不具体表示任何内容。相反,训练过程迫使单词相互之间处于有价值/有趣的相对位置

所有含义均在相对距离相对方向中,未与精确坐标轴明确对齐。

考虑一个经典的说明性例子:单词向量解决类似“#em> man ”的类比的能力是国王作为女人" - 通过在坐标空间中的某个预期点附近找到工作 queen

单词 - 向量空间的邻域将包含许多相关单词的一种类型( man men male 男孩等 - 或国王女王王子皇家等)。此外,可能有一些方向与人类的类别和规模思想(更像女人,更多君主,更高等等)很好地匹配。但这些邻域和方向通常 1:1与空间的精确轴尺寸相关。

此外,对于典型应用而言,存在许多可能的近似旋转/反射/变换的空间,其中所述单词矢量与其他单词矢量一样好,但是对于每个单词,它们的精确坐标完全不同。也就是说,所有预期的相对距离都是相似的 - 单词具有“正确的”和“正确的”。邻居,排名顺序正确 - 并且有有用的方向模式。但每个单词中的单词都没有全局“正确”的字样。或一致的立场 - 只是相对有用的立场。

即使在一组向量中似乎存在一些模糊的相关性 - 例如"维度21中的高值与“男性”的概念相关联。 - 它可能是矢量集的巧合,而不是可靠的关系。

(有一些替代技术试图强制将各个维度映射到更易解释的概念 - 参见一个例子NNSE - 但它们的使用似乎不常见。)

答案 2 :(得分:0)

简而言之,单词嵌入中的向量词代表单词'上下文。然后,它"嵌入"意思是因为"类似的词语有类似的背景"。此外,你可以使用这个想法扩展到"无论嵌入"只需训练一个神经网络,其中包含许多内容(句子,段落,文档,图像和儿子),所得到的维数d将满足您对象的有价值的表示。

这是一个很好的帖子,可以获得完整的景观 https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/