具体例子

假设我们现在的Corpus是这一个简单的只有四个单词的document:
{I drink coffee everyday}
我们选coffee作为中心词,window size设为2
也就是说,我们要根据单词"I","drink"和"everyday"来预测一个单词,并且我们希望这个单词是coffee。

CBOW如何将one-hot向量转换成低维词向量

CBOW如何将one-hot向量转换成低维词向量

CBOW如何将one-hot向量转换成低维词向量

CBOW如何将one-hot向量转换成低维词向量

CBOW如何将one-hot向量转换成低维词向量

假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的look up table应该为矩阵W。即,任何一个单词的one-hot表示乘以这个矩阵都将得到自己的word embedding。

有了上面的介绍,我们来看看CBOW具体的训练步骤

根据指定窗口的上下文预测或生成它的中心词。

比如,根据{“the”,“cat”,“over”,“the”,“puddle”}预测或生成单词jumped。

首先,模型已知的参数,我们用one-hot向量表示整个上下文,记为 CBOW如何将one-hot向量转换成低维词向量 。同时,因为CBOW模型仅预测一个单词,所以输出是一个中心词的one-hot表示,记为 CBOW如何将one-hot向量转换成低维词向量 。

接着,模型未知的参数,我们定义 CBOW如何将one-hot向量转换成低维词向量 和 CBOW如何将one-hot向量转换成低维词向量 矩阵,其中n是用户指定的词向量空间大小。V是输入的词矩阵,即V的第i列表示单词 CBOW如何将one-hot向量转换成低维词向量 的n维词向量,记为列向量 CBOW如何将one-hot向量转换成低维词向量 。同样,U是输出的词矩阵,即U的第j行表示单词 CBOW如何将one-hot向量转换成低维词向量 的n维词向量,记为行向量 CBOW如何将one-hot向量转换成低维词向量 。

CBOW训练过程6步

  • 1,生成以one-hot向量表示,size=m的上下文窗口输入:

    CBOW如何将one-hot向量转换成低维词向量 )

  • 2,初始化矩阵V,生成模型的输入词向量 :

    CBOW如何将one-hot向量转换成低维词向量

  • 3,计算上下文窗口内词向量的均值向量:

    CBOW如何将one-hot向量转换成低维词向量

  • 4,初始化矩阵U,生成得分向量 CBOW如何将one-hot向量转换成低维词向量 ;

  • 5,使用softmax将得分向量z转换为概率 CBOW如何将one-hot向量转换成低维词向量 

  • 6,真实的y是中心词的one-hot向量,而 CBOW如何将one-hot向量转换成低维词向量 是对它的预测。因此想办法找到最适合的V和U,使y和 CBOW如何将one-hot向量转换成低维词向量 尽可能接近,就可以达到目的。

本质上就是学习每个单词 CBOW如何将one-hot向量转换成低维词向量 的输入矩阵列向量 CBOW如何将one-hot向量转换成低维词向量 和输出矩阵行向量 CBOW如何将one-hot向量转换成低维词向量 。

为了实现上述目标,首先需要定义目标函数。

通常,概率领域的建模会使用信息理论来测量2个分布之间的距离。在CBOW模型中,我们选择交叉熵作为损失函数,即 CBOW如何将one-hot向量转换成低维词向量 

y是one-hot向量,中心词 CBOW如何将one-hot向量转换成低维词向量 所在的位置c,值 CBOW如何将one-hot向量转换成低维词向量 是1,其余为0。显然,当 CBOW如何将one-hot向量转换成低维词向量 时,损失H最小为0,但当 CBOW如何将one-hot向量转换成低维词向量 时,损失H约为4.6。因此,交叉熵H给概率分布的距离计算提供了一个非常好的方法。

最优化目标函数:

CBOW如何将one-hot向量转换成低维词向量

CBOW如何将one-hot向量转换成低维词向量

CBOW的目标函数

最后,我们使用梯度下降迭代更新 CBOW如何将one-hot向量转换成低维词向量 和 CBOW如何将one-hot向量转换成低维词向量 , 收敛到最终词向量。

所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W'。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

参考
[1] https://www.zhihu.com/question/44832436/answer/266068967

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
猜你喜欢
  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
  • 2022-02-03
  • 2021-08-28
  • 2022-12-23
  • 2021-09-12
相关资源
相似解决方案