【问题标题】:What does representation matrix of context word mean in SkipGram?SkipGram中上下文词的表示矩阵是什么意思?
【发布时间】:2018-09-03 12:11:43
【问题描述】:

我正在学习斯坦福 NLP 课程,但我在从下图中理解 Skipgram 中的概念时遇到问题。

从左到右,第一个列向量是 one-hot 编码器,第二个是来自 1 层神经网络的词嵌入矩阵,第三个是词表示向量。但是,当涉及到第四个时,它是一个具有“v x d”维度的矩阵。不确定我是否听对了,但说话者说这是上下文词的表示,这三个矩阵是相同的?

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

讲座链接为:

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

【问题讨论】:

    标签: machine-learning nlp deep-learning stanford-nlp word2vec


    【解决方案1】:

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

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

    1. 我们如何得到这个矩阵(v x d 维度)?

    如前所述,这可以是与词向量相同的矩阵,但可以转置。或者,你可以想象我们为每个单词学习了两个向量:1. center 2. context

    计算中的上下文词向量以其转置形式使用:

    (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是中心词的one-hot编码,W是所有词向量的列表。 W.x 乘法基本上从这个列表中选择正确的词向量。最终结果是上下文词向量和中心词向量的所有可能点积的列表。真实观察到的上下文词的 one-hot 向量选择预期的结果。然后,基于损失,更新将通过计算流更新WW'进行反向传播。

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

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

    通过聊天更新 但是,您的期望是有效的,演示文稿可能会在这些乘法中显示完全相同的结果。因为目标函数是一个窗口中所有共现概率的总和。

    【讨论】:

    • 如果我理解正确,您声称“中间的正方形和两个菱形代表一个矩阵”,这意味着正方形和两个菱形代表三个具有相同维度的矩阵并且矩阵正在做同样的工作。每个矩阵中的值是不同的。实际上,我可以写 W1,W2,W3 和 W1', W2', W3'。差异是由不同的上下文词 y1, y2, y3 在不同的位置引起的。因此,中心词的词嵌入矩阵 (W) 会根据我是要预测下一个词还是下一个词而改变。我说的对吗?
    • 不不,当你预测事物时它不会改变。它必须是固定不变的。只有当你训练它时,你才会反向传播更新。您的期望是绝对有效的,如果对窗口中的所有单词进行更新而不是单个单词更新(这是有效实现的情况),则所有三个向量的结果应该保持相同
    • 我认为我的困惑是关于预测部分。假设你已经有一个固定的 w',因此我使用我的中心词来预测前三个词。如果三个位置的所有三个向量的结果都相同,则 w(t-1) = w(t-2)=w(t-3)。三个上下文词被预测为同一个词。但这是不正确的,为什么?
    • 结果是词汇表中所有可能的上下文词的概率向量。每个维度都是一个词。这就是为什么我们有共同出现的词的最终真值 one-hot 向量。
    • 嗯,你可能误解了我在问什么。我的问题实际上是在预测时询问,说我的中心词是“你好”,如果我之前训练过模型,那么它的词向量 V 是固定的。正如你所说,W' 在预测时也是固定的,当我预测位置在 t-1 的上下文词时,我使用相同的 V 和 W' 得到 W(t-1) 的向量,这与W(t-2) 因为 W' 和 V 不变。然后我会预测所有上下文词都是同一个词,而不管我要预测的上下文词的位置。
    【解决方案2】:

    您不会将同一个矩阵乘以三次。你只乘一次。你得到一个与词汇量大小相同的输出向量。我将尝试用一个例子来解释。
    假设你的模型有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)。
    可以将其视为具有多个类的分类问题(多项分类),并且同一对象可以同时属于多个类(多标签分类)。

    【讨论】:

    • 当我重新审视这个问题时,我对你的例子有点困惑。您有两个上下文词,当您使用 SkipGram 预测这些上下文词时,您选择 1 和 3,因为它们的概率最高。我想知道你怎么知道哪个词对应1,另一个词对应3?
    • 使用单热编码。
    猜你喜欢
    • 2017-10-03
    • 2018-12-29
    • 2012-08-17
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多