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