我正在学习斯坦福大学NLP课程,我从Skipgram中了解了一个概念,如下图所示。
从左到右,第一列向量是单热编码器,第二列是来自1层神经网络的单词嵌入矩阵,第三列是单词表示向量。然而,当谈到第四个时,它是一个带有' v的矩阵。尺寸。不确定我是否正确地听,但是发言者说这是上下文单词的表示,这三个矩阵是相同的吗?
我的问题是: 1.为什么这三个矩阵是相同的但三个乘法结果是不同的? 2.我们如何得到这个矩阵(v乘d维)?
讲座的链接是:
答案 0 :(得分:2)
在回答你的问题之前,我必须为以前的幻灯片中的论据添加一些背景知识。首先,优化是关于一个词与另一个词共存的概率:中心词和上下文词。矢量表示可以在这两者之间共享,但实际上我们有两个矩阵集合(单词向量列表)1。中心单词向量(左边的第一个红色矩阵)2。上下文单词向量(中间的三个红色矩阵)。
这个问题中的图片显示了我们如何通过两种向量的乘法和softmax归一化来估计概率。现在的问题是:
- 我们如何获得此矩阵(v by d维度)?
醇>
如前所述,这可以是与单词向量相同的矩阵,但可以转置。或者,您可以想象我们为每个单词学习两个向量:1。中心2.上下文
计算中的上下文字向量以其转置形式使用:
(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
乘法基本上从此列表中选择正确的单词向量。最终结果是上下文单词向量和中心单词向量的所有可能的点积的列表。真实观察的上下文单词的单热矢量选择预期结果。然后,根据丢失情况,更新将通过更新W
和W'
的计算流程进行反向传播。
- 为什么这三个矩阵相同但三个乘法结果不同?
醇>
正方形和中间的两个菱形表示一个矩阵。三次乘法发生在三个不同的观察中。虽然它们代表相同的矩阵,但在每个观察参数(W
和W'
)上使用反向传播进行更改。这就是三次乘法结果不同的原因。
CHAT更新 但是,您的期望是有效的,演示文稿可以在这些乘法中显示完全相同的结果。因为目标函数是一个窗口中所有共现概率的总和。
答案 1 :(得分:1)
您不会使用相同的矩阵乘以三次。你只乘一次。您获得的输出向量与词汇量的大小相同。我将尝试用一个例子来解释
假设您的模型有V(vocab_size) = 6
,d = 4
,C(number of context words) = 2
,Wi(word_embedding matrix) size= 6 X 4
,Wo(output word representation) size = 4 X 6
。
培训示例x = [0,1,0,0,0,0]
和y = y = [[0,0,0,1,0,0], [1,0,0,0,0,0]] (two one-hot encoded vectors) one for each context word
。
现在,假设在输入和处理输入(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类(多项分类)的分类问题,同一对象可同时属于多个类(多标记分类。)