Machine learning 在SkipGram中上下文词的表示矩阵是什么意思?
我正在学习斯坦福NLP课程,从下图中我无法理解Skipgram中的一个概念 从左到右,第一列向量是一个热编码器,第二列向量是一层神经网络的单词嵌入矩阵,第三列向量是单词表示向量。然而,当涉及到第四个矩阵时,它是一个具有“v×d”维数的矩阵。我不确定我是否听错了,但演讲者说这是上下文词的表示,这三个矩阵是相同的吗 我的问题是: 1.为什么这三个矩阵相同,但三个乘法结果不同? 2.我们如何得到这个矩阵(v×d维) 演讲的链接是:Machine learning 在SkipGram中上下文词的表示矩阵是什么意思?,machine-learning,nlp,deep-learning,stanford-nlp,word2vec,Machine Learning,Nlp,Deep Learning,Stanford Nlp,Word2vec,我正在学习斯坦福NLP课程,从下图中我无法理解Skipgram中的一个概念 从左到右,第一列向量是一个热编码器,第二列向量是一层神经网络的单词嵌入矩阵,第三列向量是单词表示向量。然而,当涉及到第四个矩阵时,它是一个具有“v×d”维数的矩阵。我不确定我是否听错了,但演讲者说这是上下文词的表示,这三个矩阵是相同的吗 我的问题是: 1.为什么这三个矩阵相同,但三个乘法结果不同? 2.我们如何得到这个矩阵(v×d维) 演讲的链接是: 同一个矩阵不能相乘三次。你只乘一次。得到的输出向量与词汇表的大小相同
同一个矩阵不能相乘三次。你只乘一次。得到的输出向量与词汇表的大小相同。我将试着用一个例子来解释。
假设您的模型具有
V(单词大小)=6
,d=4
,C(上下文单词数)=2
,Wi(单词嵌入矩阵)大小=6 X 4
,Wo(输出单词表示)大小=4 X 6
训练示例x=[0,1,0,0,0,0]
和y=y=[0,0,0,1,0,0],[1,0,0,0,0]](两个一个热编码向量),每个上下文单词一个
现在,假设在输入和处理输入(h=x*Wi;z=h*Wo
)之后,您得到的输出(z
)是
z = [0.01520237, 0.84253418, 0.4773877 , 0.96858308, 0.09331018,0.54090063]
# take softmax, you will get
sft_max_z = [0.0976363 , 0.22331452, 0.15500148, 0.25331406, 0.1055682,0.16516544]
# sft_max_z represent the probability of each word occuring as input's context words.
#Now, subtract sft_max_z with each one-hot encoded vector in y to get the errors.
# errors = [[-0.0976363 , -0.22331452, -0.15500148, 0.74668594, -0.1055682 ,
-0.16516544],
[ 0.9023637 , -0.22331452, -0.15500148, -0.25331406, -0.1055682 ,
-0.16516544]]
现在,您可以减少错误并为训练执行反向传播。如果要预测,请选择概率最高的两个上下文单词(本例中为1,3)。将其视为一个具有多个类别(多项式分类)且同一对象可以同时属于多个类别(多标签分类)的分类问题。在回答您的问题之前,为了前面幻灯片中的论证,我必须添加一点背景知识。首先,优化基于一个词与另一个词(中心词和上下文词)同时出现的概率。向量表示可以在这两者之间共享,但实际上我们有两个矩阵集合(单词向量列表)1。中心字向量(左边第一个红色矩阵)2。上下文词向量(中间三个红色矩阵) 这个问题中的图片显示了我们如何通过两种向量的乘法和softmax归一化来估计概率。现在问题是:
(center words-vectors, v) W : (d,V)
(outside words-vectors, uT) W': (V,d)
V
是词汇表的大小,d
是向量的维度大小。(这些是我们希望从数据中学习的参数)
注意在每次矩阵乘法中维度是如何变化的:
W: (d,V)
x: (V,1)
v = W.x: (d,1)
W': (V,d)
W'.v: (V,1)
x
是中心词的一种热编码,W
是所有词向量的列表W.x
multiply基本上就是从这个列表中选择正确的单词向量。最后的结果是上下文词向量和中心词向量的所有可能点积的列表。真实观察到的上下文词的一个热向量选择预期结果。然后,基于丢失,更新将通过计算流更新W
和W'
进行反向传播
W
和W'
)上,使用反向传播进行更改。这就是为什么三次乘法的结果是不同的
从聊天室更新
但是,您的期望是正确的,演示文稿可能会在这些乘法中显示完全相同的结果。因为目标函数是一个窗口中所有共现概率的总和如果我理解正确的话,你声称“正方形和两个菱形在中间代表一个矩阵”,这意味着EHE正方形,两个菱形表示三个矩阵相同的维度,矩阵也做同样的工作。每个矩阵中的值都不同。实际上,我可以写W1,W2,W3和W1',W2',W3'。这种差异是由于语境词y1、y2、y3在不同位置的不同造成的。因此,我的中心词的单词嵌入矩阵(W)将根据我是想预测下一个词还是下一个词而变化。我说的对吗?不,不,当你预测事物时,它不会改变。它必须是固定不变的。只有当你训练它时,你才能反向传播更新。您的期望是绝对有效的,如果对窗口中的所有单词进行更新,而不是对单个单词进行更新(这是高效实现的情况),那么所有三个向量的结果应该保持不变。我想我的困惑在于预测部分。假设你已经有了一个固定的w’,因此w和我用我的中心词来预测前面的三个词。如果三个位置的所有三个向量的结果保持不变,则w(t-1)=w(t-2)=w(t-3)。这三个上下文单词被预测为同一个单词。但这是不正确的,为什么?结果是词汇表中所有可能的上下文词的概率向量。每个维度都是一个单词。这就是为什么我们有共同发生词的最终真相。嗯,你可能误解了我的问题。我的问题实际上是问预测时,比如说我的中心词是“hello”,如果我之前训练了模型,那么它的词向量V是固定的。正如你所说,W’也是固定的