我对 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)/有趣的相对位置。
所有含义均在于相对距离和相对方向,而不是专门与精确坐标轴对齐。
考虑一个经典的说明性示例:词向量能够解决类似“男人是国王,就像女人是?” - 通过在坐标空间中某个预期点附近找到工作皇后。
词向量空间的邻域包含许多一种类型的相关词(man、men、male、 男孩等 - 或国王、女王、王子、皇家等.)。此外,可能有一些方向与人类的类别和程度观念非常匹配(更女性化、更君主制、更高等级等)。但这些邻域和方向通常与空间的精确轴尺寸不 1:1 相关。
此外,充满词向量的空间存在许多可能的近旋转/反射/变换,它们对于典型应用来说彼此一样好,但每个词的精确坐标完全不同。也就是说,所有预期的相对距离都是相似的——单词有“正确的”邻居,按正确的排名顺序——并且存在有用的方向模式。但每个单词中的各个单词没有全局“正确”或一致的位置 - 只是相对有用的位置。
即使在一组向量中似乎存在一些模糊的相关性 - 例如“21 维中的高值与‘男性’的概念相关 - 这很可能是该向量组的巧合,而不是可靠的关系。
(有一些替代技术试图强制将各个维度映射到更容易解释的概念 - 例如 NNSE - 但它们的使用似乎不太常见。)
关于python - 词嵌入维度值实际上代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49732976/