Word2vec 总结
- 两类模型:continuous bag-of-words (CBOW)根据上下文预测中心词;skip-gram 根据中心词预测上下文
- 两种训练方式:负采样和层次 softmax,负采样通过抽取负的样本建立目标函数,而层次 softmax 使用树结构来计算每个词的概率。
word2vec 是基于神经网络的语言模型,输入词嵌入矩阵
V
V
V和输出词嵌入矩阵
U
U
U是模型要训练的参数,CBOW 通过上下文 one-hot 向量和
V
V
V相乘求平均得到中心词词向量估计
v
v
v,中心词词向量再和
U
U
U相乘得到一个得分向量(相当于求
v
v
v和每个词的相似度),用 softmax 归一化把得分向量变成概率输出
y
^
\widehat{y}
y
,表示已知上下文后中心词的条件概率分布 。skip-gram 通过中心词 one-hot 向量和
V
V
V相乘求平均得到中心词词向量,后面步骤和 CBOW 相同。
训练目标函数:使用交叉熵损失衡量生成的概率分布和真实分布的差距。
而真实的分布向量只在 要预测的词 的位置为 1,其他位置为 0,所以目标函数可以把求和简化掉。
但可以发现每次计算Loss 开销很大,因为 softmax 归一化会遍历所有词。所以对模型或者优化目标进行改进,提出了基于层次 softmax 和负采样的方法。
Hierarchical Softmax 的 Word2vec 模型
通过建立一个 Huffman 树,把 Huffman 树接到了原始模型的隐藏层后计算每个词的概率输出,每个叶子节点代表一个词典中的词。 对于词典中的每一个词,在树中都有一条唯一路径到达它,
这条路径的每个节点的分叉是一个逻辑回归的结果,向右走代表 sigmoid 值大于 0.5被分为正类(霍夫曼树编码0),向左走代表 sigmoid 值小于 0.5被分为负类(霍夫曼树编码1)。把这条路径走所有节点的概率相乘得到每个词的输出概率。对于所有词向量和内部节点的参数
θ
\theta
θ ,我们要最大化目标词的概率。最后通过梯度上升法一步步求解参数。 细节参考 1. 细节参考 2.
负采样的 Word2vec 模型
请先看这篇博客,以下是我的概括:
对于一个来自语料库的训练样本
(
c
o
n
t
e
x
t
(
w
c
)
,
w
c
)
(context(w_{c}),w_{c})
(context(wc),wc),我们认为它是一个正例,再到词典中按频率抽词
w
i
w_{i}
wi作为
c
o
n
t
e
x
t
(
w
c
)
context(w_{c})
context(wc)的中心词生成负例样本,建立逻辑回归模型预测条件概率
P
(
w
∣
c
o
n
t
e
x
t
(
w
)
)
P(w|context(w))
P(w∣context(w))或者
P
(
w
i
∣
w
)
P(w_{i}|w)
P(wi∣w),训练参数
θ
\theta
θ 、
x
x
x 使得正例的概率大,负例的概率小。对于这一批样本我们通过梯度上升最大化对数似然函数(由逻辑回归计算的条件概率相乘得到)。
在计算频率时,每个词的次数按原本次数的 3 4 \dfrac{3}{4} 43次幂来算。