[NLP复习笔记] Word2Vec: 基于负采样的 Skip-gram 及其 SGD 训练
1. one-hot 向量
我们先了解一下
假设存在一个单词集合:
那么,这些单词经过
显然,每个位置被看作一个特征,这个特征只能是 1(存在)或者 0(不存在)。
但是,对于包含大量唯一词汇的大型语料库而言,
而且
2. Word2Vec
2.1 Word2Vec 介绍
例如,经过训练后,单词
通过
从维度上,提取的
2.2 Skip-gram 与 CBOW
本篇文章将会介绍基于
3. 基于 Negative Sampling 的 Skip-gram
3.1 Skip-gram 模型

下面的
-
输入层
:一个 的 向量, 为词汇表大小。表示一个单词,也是我们的 目标词。 -
矩阵:输入层到隐藏层之间 的参数矩阵,包含了模型使用的所有词向量,目的是为了将输入层的 向量映射到嵌入向量空间,也就是 维空间。 -
隐藏层
:一个 的特征向量,其实也就是当前的 目标词对应的词向量 。 -
矩阵:隐藏层到输出层之间的 的参数矩阵,用来将隐藏层的表示转换到输出空间。也表示了所有单词的词向量,将于 目标词词向量做内积。 -
输出层
:一个 的向量。经过 后(做内积之后)产生一个相似度向量,向量中 每个元素 表示词汇表 每个单词 的 在目标词上下文出现 的 原始概率。最后要经过一个 激活层 得到 真实概率。对于 多分类 问题,常常采用 函数;对于 二分类 问题,则一般采用 函数。(注意,这里的输出层并非图中最终的输出,只是一个概率的分布)PS: 在后面的问题中,将会采用
函数。 -
输出单词
: 个单词的 向量,其中 表示采用的 上下文窗口的大小。根据输出层 的概率分布,选取 前 大概率 的单词作为最终预测的 目标词 的上下文单词 。下图是一个上下文窗口典型示例:

3.2 Negative Sampling
传统的神经语言模型需要在每一步对全词汇表进行运算,而
由此我们可以得到如下定义:
-
样本概率
其中
表示 目标词对应的词向量, 表示 目标词的上下文对应的词向量。 表示 函数, 是两个词向量的内积。 -
正样本似然函数
-
负样本似然函数
我们需要最大化正样本的概率,同时最小化负样本的概率,所以,可以转化为最大化下式:
为了计算方便,我们可以取对数,得到对数似然函数:
为了后续方便训练,我们可以变成最小化如下形式 (在前面加一个负号):
由
一般情况下使用
这就是我们最终要 最小化的目标函数
3.3 参数求导
我们最终需要得到最优的 应该没有人不懂这个算法吧),我们要分别对这些参数求导。
目标函数中有
我们先对其进行变形,得:
由此可得
我们可以再看下
后面再对各个参数求导就比较清晰易懂了,具体过程如下(对数看作取
-
对
求导这里使用了 链式求导法则。
其中前半部分为:
后半部分为:
最后结合起来得到
(记得最前面有一个负号) :
-
对
求导使用 链式求导法则
前半部分为:
后半部分为:
由于
,我们可以把 换成 便于后续化简:将两个部分结合起来,得到
(记得最前面有一个负号):
-
对
求导对前面两个参数进行求导后,对
求导就方便多了。对于前半部分,由
可得
对于后半部分,由
得
最后结合起来,得到
(记得最前面有一个负号):
以上就是对参数求导的全部推导过程。
3.4 SGD 更新公式
将上面的导数套用到
经过不断迭代更新后,最后得到最优的
最后,通常会将两个词向量进行相加,来表述单词。例如第
参考
一切都是命运石之门的选择,本文章来源于博客园,作者:MarisaMagic,出处:https://www.cnblogs.com/MarisaMagic/p/17949927,未经允许严禁转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结