cs224n笔记,word2vec总体介绍,包括CBOW和Skip-gram,负采样训练
Word2vec
简介
把词汇变成词向量。
类别1 | 类别2 | |
---|---|---|
算法 | CBOW,上下文预测中心词汇 | Skip-gram,中心词汇预测上下文 |
训练方法 | 负采样 | 哈夫曼树 |
语言模型
两种句子:
- 正常的句子:
The cat jumped over the puddle
。 概率高,有意义。 - 没意义的句子:
stock boil fish is toy
。概率低,没意义。
二元模型
一个句子,有
缺点
- 只考虑单词相邻传递概率,而忽略句子整体的可能性。
- context size=1,只学了相邻单词对的概率
- 会计算整个大数据集的全局信息
CBOW
给上下文The cat _ over the puddle
,预测jump
。对于每个单词,学习两个向量:
: 输入向量
,(上下文单词): 输出向量
, (中心单词)
符号说明
:词汇表,后面用 代替词汇表单词个数 :词汇表中第 个单词 :向量的维数 :输入矩阵,也可以用 来表达 : 的第 列, 的输入向量表达 :输出矩阵,可以用 来表达 : 的第i行, 的输出向量表达
输入与输出
, 输入 个上下文单词,上下文词汇的one-hot向量 : 真实标签 , 输出一个中心单词,中心词汇的one-hot向量
步骤
1 上下文单词onehot向量
one-hot向量的表达:
2 上下文单词向量
3 平均上下文词向量
4 输出单词与上下文计算得分向量
5 得分向量转为概率
$\hat y = \mathrm{softmax}(z) \in \mathbb R^V $
6 真实预测概率对比
预测的概率向量交叉熵
比较算出loss。

目标函数
使用交叉熵
计算loss,损失函数如下:
由于中心单词
交叉熵很好是因为
,预测得好 , 预测得不好
最终损失函数
:
再使用SGD
方法去更新相关的两种向量
Skip-gram
给中心单词 jump
,预测上下文The cat _ over the puddle
。
输入中心单词

步骤
1 中心单词onehot向量
2 中心单词词向量
3 中心词与其他词的得分向量
4 得分向量转为概率
概率
5 预测真实概率对比
预测概率
目标函数
与CBOW不同的是,Skip-gram做了一个朴素贝叶斯条件假设,所有的输出上下文单词都是独立的。
一样,使用SGD去优化U和V。
损失函数实际上是交叉熵
:
负采样训练
每次计算都会算整个词频
相关。只需关心:目标函数
、梯度
、更新规则
。
标签函数
对于一对中心词和上下文单词标签
如下:
, 来自于真实语料 , 来自于负样本,即不在语料中
用sigmoid
表示标签函数:
目标函数
选取合适的
最大化概率也就是最小化负对数似然
负采样集合选择
为中心单词
CBOW
给上下文向量
原始loss
负采样loss
Skip-gram
给中心单词
原始loss
负采样loss