首页 文章

上下文单词的表示矩阵在SkipGram中意味着什么?

提问于
浏览
2

我正在学习斯坦福NLP课程,我从Skipgram中了解了一个概念,如下图所示 .

enter image description here
从左到右,第一列向量是单热编码器,第二列是来自1层神经网络的单词嵌入矩阵,第三列是单词表示向量 . 然而,当谈到第四个时,它是一个具有'v by d'维度的矩阵 . 不确定我是否正确地听,但是发言者说这是上下文单词的表示,这三个矩阵是相同的吗?

我的问题是:1 . 为什么这三个矩阵是相同的,但三个乘法结果是不同的? 2.我们如何得到这个矩阵(v维d)?

讲座的链接是:

https://www.youtube.com/watch?v=ERibwqs9p38&t=1481s

2 回答

  • 1

    在回答你的问题之前,我必须为以前幻灯片中的论据添加一些背景知识 . 首先,优化是关于一个词与另一个词共存的概率:中心词和上下文词 . 矢量表示可以在这两者之间共享,但实际上我们有两个矩阵集合(单词向量列表)1 . 中心单词向量(左边的第一个红色矩阵)2 . 上下文单词向量(中间的三个红色矩阵) .

    该问题中的图片显示了我们如何通过两种向量的乘法和softmax归一化来估计概率 . 现在的问题是:

    我们如何得到这个矩阵(v维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 multiplication基本上从这个列表中选择正确的单词向量 . 最终结果是上下文单词向量和中心单词向量的所有可能的点积的列表 . 真实观察的上下文单词的单热矢量选择预期结果 . 然后,根据丢失,更新将通过更新 WW' 的计算流程进行反向传播 .

    为什么这三个矩阵相同但三个乘法结果不同?

    正方形和中间的两个菱形表示一个矩阵 . 三次乘法发生在三个不同的观察中 . 虽然它们代表相同的矩阵,但在每个观察参数( WW' )上使用反向传播进行更改 . 这就是三次乘法结果不同的原因 .

    UPDATE FROM CHAT 但是,您的期望是有效的,演示文稿可以在这些乘法中显示完全相同的结果 . 因为目标函数是一个窗口中所有共现概率的总和 .

  • 1

    您不会使用相同的矩阵乘以三次 . 你只乘一次 . 您获得的输出向量与词汇量的大小相同 . 我将尝试用一个例子来解释 .
    假设您的模型有 V(vocab_size) = 6d = 4C(number of context words) = 2Wi(word_embedding matrix) size= 6 X 4Wo(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个类(多项分类)的分类问题,并且同一对象可以同时属于多个类(多标记分类) .

相关问题