我对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 ]
我需要帮助理解输出矩阵。这些值代表什么,并且在生成新词时具有重要意义
答案 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/