CBOW模型理解

学到NLP的时候CBOW模型是基础入门的门槛,但好多教程讲的都很复杂,直呼听不懂。B站上有个不错的动画演示版本,但是越往后也听不懂。实际上简化下来的原理很简单,但无奈都讲的不好。这里自己理解记录一下。

在CBOW模型之前,计算词与词之间的距离方法已经比较成熟了,但还是有各种痛点。详细看看CBOW模型:

步骤1:准备输入数据

假设我们有一句话:“猫坐在垫子上”。我们的目标是使用一个模型来学习每个词的向量表示。假设我们关注的“中心词”是“坐”,我们希望通过它的上下文词——“猫”和“垫子”来预测它。

我们先确定上下文词和中心词:

  • 上下文词:猫, 垫子
  • 中心词:坐
步骤2:转换为one-hot向量

对于词汇表中的每个词,我们都有一个独热向量(就是自己的索引是1,其他都是0)。

  • 词汇表中只有五个词:“猫”,“坐”,“在”,“垫子”,“上”。
  • 那么我们定义“猫”的one-hot向量是 [1, 0, 0, 0, 0],“垫子”的one-hot向量是 [0, 0, 0, 1, 0]。
步骤3:嵌入层

我们再随机一个初始化的矩阵(嵌入矩阵)。用这个矩阵和独热向量一乘,相当于取出词对应索引的矩阵值。也就是在嵌入矩阵中寻找对应的行。

  • 假设嵌入矩阵长度(列数)是2,我们可能得到“猫”是 [0.2, 0.3],“垫子”是 [0.1, 0.8]。
步骤4:计算上下文的平均向量

然后我们计算所有上下文词向量的平均值。对于“猫”和“垫子”,平均向量可能是 [(0.2+0.1)/2, (0.3+0.8)/2] = [0.15, 0.55]。后面就简单了,用这个平均值去和中心词的距离比较梯度下降就行了。

步骤5:使用上下文向量预测中心词

这个平均向量随后用来预测中心词“坐”。在模型中,我们通过对这个平均向量进行处理,试图得到一个新的向量,这个新的向量在词汇表中最有可能对应的就是“坐”。

步骤6:模型输出和调整

输出是一个分数(或者概率)的向量,表示每个词是中心词的可能性。例如,模型可能会输出类似 [0.1, 0.6, 0.1, 0.1, 0.1] 的向量,这里第二个位置的0.6表示模型认为“坐”是中心词的可能性最高。
通过与实际中心词“坐”的one-hot表示 [0, 1, 0, 0, 0] 比较,我们可以计算出误差,并通过反向传播调整嵌入矩阵,使得模型的预测更准确。

步骤7:重复并学习

我们重复这个过程,每次选择不同的中心词和上下文词,每次迭代都调整嵌入矩阵。

用一句话最简化这个过程就是:

给一组随机数,分别对应上这个句子的每个词,然后选一个中心词,取这个中心词的前后词来进行平均,用这个平均值和中心词本身的值来计算损失,不断降低损失。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值