Word2vec原理+常见优化手段

官网地址:https://code.google.com/archive/p/word2vec/

论文地址:https://arxiv.org/pdf/1301.3781.pdf

我觉得原理讲的比较好的:word2vec原理(一) CBOW与Skip-Gram模型基础 - 刘建平Pinard - 博客园

最近发现学习知识还是尽量找官网的解释,比较全,别人讲过的会帮助你理解,但是会漏掉一些知识

word2vec是训练词向量的一款非常好用的工具,由谷歌发明,主要有:

1.2种模型: cbow(连续词袋模型)和skip-gram(跳字模型)

2.2种近似训练的方法:层次softmax和nagative_sampling(负采样)

一:2种模型 CBOW vs Skip-Gram

Word2vec原理+常见优化手段_第1张图片

 

CBOW:输入特定词的上下文向量,输出是所有词的softmax的概率,训练的目标是使得特定词的softmax概率最大

Skip-Gram:输入特定词,输出是所有词的softmax概率,训练目标是使得特定词上下文的对应的词的出现概率最大

二:二种训练技巧

Word2vec实际上是一个浅层的神经网络,由输入层-隐藏层-输出层构成,输出层本来的目标是特定词的softmax概率,如果不加以优化,复杂度是V(词汇表大小),复杂度相当高,所以Word2vec提出了2种近似的训练办法,用以提升训练速度

1.Hierarchical Softmax

输入层到隐藏层,使用的是所有输入向量求和并取平均。而在隐藏层-输出层,则是构建了一颗霍夫曼树来替代隐层到输出层的映射,根节点的词向量对应着我们投影后的词向量,树的内部节点就相当于是所有隐藏层的神经元,而树的叶子节点就相当于是softmax输出层的神经元,树的叶子节点的大小就是词汇表的大小V。

映射不是一下子完成的,而是沿着树节点一步步完成的,所以也叫做层次softmax。

具体是使用逻辑回归,用词向量和树的内部节点的参数,计算出往左还是往右走的概率,目标就是找到合适的所有节点的词向量和所有内部节点θ, 使训练样本达到最大似然

使用梯度上升进行优化

优点:将复杂度从V降低到了log2(V),且满足贪心的优化思想,越常出现的词汇,越靠近根节点

cbow:对2c个输入进行迭代

skip-gram:对2c个输出进行迭代

2.Nagative Sampling

hs的缺点是:虽然极大地提升了效率,但是如果是一个生僻词,那么需要向下走很久,所以采用ns来求解

取一个中心词作为正例,neg个采样出来的词作为负例,通过二元逻辑回归,得到每个词的词向量和对应的参数

如何采样?

按照每个词出现的频次,取四分之三次幂,得到每个词的出现的概率,按照这个概率来采样。(其实是概率*M,其中 M>>V,将1等分成M个线段,每个词汇根据自己的概率得到对应的长度,采样的到哪段就取对应段的词汇作为负例)

为什么取四分之三?

作者有说是实践的效果更好,不过可以想象下四分之三次幂的曲线,对于罕见词而言,概率变化不大,而对常见词,下降的比较明显,可以降低常见词被抽取到的频次。

三、表现和适用情况:

1.结构:skip-gram (慢,但对罕见词效果更好) vs CBOW (fast)

2.训练方法:hierarchical softmax (对罕见词效果更好) vs negative sampling (对常见词效果更好,对低维度的词效果更好)

3.sub-sampling(下采样):在大数据集上,可以提升准确度和训练速度,1e-3 to 1e-5

4.维度:一般是越大越好,(也有可能会有反例)

5.窗口大小:skip-gram:10左右,cbow:5左右

所以如果要追求速度的话:CBOW+nagative sampling

要追求罕见词的表现的话:skip-gram+ hierarchical softmax

四、其他:

预训练的词向量

GoogleNews-vectors-negative300.bin.gz.

https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

如何衡量准确率:

./demo-word-accuracy.sh

词聚类:

./demo-classes.sh

从词到词汇(我理解是组合词)

./demo-phrases.sh

词的类比关系:

demo-analogy.sh

你可能感兴趣的:(机器学习,NLP,自然语言处理,word2vec,词向量,数据挖掘)