我对 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
现在,如果我将这个函数称为“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 ]
我需要帮助来理解输出矩阵。这些值代表什么,对生成新词有什么意义
最佳答案
在通常的 word2vec/GLoVe 中,单独的每维坐标并没有特别的意义。相反,训练过程会迫使单词处于有值(value)/有趣的相对位置。
所有含义都在相对距离和相对方向上,而不是与精确坐标轴具体对齐。
考虑一个经典的说明性示例:词向量解决类比的能力,例如“男人之于国王,女人之于?” – 通过在坐标空间中的某个预期点附近找到工作皇后。
词向量空间的邻域将包含许多一种类型的相关词(男人、男人、男性、男孩等 - 或国王、王后、王子、皇室等)。此外,可能有一些方向与人类的类别和量级观念(更像女性、更君主制、更高级别等)非常匹配。但是这些邻域和方向通常与空间的确切轴尺寸不是 1:1 相关的。
此外,充满词向量的空间有许多可能的近旋转/反射/变换,对于典型应用来说,它们与彼此一样好,但每个词的确切坐标完全不同。也就是说,所有预期的相对距离都是相似的——单词有“正确”的邻居,按正确的排序顺序——并且有有用的方向模式。但是每个单词中的单个词没有全局“正确”或一致的位置——只是相对有用的位置。
即使在一组向量中似乎存在一些模糊的相关性——比如“第 21 维中的高值与‘男性化’的概念相关——也可能是该向量集的巧合,而不是可靠的关系。
(有一些替代技术试图强制将单个维度映射到更易解释的概念——例如 NNSE——但它们的使用似乎不太常见。)
关于python - 词嵌入维度值实际上代表什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49732976/