Skip-Gram模型和CBOW模型是一母同胞的产物,CBOW模型是给出上下文预测中间的字是什么,而Skip-Gram模型则是给出中间的字预测上下文分别是什么。
从本质上来讲两者都是在找一个最佳的嵌入矩阵的数值!
步骤1:准备输入数据
- 示例句子:“猫坐在垫子上”。
- 选择中心词,例如:“坐”。
- 确定上下文词(窗口大小为2),即:“猫”,“在”,“垫子”,“上”。
步骤2:转换为one-hot向量
- 为词汇表中的每个词创建one-hot向量(例如:“猫”,“坐”,“在”,“垫子”,“上”)。
- “坐”的one-hot向量为 [0, 1, 0, 0, 0]。
步骤3:嵌入层
- 利用嵌入矩阵(初始是随机出来的)将中心词的one-hot向量转换为稠密向量(取出对应索引的向量)。
步骤4:预测上下文
- 使用中心词的词嵌入预测其上下文词,通常通过线性层和softmax函数实现。
步骤5:模型输出和调整
- 输出为上下文词的概率分布,显示每个词作为上下文词出现的可能性。
- 通过比较预测输出和实际上下文词的one-hot表示,计算损失。
- 使用梯度下降调整嵌入矩阵,减少损失。
步骤6:重复并学习
- 重复以上步骤,每次迭代选取不同的中心词。
- 模型学习的词嵌入能够反映词之间的语义关系。
所以不论是Skip-Gram还是CBOW,最后训练完成后都会得到一个N(词数量)乘M(自定义的每个词向量长度)的嵌入矩阵,这个矩阵的每一行都对应着每个词,这样就可以达到模型训练的预期效果了。